问答交流

双均线策略报错

由bq8aahdd创建,最终由small_q 被浏览 48 用户

本代码由可视化策略环境自动生成 2023年6月15日 17:24

本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。

回测引擎:初始化函数,只执行一次

def m19_initialize_bigquant_run(context): # 加载预测数据 context.ranker_prediction = context.options['data'].read_df() # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数 context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))

回测引擎:每日数据处理函数,每天执行一次



def m19_handle_data_bigquant_run(context, data): # 按日期过滤得到今日的预测数据 options_data = context.ranker_prediction[context.ranker_prediction.date == data.current_dt.strftime('%Y-%m-%d')] # 标的为字符串格式 sid = context.symbol(context.instruments[0])# 标的为字符串格式 price = data.current(sid, 'price') # 最新价格 cash = context.portfolio.cash # 现金 cur_position = context.portfolio.positions[sid].amount # 持仓 short_mavg = options_data['m5'].values # 短期均线值 long_mavg = options_data['m60'].values # 长期均线值 #交易逻辑 # 如果短期均线大于长期均线形成金叉,并且没有持仓,并且该股票可以交易 if short_mavg > long_mavg and cur_position == 0 and data.can_trade(sid):context.order(sid, int(cash/price/100)*100) # 买入 print('{}全仓买入{}股票'.format(data.current_dt.strftime('%Y-%m-%d'),sid.symbol)) # 如果短期均线小于长期均线形成死叉,并且有持仓,并且该股票可以交易 elif short_mavg < long_mavg and cur_position > 0 and data.can_trade(sid):context.order_target_percent(sid, 0) # 全部卖出 print('{}卖出{}股票'.format(data.current_dt.strftime('%Y-%m-%d'),sid.symbol))

回测引擎:准备数据,只执行一次

def m19_prepare_bigquant_run(context): pass

回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。

def m19_before_trading_start_bigquant_run(context, data): pass

m1 = M.instruments.v2( start_date='2018-01-01', end_date='2020-12-31', market='CN_STOCK_A', instrument_list="""603369.SHA 600779.SHA 000568.SZA 000860.SZA 000596.SZA 000858.SZA 002646.SZA 603919.SHA 002304.SZA 600702.SHA 603589.SHA 000799.SZA 600599.SHA 603198.SHA 600519.SHA 600199.SHA 600809.SHA 600197.SHA 600696.SHA""", max_count=0 )

m2 = M.advanced_auto_labeler.v2( instruments=m1.data, label_expr="""# #号开始的表示注释

0. 每行一个,顺序执行,从第二个开始,可以使用label字段

1. 可用数据字段见 https://bigquant.com/docs/develop/datasource/deprecated/history_data.html

添加benchmark_前缀,可使用对应的benchmark数据

2. 可用操作符和函数见 表达式引擎 <https://bigquant.com/docs/develop/bigexpr/usage.html>_

计算收益:5日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)

shift(close, -5) / shift(open, -1)

极值处理:用1%和99%分位的值做clip

clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))

将分数映射到分类,这里使用20个分类

all_wbins(label, 20)

过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)

where(shift(high, -1) == shift(low, -1), NaN, label) """, start_date='', end_date='', benchmark='000300.HIX', drop_na_label=True, cast_label_int=True )

m3 = M.input_features.v1( features="""# #号开始的表示注释

多个特征,每行一个,可以包含基础特征和衍生特征

m5 = ta_ema_5_0 m60 = ta_ema_60_0 """ )

m15 = M.general_feature_extractor.v7( instruments=m1.data, features=m3.data, start_date='', end_date='', before_start_days=90 )

m16 = M.derived_feature_extractor.v3( input_data=m15.data, features=m3.data, date_col='date', instrument_col='instrument', drop_na=True, remove_extra_columns=False, user_functions={} )

m4 = M.dai_join.v1( data1=m2.data, data2=m16.data, on='date,instrument', how='inner', sort=False )

m13 = M.dropnan.v1( input_data=m4.data )

m6 = M.stock_ranker_train.v6( training_ds=m13.data, features=m3.data, learning_algorithm='排序', number_of_leaves=30, minimum_docs_per_leaf=1000, number_of_trees=20, learning_rate=0.1, max_bins=1023, feature_fraction=1, data_row_fraction=1, plot_charts=True, ndcg_discount_base=1, m_lazy_run=False )

m9 = M.instruments.v2( start_date=T.live_run_param('trading_date', '2021-01-01'), end_date=T.live_run_param('trading_date', '2021-12-31'), market='CN_STOCK_A', instrument_list="""603369.SHA 600779.SHA 000568.SZA 000860.SZA 000596.SZA 000858.SZA 002646.SZA 603919.SHA 002304.SZA 600702.SHA 603589.SHA 000799.SZA 600599.SHA 603198.SHA 600519.SHA 600199.SHA 600809.SHA 600197.SHA 600696.SHA""", max_count=0 )

m17 = M.general_feature_extractor.v7( instruments=m9.data, features=m3.data, start_date='', end_date='', before_start_days=90 )

m18 = M.derived_feature_extractor.v3( input_data=m17.data, features=m3.data, date_col='date', instrument_col='instrument', drop_na=True, remove_extra_columns=False, user_functions={} )

m14 = M.dropnan.v1( input_data=m18.data )

m8 = M.stock_ranker_predict.v5( model=m6.model, data=m14.data, m_lazy_run=False )

m19 = M.trade.v4( instruments=m9.data, options_data=m8.predictions, start_date='', end_date='', initialize=m19_initialize_bigquant_run, handle_data=m19_handle_data_bigquant_run, prepare=m19_prepare_bigquant_run, before_trading_start=m19_before_trading_start_bigquant_run, volume_limit=0.025, order_price_field_buy='open', order_price_field_sell='close', capital_base=1000000, auto_cancel_non_tradable_orders=True, data_frequency='daily', price_type='真实价格', product_type='股票', plot_charts=True, backtest_only=False, benchmark='000300.HIX' )


为什么说我出现这个错误呀,我已经设置m5了呀

[2023-06-15 17:18:37.934705] ERROR: moduleinvoker: module name: backtest, module version: v8, trackeback: KeyError: 'm5'

The above exception was the direct cause of the following exception:

KeyError: 'm5' [2023-06-15 17:18:37.947924] ERROR: moduleinvoker: module name: trade, module version: v4, trackeback: KeyError: 'm5'

The above exception was the direct cause of the following exception:

标签

双均线策略均线
评论
  • 帮帮我把!来个大神帮帮我
  • 你实际想开发双均线策略吧,这个地方获取出来是stockranker的预测结果,获取不到均线值的。 ![{w:100}](/wiki/api/attachments.redirect?id=f24d3ea0-475a-476b-b5d9-1a38c4bcaa14)双均线参照这个模板:,另外下次分享的时候建议用右上角的策略分享功能,不然你拷贝源代码发这里格式就是乱的,很难调试 [https://bigquant.com/experimentshare/9c9ac8cd54b942bbbc0664c8d0d8ac8d](https://bigquant.com/experimentshare/9c9ac8cd54b942bbbc0664c8d0d8ac8d) \
  • 就是不能用stockranker训练和预测这个吗,只能直接回测吗
{link}