天猫首页
当前位置: 首页 > 趋势EA > 双均线策略(期货)——Python量化

浏览历史

双均线策略(期货)——Python量化
zoom next

双均线策略(期货)——Python量化

  • 本店售价:¥5000元 ¥8000元
  • 商品货号:ECS009185
  • 商品库存: 9999
  • 上架时间:2022-09-15
  • 商品点击数:417

商品描述

商品属性

商品标签

相关商品

双均线策略

目录

双均线策略

1. 原理

均线的“前世今生”

均线理论为什么有效

均线理论的缺陷

均线理论的改进

2. 策略逻辑

 3. 策略代码

4. 回测结果与稳健性分析 

1. 原理 均线的“前世今生”

均线 一个进行形态分析时总也绕不过去的指标。

均线最早由美国投资专家Joseph E.Granville(格兰威尔)于20世纪中期提出 现在仍然广泛为人们使用 成为判断买卖信号的一大重要指标。从统计角度来说 均线就是历史价格的平均值 可以代表过去N日股价的平均走势。

1962年7月 Joseph E.Granville在他的书中提出了著名的Granville八大买卖法则。只利用股价和均线即可进行择时 方法简单有效 一经提出 迅速受到市场追捧。尤其是其中的金叉和死叉信号 更是沿用至今。

Granville 八大法则其中有四条是用于判断买进时机 另外四条是用于判断卖出时机。买进和卖出法则一一对应 分布在高点的左右两侧 除买4和卖4以外 。法则内容如下所示

买1 均线整体上行 股价由下至上上穿均线 此为黄金交叉 形成第一个买点。
买2 股价出现下跌迹象 但尚未跌破均线 此时均线变成支撑线 形成第二个买点。
买3 股价仍处于均线上方 但呈现急剧下跌趋势。当跌破均线时 出现第三个买点。
买4 右侧 股价和均线都处于下降通道 且股价处于均线下方 严重远离均线 出现第四个买点。

卖1 均线由上升状态变为缓慢下降的状态 股价也开始下降。当股价跌破均线时 此为死亡交叉 形成第一个卖点。
卖2 股价仍处于均线之下 但股价开始呈现上涨趋势 当股价无限接近均线但尚未突破时 此时均线变成阻力线 形成第二个卖点。
卖3 股价终于突破均线 处于均线上方。但持续时间不长 股价开始下跌 直至再一次跌破均线 此为第三个卖点。
卖4 左侧 股价和均线都在上涨 股价上涨的速度远快于均线上涨的速度。当股价严重偏离均线时 出现第四个卖点。

均线理论为什么有效

Shiller 1981 在研究中发现 资产的长期价格呈现均值回复的特征 即从长期来看 资产的价格会回归均值。这也是均线理论被广泛应用的前提。

均线理论的缺陷

均线归根到底是一种平均值 平均值在应用过程中存在最大的问题就是其滞后性。当出现买入卖出信号时 最佳时机早已过去。举例来说 如果A股票最新价格出现了较大的涨幅 股价和均线都上涨 但均线的速度慢于股价上涨速度。此时 从形态上来看 金叉出现 为买入信号。次日 股价回调 股价下降的速度快于均线下降的速度 形成死叉 为卖点。这样一买一卖不仅没有盈利 反而出现亏损。

均线理论的改进

针对均线的缺点 市场上提出了各种各样的改进方法。

1.对均线的计算方法进行改正。

加权移动平均线是在移动平均线的基础上按照时间进行加权。越靠近当前日期的价格对未来价格的影响越大 赋予更大的权重 越远离当前日期价格 赋予越小的权重。

2.调整均线周期

利用不同周期均线得到的结果也不同。许多有经验的投资者发现 在不同的市场中 有些均线的效果显著优于其他周期均线。有些长线投资者还会将股价替换成短周期均线进行趋势判断。

2. 策略逻辑

第一步 获取数据 计算长短期均线
第二步 设置交易信号

当短期均线由上向下穿越长期均线时做空
当短期均线由下向上穿越长期均线时做多

回测数据: SHFE.rb2101的60s频度bar数据
回测时间: 2020-04-01 到 2020-05-31
回测初始资金 3万

 3. 策略代码
# coding utf-8
from __future__ import print_function, absolute_import
from gm.api import *
import talib
本策略以SHFE.rb2101为交易标的 根据其一分钟(即60s频度 bar数据建立双均线模型 
短周期为20 长周期为60 当短期均线由上向下穿越长期均线时做空 
当短期均线由下向上穿越长期均线时做多,每次开仓前先平掉所持仓位 再开仓。
注 为了适用于仿真和实盘 在策略中增加了一个“先判断是否平仓成功再开仓”的判断逻辑 以避免出现未平仓成功 可用资金不足的情况。
回测数据为:SHFE.rb2101的60s频度bar数据
回测时间为:2020-04-01 09:00:00到2020-05-31 15:00:00
def init(context):
 context.short 20 # 短周期均线
 context.long 60 # 长周期均线
 context.symbol SHFE.rb2101 # 订阅交易标的
 context.period context.long 1 # 订阅数据滑窗长度
 context.open_long False # 开多单标记
 context.open_short False # 开空单标记
 subscribe(context.symbol, 60s , count context.period) # 订阅行情
def on_bar(context, bars):
 # 获取通过subscribe订阅的数据
 prices context.data(context.symbol, 60s , context.period, fields close )
 # 利用talib库计算长短周期均线
 short_avg talib.SMA(prices.values.reshape(context.period), context.short)
 long_avg talib.SMA(prices.values.reshape(context.period), context.long)
 # 查询持仓
 position_long context.account().position(symbol context.symbol, side 1)
 position_short context.account().position(symbol context.symbol, side 2)
 # 短均线下穿长均线 做空(即当前时间点短均线处于长均线下方 前一时间点短均线处于长均线上方)
 if long_avg[-2] short_avg[-2] and long_avg[-1] short_avg[-1]:
 # 无多仓情况下 直接开空
 if not position_long:
 order_volume(symbol context.symbol, volume 1, side OrderSide_Sell, position_effect PositionEffect_Open,
 order_type OrderType_Market)
 print(context.symbol, 以市价单调空仓到仓位 )
 # 有多仓情况下 先平多 再开空(开空命令放在on_order_status里面)
 else:
 context.open_short True
 # 以市价平多仓
 order_volume(symbol context.symbol, volume 1, side OrderSide_Sell, position_effect PositionEffect_Close,
 order_type OrderType_Market)
 print(context.symbol, 以市价单平多仓 )
 # 短均线上穿长均线 做多 即当前时间点短均线处于长均线上方 前一时间点短均线处于长均线下方 
 if short_avg[-2] long_avg[-2] and short_avg[-1] long_avg[-1]:
 # 无空仓情况下 直接开多
 if not position_short:
 order_volume(symbol context.symbol, volume 1, side OrderSide_Buy, position_effect PositionEffect_Open,
 order_type OrderType_Market)
 print(context.symbol, 以市价单调多仓到仓位 )
 # 有空仓的情况下 先平空 再开多(开多命令放在on_order_status里面)
 else:
 context.open_long True
 # 以市价平空仓
 order_volume(symbol context.symbol, volume 1, side OrderSide_Buy,
 position_effect PositionEffect_Close, order_type OrderType_Market)
 print(context.symbol, 以市价单平空仓 )
def on_order_status(context, order):
 # 查看下单后的委托状态
 status order[ status ]
 # 成交命令的方向
 side order[ side ]
 # 交易类型
 effect order[ position_effect ]
 # 当平仓委托全成后 再开仓
 if status 3:
 # 以市价开空仓 需等到平仓成功无仓位后再开仓
 # 如果无多仓且side 2 说明平多仓成功 开空仓
 if effect 2 and side 2 and context.open_short:
 context.open_short False
 order_volume(symbol context.symbol, volume 1, side OrderSide_Sell, position_effect PositionEffect_Open,
 order_type OrderType_Market)
 print(context.symbol, 以市价单调空仓到仓位 )
 # 以市价开多仓,需等到平仓成功无仓位后再开仓
 # 如果无空仓且side 1 说明平空仓成功 开多仓
 if effect 2 and side 1 and context.open_long:
 context.open_long False
 order_volume(symbol context.symbol, volume 1, side OrderSide_Buy, position_effect PositionEffect_Open,
 order_type OrderType_Market)
 print(context.symbol, 以市价单调多仓到仓位 )
if __name__ __main__ :
 strategy_id策略ID,由系统生成
 filename文件名,请与本文件名保持一致
 mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
 token绑定计算机的ID,可在系统设置-密钥管理中生成
 backtest_start_time回测开始时间
 backtest_end_time回测结束时间
 backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
 backtest_initial_cash回测初始资金
 backtest_commission_ratio回测佣金比例
 backtest_slippage_ratio回测滑点比例
 run(strategy_id strategy_id ,
 filename main.py ,
 mode MODE_BACKTEST,
 token token_id ,
 backtest_start_time 2020-04-01 09:00:00 ,
 backtest_end_time 2020-05-31 15:00:00 ,
 backtest_adjust ADJUST_NONE,
 backtest_initial_cash 10000000,
 backtest_commission_ratio 0.0001,
 backtest_slippage_ratio 0.0001)

4. 回测结果与稳健性分析 

设定初始资金3万 手续费率为0.01% 滑点比率为0.01% 得到的回测结果如下图

策略整体收益率5.75% 年化收益率为39.15% 同期沪深300收益率为5.22% 策略跑赢沪深300.最大回撤为10.32%。

为了探究该策略在不同回测期以及不同品种的适用情况 对策略进行调整。调整范围主要包括 标的、回测期、均线周期 调整结果如下表所示

 

 根据上表可以看出 对于不同的标的、回测期、均线周期 双均线策略的收益情况差异较大。即使相同标的、相同均线周期 不同回测期收益情况也会出现较大差异。在应用时要注意风险管理 避免出现短期过拟合现象。

注 本文来自掘金量化教程


双均线策略(期货)——Python量化 均线,一个进行形态分析时总也绕不过去的指标。均线最早由美国投资专家Joseph E.Granville(格兰威尔)于20世纪中期提出,现在仍然广泛为人们使用,成为判断买卖信号的一大重要指标。从统计角度来说,均线就是历史价格的平均值,可以代表过去N日股价的平均走势。1962年7月,Joseph E.Granville在他的书中提出了著名的Granville八大买卖法则。只利用股价和均线即可进行择时,方法简单有效,一经提出,迅速受到市场追捧。尤其是其中的金叉和死叉信号,更是沿用至今。 复制链接

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

商品属性
[]

商品标签

购买记录(近期成交数量0)

还没有人购买过此商品
总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页

用户评论(共0条评论)

  • 暂时还没有任何用户评论
总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页
用户名: 匿名用户
E-mail:
评价等级:
评论内容:
验证码: captcha
在线咨询