期货网格交易策略(附源码) – 量化研究中心

电网市战略简介

是什么电网市战略

​ 电网市是一种从在市场上出售某物中利市的驾驶性市战略。,其实质是应用覆盖标的在一节震动行情中价钱在网格区间内的再陷邪道体育以举行加仓减仓的把持以达成覆盖进项最大值化的目的。流传的鉴定是找到形形色色的接近和大量的网格,溃GRI找到仓库栈,归还GRI时点亮,试图捕获价钱进攻的时髦。,达成净值利润率的目的。

网格设置和仓库栈设置

​ 网格市战略至关重要的少数执意网格的接近.交替没有活力的每个网格舱位接近的设置,但这形形色色的于形形色色的的在市场上出售某物和响应的断定,仓库栈地位的接近不应过多。,为了预防资产缺少量,再陷邪道扳柄电网阻力。

战略思惟

  • 该战略率先计算再度30年的典型的值和标准偏差。

  • 应用典型的添加剂和,独自和划分地位的分量

  • 随后停飞上溃区间开多仓,下溃区间365体育在线备用,反向把持并归还完毕地位以调解受到腐蚀

网格设置

    context.band = np.mean(timeseries) +np.array([-40, -3, -2, 2, 3, 40]) *np.std(timeseries)
    context.weight = [, , 0.0, , ]
    grid = pd.cut([bar.close], context.band, labels=[0, 1, 2, 3, 4])[0]context.band = np.mean(timeseries) +np.array([-40, -3, -2, 2, 3, 40]) *np.std(timeseries)
    context.weight = [, , 0.0, , ]
    grid = pd.cut([bar.close], context.band, labels=[0, 1, 2, 3, 4])[0]

​ 获取网格区间部门和设置响应的舱位体重并接到响应的区间

获取多仓舱位

position_long = context.account().position(symbol=context.symbol, side=PositionSide_Long) = context.account().position(symbol=context.symbol, side=PositionSide_Long)

​ 获取上一市日可转移get_previous_trading_date重大聚会,归还值为字母串体式:

  • symbol必要设置标的指定遗传密码。

  • side必要设置数永恒的,PositionSide_Long为多仓,PositionSide_Short为空仓。

下单到目的使均衡

order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
                                 position_side=PositionSide_Long)(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
                                 position_side=PositionSide_Long)

​ 常作复合词时期调仓可应用schedule重大聚会举行时代任命划拨的款项:

  • symbol必要设置标的指定遗传密码。

  • percent为使均衡,此处设置为响应网格对应的体重

  • order_type必要设置数永恒的,OrderType_Market为牌价单,OrderType_Limit为最低价格单

  • side必要设置数永恒的,PositionSide_Long为多仓,PositionSide_Short为空仓。

战略回测剖析

剖析

​ 朕拔取了2017年7月至2016年9月作为回测一段时间,可以看出:

  • 胜率(具有净值利润率的平仓次数与总平仓次数之比)达成了87%。

  • 卡玛比率(年化产量与历史最大回撤之比)是应用最大回撤率来使变重风险。采取最大回撤率来使变重风险,关怀的是最顶点的位置。卡玛比率越高表现战略获得物每单位最大花钱的东西获得物的惩罚越高。在这边卡玛比率超越了。

  • 夏普比率(年化产量与动摇率之比)超越,也即获得物1单位的风险,会有超越个单位的进项报答

  • 战略进项弯曲物比较地不变,在无止损环境的位置下,最大回撤把持在获得物变化,并成跑赢沪深300按生活指数调整。

网格市战略源码(未来的):

  1. # coding=utf-8
  2. from __future__ import print_function, absolute_import, unicode_literals
  3.  
  4. import numpy as np
  5. import pandas as pd
  6. from gm.api import*
  7.  
  8. ''''''
  9. 本战略率先计算了过来300个价钱通知的平均值和标准偏差
  10. 并停飞平均值加减1和2个标准偏差接到网格的区间部门,
  11. 并独自和划分地位的分量
  12. 那么停飞价钱获名次的区间来划拨的款项舱位(+/-40为上降谪人间,无意味深长的):
  13. (-40,-3],(-3,-2],(-2,2],(2,3],(3,40](详细价钱相同的人平均值+数字倍标准偏差)
  14. [-, -, 0.0, , ](资产使均衡,此处负标记表现365体育在线备用)
  15. 回测通知为:的1min通知
  16. 回工时定额研究期为:2017-07-01 08:00:00到2017-10-01 16:00:00
  17. ''''''
  18.  
  19.  
  20. def init(context):
  21. context.symbol =''''
  22. # 订阅, bar频率为1min
  23. subscribe(symbols=context.symbol, frequency=''60s'')
  24. # 获取过来300个价钱通知
  25. timeseries = history_n(symbol=context.symbol, frequency=''60s'', count=300, fields=''close'', fill_missing=''Last'',
  26. end_time=''2017-07-01 08:00:00'', df=True)[''close''].values
  27. # 获取网格区间部门
  28. context.band = np.mean(timeseries)+ np.array([-40,-3,-2,2,3,40])* np.std(timeseries)
  29. # 设置网格的舱位
  30. context.weight =[,,0.0,,]
  31.  
  32.  
  33. def on_bar(context, bars):
  34. bar = bars[0]
  35. # 停飞价钱落在(-40,-3],(-3,-2],(-2,2],(2,3],(3,40]的区间变化来获取最新沉淀获名次的价钱区间
  36. grid = pd.cut([bar.close], context.band, labels=[0,1,2,3,4])[0]
  37. # 获取多仓舱位
  38. position_long = context.account().position(symbol=context.symbol, side=PositionSide_Long)
  39. # 获取空仓舱位
  40. position_short = context.account().position(symbol=context.symbol, side=PositionSide_Short)
  41. # 若无舱位且价钱溃则比照设置好的区间开仓
  42. ifnot position_long andnot position_short and grid !=2:
  43. # 暗中网格超过超越3个,做多
  44. if grid >=3:
  45. order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
  46. position_side=PositionSide_Long)
  47. print(context.symbol,翻开仓库栈价钱到仓库栈, context.weight[grid])
  48. if grid <=1:
  49. order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
  50. position_side=PositionSide_Short)
  51. print(context.symbol,''以牌价单365体育在线备用到舱位'', context.weight[grid])
  52. # 有效多仓库栈工序
  53. elif position_long:
  54. if grid >=3:
  55. order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
  56. position_side=PositionSide_Long)
  57. print(context.symbol,'在市场上出售某物价钱空白,仓库栈到仓库栈', context.weight[grid])
  58. # 暗中GRI相同的人2,平仓
  59. elif grid ==2:
  60. order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,
  61. position_side=PositionSide_Long)
  62. print(context.symbol,在市场上出售某物价钱表是完全的和多个的。)
  63. # 决不1为在暗中网格的把接地,做空
  64. elif grid <=1:
  65. order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,
  66. position_side=PositionSide_Long)
  67. print(context.symbol,在市场上出售某物价钱表是完全的和多个的。)
  68. order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
  69. position_side=PositionSide_Short)
  70. print(context.symbol,''以牌价单365体育在线备用到舱位'', context.weight[grid])
  71. # 持有空仓的处置
  72. elif position_short:
  73. # 决不1为在暗中网格的把接地,做空
  74. if grid <=1:
  75. order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
  76. position_side=PositionSide_Short)
  77. print(context.symbol,'在市场上出售某物价钱空白空仓库栈到仓库栈', context.weight[grid])
  78. # 暗中GRI相同的人2,平仓
  79. elif grid ==2:
  80. order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,
  81. position_side=PositionSide_Short)
  82. print(context.symbol,在市场上出售某物价钱不偏不倚的。)
  83. # 暗中网格超过超越3个,做多
  84. elif grid >=3:
  85. order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,
  86. position_side=PositionSide_Short)
  87. print(context.symbol,在市场上出售某物价钱不偏不倚的。)
  88. order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
  89. position_side=PositionSide_Long)
  90. print(context.symbol,翻开仓库栈价钱到仓库栈, context.weight[grid])
  91.  
  92.  
  93. if __name__ ==''__main__'':
  94. ''''''
  95. 战略ID战略ID,由零碎达到
  96. 决定决定,请与本用纸覆盖的称号保持一致
  97. mode实时调式:MODE_LIVE回测调式:MODE_BACKTEST
  98. 记号绑定计算器的ID,可在零碎设置-秘密密钥明智地使用中达到
  99. 后验开端时期后验开端时期
  100. 后验完毕时期后验完毕时期
  101. backtest_adjust份修复方法不修复:ADJUST_NONE前修复:ADJUST_PREV后修复:ADJUST_POST
  102. 后验\初始\现钞报答初始基金
  103. 后验佣钱比率
  104. 后验滑动率后验滑动率后验
  105. ''''''
  106. run(strategy_id=''strategy_id'',
  107. filename='''',
  108. mode=MODE_BACKTEST,
  109. token=''token_id'',
  110. backtest_start_time=''2017-07-01 08:00:00'',
  111. backtest_end_time=''2017-10-01 16:00:00'',
  112. backtest_adjust=ADJUST_PREV,
  113. backtest_initial_cash=10000000,
  114. backtest_commission_ratio=0.0001,
  115. backtest_slippage_ratio=0.0001)

网格市(未来的)文字菱形:金块定量市平台  ,请索引重印的菱形!

———————————————————————————————————————————————————-

更传统的的份/未来的定量战略源指定遗传密码VIE:

发表评论

电子邮件地址不会被公开。 必填项已用*标注