关于order_lots函数的疑问

新手专区
标签: #<Tag:0x00007fcf6017a5c0>

(SDFactor) #1
def initialize(context):
    # 设置手续费,买入时万3,卖出是千分之1.3,不足5元以5元计
    set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))

def handle_data(context, data):
    order_lots(symbol('600006.SHA'), 1)

m=M.trade.v3( 
    instruments=['600006.SHA'],
    start_date='2018-01-01',
    end_date='2018-03-31',
    initialize=initialize,
    handle_data=handle_data,
    order_price_field_buy='open',# 买入股票订单成交价为开盘价
    order_price_field_sell='open',# 卖出股票订单成交价为开盘价
    capital_base=float("1.0e6"),# 初始资金为100万
    benchmark='000300.INDX',# 比较基准为沪深300指数
)

按照文档中的说明,order_lots函数按照手数买卖股票,那么order_lots(symbol(‘600006.SHA’), 1)应该是买100股的意思,但是从回测结果来看,并不是100股,而且如果改成不同的股票,购买的数量也不一样,但都不是100股。
请问这个是什么情况?


(小Q) #2

你好,order_lots函数在模拟交易中是整百下单,但是在回测中并不是。
当时之所以要引入order_lots函数,是因为当时回测价格模式只有后复权模式。
现在平台支持前复权、后复权、真实交易价格,因此order_lots不是特别需要了。
希望解决你的疑惑!


(SDFactor) #3

谢谢。
能具体说一下order_lots函数在回测模式中的行为吗?


(小Q) #4

order_lots是曾经使用过的一个下单接口,其逻辑就是交易的时候达到整百下单的目的。在模拟交易的时候,价格是真实交易价格,因此可以保证整百下单,但是回测中价格是后复权因此就不是整百下单了,这里有不一致的地方,因此不建议使用。现阶段而言,完全可以不用使用该下单接口。整百下单的话可以参考:整百下单