移动止损功能
由crisvalentine创建,最终由iquant 被浏览 311 用户
【旧版提示】此文档为旧版本,相关信息可参考新文档:
https://bigquant.com/wiki/doc/114-YCE9b0Z1h3#h-%E7%AD%96%E7%95%A5%E4%BB%8B%E7%BB%8D
版本v1.0
在开发策略时,经常使用个股的固定点位/百分比止盈止损功能。
本策略以买入后最高价下跌10%止损为例,介绍移动止损功能的实现步骤:
-
新建AI可视化模板策略
-
在回测/模拟模块m19的属性栏中进入“主函数”代码框,在函数体最前面插入移动止损的相关代码,详见策略
初始化变量stoploss_stock用来记录移动止损卖出的股票,
针对持仓的股票计算买入以来的最高价,并计算最新价相比最高价的回撤百分比,如果下跌超过10%就止损卖出,同时将股票添加到stoploss_stock变量:
-
在回测/模拟模块m19的属性栏中进入“主函数”代码框,在函数体中找到“# 2. 生成卖出订单”位置,
在上方初始化 sell_stock 列表用来记录轮仓卖出的股票;
在下方轮仓卖出代码 context.order_target(context.symbol(instrument), 0) 前加入判断语句:
#如果已经移动止损卖出过则不再轮仓卖出,以防止出现空头持仓 if instrument in stoploss_stock:
continue
-
在回测/模拟模块m19的属性栏中进入“主函数”代码框,在函数体中找到“# 3. 生成买入订单”位置,将原有的buy_instruments一行代码改为如下:
获取所有排序结果股票列表
buy_list = list(ranker_prediction.instrument)
不再买入已经移动止损和轮仓卖出的股票,以防止出现空头持仓
buy_instruments = [i for i in buy_list if i not in sell_stock + stoploss_stock][:len(buy_cash_weights)]
https://bigquant.com/experimentshare/28c779fc4d864fb786fcdf664207f824
\