楼主: _wallstreetcat_
1030 2

[交易策略] MACD指标 v1.0 [推广有奖]

  • 0关注
  • 36粉丝

已卖:114份资源

讲师

9%

还不是VIP/贵宾

-

威望
0
论坛币
88 个
通用积分
41.5574
学术水平
14 点
热心指数
13 点
信用等级
13 点
经验
6402 点
帖子
257
精华
0
在线时间
235 小时
注册时间
2017-3-16
最后登录
2024-10-20

楼主
_wallstreetcat_ 企业认证  发表于 2021-12-1 18:41:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+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函数)查看每日的买卖交易信号,按照买卖原则执行相应的买入/卖出/调仓操作。
策略源码
  1. def m1_initialize_bigquant_run(context):
  2.     import talib
  3.     all_data = context.options["data"].read()
  4.     all_data['DIF'],all_data['DEA'],all_data['macd']=talib.MACD(all_data['settle'], fastperiod=12, slowperiod=26, signalperiod=9)
  5.    
  6.    
  7.     context.signal_data =  all_data
  8.     context.order_num = 1
  9.     context.PRINT = 1
  10.    
  11.    
  12. # 交易引擎:每个单位时间开盘前调用一次。
  13. def m1_before_trading_start_bigquant_run(context, data):
  14.     # 订阅要交易的合约的行情
  15.     context.subscribe([context.instruments[0]])
  16. # 交易引擎:tick数据处理函数,每个tick执行一次
  17. def m1_handle_tick_bigquant_run(context, data):
  18.     pass

  19. def m1_handle_data_bigquant_run(context, data):
  20.     #获取当前时间
  21.     cur_date = data.current_dt.strftime('%Y-%m-%d')
  22.      
  23.     all_data  = context.signal_data
  24.     cur_data = all_data[all_data['date'] == cur_date]
  25.     DIF = cur_data['DIF'].values[0]
  26.     DEA = cur_data['DEA'].values[0]
  27.     context.ins = context.instruments[0]
  28.    
  29.     #print('=======', cur_date, close, ma_close, context.ins)
  30.     position_long = context.get_position(context.ins, Direction.LONG)
  31.     position_short = context.get_position(context.ins, Direction.SHORT)
  32.       
  33.      # 空头
  34.     if position_long.current_qty != -1 and DIF < DEA:
  35.         #平多
  36.         if position_long.current_qty == 1:
  37.             rv = context.sell_close(context.ins, context.order_num, None, order_type=OrderType.MARKET)
  38.             msg = "{} 平多 for {} 下单函数返回={}".format(str(data.current_dt), context.ins, str(rv))
  39.             context.write_log(msg, stdout=1)
  40.         # 开空
  41.         if position_short.current_qty == 0:
  42.             rv = context.sell_open(context.ins, context.order_num, None, order_type=OrderType.MARKET)
  43.             msg = "{} 开空 for {} 下单函数返回={}".format(str(data.current_dt), context.ins, str(rv))
  44.             context.write_log(msg, stdout=1)
  45.       
  46.     # 多头
  47.     if (position_long.current_qty != 1) and DIF > DEA:
  48.         # 平空
  49.         if position_short.current_qty == 1 :
  50.             rv = context.buy_close(context.ins, context.order_num, None, order_type=OrderType.MARKET)
  51.             msg = "{} 平空 for {} 下单函数返回={}".format(str(data.current_dt), context.ins, str(rv))
  52.             context.write_log(msg, stdout=1)
  53.         # 开多
  54.         if position_long.current_qty == 0:
  55.             rv = context.buy_open(context.ins, context.order_num, None, order_type=OrderType.MARKET)
  56.             msg = "{} 开多 for {} 下单函数返回={}".format(str(data.current_dt), context.ins, str(rv))
  57.             context.write_log(msg, stdout=1)
  58.    


  59. # 交易引擎:成交回报处理函数,每个成交发生时执行一次
  60. def m1_handle_trade_bigquant_run(context, data):
  61.     msg = "handle_trade data:{}".format(data.log_str())
  62.     context.write_log(msg, stdout=context.PRINT)

  63. # 交易引擎:委托回报处理函数,每个委托变化时执行一次
  64. def m1_handle_order_bigquant_run(context, data):
  65.     msg = "handle_order data:{}".format(data.log_str())
  66.     context.write_log(msg, stdout=context.PRINT)

  67. # 交易引擎:盘后处理函数,每日盘后执行一次
  68. def m1_after_trading_bigquant_run(context, data):
  69.     pass


  70. m2 = M.instruments.v2(
  71.     start_date='2021-05-01',
  72.     end_date='2021-09-20',
  73.     market='CN_FUTURE',
  74.     instrument_list='SF8888.CZC',
  75.     max_count=0
  76. )

  77. m3 = M.use_datasource.v1(
  78.     instruments=m2.data,
  79.     datasource_id='bar1d_CN_FUTURE',
  80.     start_date='',
  81.     end_date='',
  82.     m_cached=False
  83. )

  84. m1 = M.hftrade.v1(
  85.     instruments=m2.data,
  86.     options_data=m3.data,
  87.     start_date='',
  88.     end_date='',
  89.     initialize=m1_initialize_bigquant_run,
  90.     before_trading_start=m1_before_trading_start_bigquant_run,
  91.     handle_tick=m1_handle_tick_bigquant_run,
  92.     handle_data=m1_handle_data_bigquant_run,
  93.     handle_trade=m1_handle_trade_bigquant_run,
  94.     handle_order=m1_handle_order_bigquant_run,
  95.     after_trading=m1_after_trading_bigquant_run,
  96.     capital_base=50000,
  97.     frequency='daily',
  98.     price_type='真实价格',
  99.     product_type='期货',
  100.     before_start_days='0',
  101.     benchmark='000300.HIX',
  102.     plot_charts=True,
  103.     disable_cache=False,
  104.     show_debug_info=False,
  105.     backtest_only=False
复制代码



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MACD指标 MACD ACD Mac Instruments

沙发
_wallstreetcat_ 企业认证  发表于 2021-12-1 19:05:11

藤椅
三重虫 发表于 2022-1-3 11:16:00

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-24 02:46