Skip to content

Commit 611a91d

Browse files
committed
feat(strategy): 调整订单数量处理逻辑以符合最小交易单位
1 parent db1096a commit 611a91d

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

hikyuu_cpp/hikyuu/strategy/Strategy.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -399,20 +399,21 @@ TradeRecord Strategy::order(const Stock& stk, double num, const string& remark)
399399
double min_trade_num = stk.minTradeNumber();
400400
double max_trade_num = stk.maxTradeNumber();
401401
if (num > 0.0) {
402-
HKU_WARN_IF_RETURN(num < min_trade_num, ret,
403-
"{} {} order num({}) is less than min trade number({})!",
404-
stk.market_code(), stk.name(), num, min_trade_num);
405-
double buy_num = num;
402+
// HKU_WARN_IF_RETURN(num < min_trade_num, ret,
403+
// "Ignore! {} {} order num({}) is less than min trade number({})!",
404+
// stk.market_code(), stk.name(), num, min_trade_num);
405+
HKU_IF_RETURN(num < min_trade_num, ret);
406+
double buy_num = int64_t(num / min_trade_num) * min_trade_num;
406407
if (buy_num > max_trade_num) {
407408
buy_num = max_trade_num;
408409
}
409410
ret = buy(stk, 0.0, num, 0.0, 0.0, SystemPart::PART_SIGNAL, remark);
410411

411412
} else {
412-
double sell_num = std::abs(num);
413+
double sell_num = int64_t(std::abs(num) / min_trade_num) * min_trade_num;
413414
if (sell_num > max_trade_num && sell_num != MAX_DOUBLE) {
414415
sell_num = max_trade_num;
415-
} else if (sell_num < min_trade_num) {
416+
} else if ((sell_num + num) < min_trade_num) {
416417
sell_num = MAX_DOUBLE; // 指示卖出剩余全部
417418
}
418419
ret = sell(stk, 0.0, sell_num, 0.0, 0.0, SystemPart::PART_SIGNAL, remark);

0 commit comments

Comments
 (0)