- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 88 个
- 通用积分
- 41.5574
- 学术水平
- 14 点
- 热心指数
- 13 点
- 信用等级
- 13 点
- 经验
- 6402 点
- 帖子
- 257
- 精华
- 0
- 在线时间
- 235 小时
- 注册时间
- 2017-3-16
- 最后登录
- 2024-10-20
已卖:114份资源
讲师
还不是VIP/贵宾
- 威望
- 0 级
- 论坛币
 - 88 个
- 通用积分
- 41.5574
- 学术水平
- 14 点
- 热心指数
- 13 点
- 信用等级
- 13 点
- 经验
- 6402 点
- 帖子
- 257
- 精华
- 0
- 在线时间
- 235 小时
- 注册时间
- 2017-3-16
- 最后登录
- 2024-10-20
 | 悲催 2021-11-16 15:56:27 |
|---|
签到天数: 5 天 连续签到: 1 天 [LV.2]偶尔看看I
|
经管之家送您一份
应届毕业生专属福利!
求职就业群
感谢您参与论坛问题回答
经管之家送您两个论坛币!
+2 论坛币
行业轮动策略的交易规则- 利用收盘价的短期(常用为12日)指数移动平均线与长期(常用为26日)指数移动平均线之间的聚合与分离状况,对买进、卖出时机作出研判的技术指标。
- 短期EMA: 短期(例如12日)的收盘价指数移动平均值
- 长期EMA: 长期(例如26日)的收盘价指数移动平均值
- DIF线:(Difference)短期EMA和长期EMA的离差值
- MACD线: DIF线与DEA线的差
- 参数:SHORT(短期)、LONG(长期)、M天数,一般为12、26、9。
策略构建步骤
- 确定股票池和回测时间:通过证券代码列表输入回测的起止日期
- 确定买卖规则:DIF从下而上穿过DEA,买入开仓;相反,如DIF从上往下穿过DEA,卖出开仓。
- 回测:1)通过 trade 模块中的初始化函数定义交易手续费和滑点;2)通过 trade 模块中的主函数(handle函数)查看每日的买卖交易信号,按照买卖原则执行相应的买入/卖出/调仓操作。
策略源码
- def m1_initialize_bigquant_run(context):
- import talib
- all_data = context.options["data"].read()
- all_data['DIF'],all_data['DEA'],all_data['macd']=talib.MACD(all_data['settle'], fastperiod=12, slowperiod=26, signalperiod=9)
-
-
- context.signal_data = all_data
- context.order_num = 1
- context.PRINT = 1
-
-
- # 交易引擎:每个单位时间开盘前调用一次。
- def m1_before_trading_start_bigquant_run(context, data):
- # 订阅要交易的合约的行情
- context.subscribe([context.instruments[0]])
- # 交易引擎:tick数据处理函数,每个tick执行一次
- def m1_handle_tick_bigquant_run(context, data):
- pass
- def m1_handle_data_bigquant_run(context, data):
- #获取当前时间
- cur_date = data.current_dt.strftime('%Y-%m-%d')
-
- all_data = context.signal_data
- cur_data = all_data[all_data['date'] == cur_date]
- DIF = cur_data['DIF'].values[0]
- DEA = cur_data['DEA'].values[0]
- context.ins = context.instruments[0]
-
- #print('=======', cur_date, close, ma_close, context.ins)
- position_long = context.get_position(context.ins, Direction.LONG)
- position_short = context.get_position(context.ins, Direction.SHORT)
-
- # 空头
- if position_long.current_qty != -1 and DIF < DEA:
- #平多
- if position_long.current_qty == 1:
- rv = context.sell_close(context.ins, context.order_num, None, order_type=OrderType.MARKET)
- msg = "{} 平多 for {} 下单函数返回={}".format(str(data.current_dt), context.ins, str(rv))
- context.write_log(msg, stdout=1)
- # 开空
- if position_short.current_qty == 0:
- rv = context.sell_open(context.ins, context.order_num, None, order_type=OrderType.MARKET)
- msg = "{} 开空 for {} 下单函数返回={}".format(str(data.current_dt), context.ins, str(rv))
- context.write_log(msg, stdout=1)
-
- # 多头
- if (position_long.current_qty != 1) and DIF > DEA:
- # 平空
- if position_short.current_qty == 1 :
- rv = context.buy_close(context.ins, context.order_num, None, order_type=OrderType.MARKET)
- msg = "{} 平空 for {} 下单函数返回={}".format(str(data.current_dt), context.ins, str(rv))
- context.write_log(msg, stdout=1)
- # 开多
- if position_long.current_qty == 0:
- rv = context.buy_open(context.ins, context.order_num, None, order_type=OrderType.MARKET)
- msg = "{} 开多 for {} 下单函数返回={}".format(str(data.current_dt), context.ins, str(rv))
- context.write_log(msg, stdout=1)
-
-
- # 交易引擎:成交回报处理函数,每个成交发生时执行一次
- def m1_handle_trade_bigquant_run(context, data):
- msg = "handle_trade data:{}".format(data.log_str())
- context.write_log(msg, stdout=context.PRINT)
- # 交易引擎:委托回报处理函数,每个委托变化时执行一次
- def m1_handle_order_bigquant_run(context, data):
- msg = "handle_order data:{}".format(data.log_str())
- context.write_log(msg, stdout=context.PRINT)
- # 交易引擎:盘后处理函数,每日盘后执行一次
- def m1_after_trading_bigquant_run(context, data):
- pass
- m2 = M.instruments.v2(
- start_date='2021-05-01',
- end_date='2021-09-20',
- market='CN_FUTURE',
- instrument_list='SF8888.CZC',
- max_count=0
- )
- m3 = M.use_datasource.v1(
- instruments=m2.data,
- datasource_id='bar1d_CN_FUTURE',
- start_date='',
- end_date='',
- m_cached=False
- )
- m1 = M.hftrade.v1(
- instruments=m2.data,
- options_data=m3.data,
- start_date='',
- end_date='',
- initialize=m1_initialize_bigquant_run,
- before_trading_start=m1_before_trading_start_bigquant_run,
- handle_tick=m1_handle_tick_bigquant_run,
- handle_data=m1_handle_data_bigquant_run,
- handle_trade=m1_handle_trade_bigquant_run,
- handle_order=m1_handle_order_bigquant_run,
- after_trading=m1_after_trading_bigquant_run,
- capital_base=50000,
- frequency='daily',
- price_type='真实价格',
- product_type='期货',
- before_start_days='0',
- benchmark='000300.HIX',
- plot_charts=True,
- disable_cache=False,
- show_debug_info=False,
- backtest_only=False
复制代码
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
|
|
|