回测时怎样改变持仓为1天?

提问
标签: #<Tag:0x00007fc0705821f8>

(aLIEz) #1

如题。我的逻辑是买的股票固定持仓1天,也就是:今天判断该买哪些股票,然后挂明天开盘的买单和明天收盘的卖单

    # 2. 买卖
    buy_instruments = list(data0['instrument'])
    # 卖
    for instrument in buy_instruments:
        context.order_target(context.symbol(instrument), 0)

    # 买
    for instrument in buy_instruments:
        context.order_value(context.symbol(instrument), cash_avg)

但是回测完之后发现策略只买不卖


请问这种情况如何解决呢?在回测中要怎样做才能实现这样的逻辑呢?
@iQuant @bigquant


(iQuant) #2

看了下代码,买入和卖出部分的代码都是:

for instrument in buy_instruments:

买入和卖出都是 buy_instruments,我明白你的用意,但是这样确实达不到你的目的。这里需要深入理解回测机制的order相关API的具体含义。见:交易引擎

比如说,order_target通过文档介绍为:

order_target(asset, amount, style=None)
买卖股票, 使成交之后最终持有的股票数量达到预期目标的amount(股数)

可以看出,该下单接口的目的是使得成交之后最终持有的股票数量达到预期目标的amount(股数)。比如:

order_target('000002.SZA', 0 )
如果持有万科200股,则生成一个卖出200股的订单
如果持有万科0股,则不需要生成卖出订单。
在你的代码中,运行到order_target之处,持仓里并不存在该股票,因此就没有生成卖出订单了,于是也不会有卖出成交。

如果还是不理解,建议你直接将你的代码分享到社区,这样大家就能帮你一起解决问题啦!


(aLIEz) #3

了解了,谢谢。