在股票、期货市场中,均线一直是众多投资者常用指标。那么对于投资新手来讲,可能并不了解均线的原理和使用方法,本文对均线理论的原理、计算方式进行了介绍,并展示在聚宽平台的两种调用方法与相应策略。然后我们对设计的均线策略基于2018-01-01到2018-12-31,以上证ETF50为测试标的进行回测,回测结果显示,该策略收益高于基准收益7.5个百分点。
均线即移动平均线,是指将一定交易时间内的股票价格的平均值以曲线联结,用来显示股票价格波动情况。均线是利用平均数来消除股价不规则的变动,以观察股市的动态变化,因此移动的天数越少,均线相对股价的变化反应就越灵敏;移动的天数越多,均线中所包含的偶然性因素就越少,但同时其所提示的操作依据越滞后。
均线的计算又分为算数移动平均、线性加权移动平均、阶梯型移动平均、平滑移动平均多种。本文采用的是算数移动平均的计算方法。 下面我们介绍算数移动平均计算方法:
日均价=当日成交额/当日成交股数
5日平均价格=(当日平均价 前四日平均价格*4)/5
由于这种计算方法比较麻烦,因此现在多采用收盘价来计算。
MA=(P1 ..... Pn)/n P为每日收盘价,n为天数
我们首先设定我们的基本参数,标的510050.XSGH,短期n1,中期n2,长期n3。然后通过attribute_history函数,和通过JoinQuant技术指标因子库MA函数来获取近日收盘价计算均价。attribute_history函数只能在回测和模拟交易环境使用。
我们设定以上证50为标的,选择2018-01-31为回测时期主要基于如下考虑:
1、均线策略属于择时策略,以一支股票为基准都存在自选择偏差,样本量过小并不能说明均线理论的适用性 。
2、上证50 指数是根据科学客观的方法,挑选上海证券市场规模大、流动性好的最具代表性的50 只股票组成样本股,以便综合反映上海证券市场最具市场影响力的一批龙头企业的整体状况,这样就减少了选择偏差。
3、2018-01-31到2018-12-31期间,市场中出于不断震荡下跌状态,期间也存在小幅度回弹,这种市场状态持续时间长,比较常见,因此有利于测试均线策略的效果。
均线参数设定为短期3、中期7、长期21,该参数并无明确的优势参照组,因此我们又进一步使用均线参数5、 13、 34,做了回测,进行对比。
#设定标的security='510050.XSHG'#通过计算近N日收盘价来计算均线,先设定参数,短期n1,中期n2,长期n3.n1=3 n2=7 n3=21#使用attribute_history函数得到近n日的收盘价,n必须大于长期n3。该函数基于模拟盘,因此价获得的价格都是基于当前交易日期。close_data=attribute_history('510050.XSHG',n3 2,'1d','close',df=False)# 取得过去 ma_n1 天的平均价格ma_n1 = close_data['close'][-n1:].mean()# 取得过去 ma_n2 天的平均价格ma_n2 = close_data['close'][-n2:].mean() #取得过去ma_n3天的平均价格 ma_n3 =close_data['close'][-n3:].mean()#使用MA函数,第一步先导入technical_anaylisisfrom jqlib.technical_analysis import *# 获取均价,利用MA(security_list, check_date, timeperiod=5)获取MA均线,返回是一个列表,因此需要再次调用返回一个字符串。 # MA函数需要指定一个节点时期ma_n1=MA(security,check_date='2018-10-19',timeperiod=n1)[security] ma_n2=MA(security,check_date='2018-10-19',timeperiod=n2)[security] ma_n3=MA(security,check_date='2018-10-19',timeperiod=n3)[security] ma_n1,ma_n2,ma_n3#画图,根据计算的均线价格绘制成图,record(**kwargs)record(ma_n1=ma_n1) record(ma_n2=ma_n2) record(ma_n3=ma_n3)
均线计算结果如下图2-1所示:
图2-1
如果短期均价高于中期均价,中期均价高于长期均价,则买入。
如果短期均价低于于中期均价,则卖出。
策略代码逻辑如下所示:
#获取当前现金cash = context.portfolio.cash# 如果当前有余额,并且n1日均线大于n2日均线;近两日成交量均值大于七日成交量均值if ma_n1 ma_n2 and ma_volume1>ma_volume7:# 用所有 cash 买入股票order_value(security, cash)# 记录这次买入log.info("Buying %s" % (security))# 如果n1日均线小于n3日均线,并且目前有头寸elif ma_n1 < ma_n3 and context.portfolio.positions[security].closeable_amount > 0:# 全部卖出order_target(security, 0)# 记录这次卖出log.info("Selling %s" % (security))
?? 根据前面的研究,我们基本可以写出一个简单的均线策略,参数3、 7、 21.该策略基于标的上证50ETF,在2018-01-01到2018-12-31的回测结果如下图4-1所示:
图4-1
参数3、 7、 21.该策略基于标的上证50ETF,在2018-01-01到2018-12-31的回测结果如下图4-2所示:
图4-2
1、回测我们发现,MA指标依然是知道投资者买入卖出的优秀指标,通过研究发现,这主要是基于熊市股票达到高点后下跌的速度要远远快于牛市中股票上涨的速度。因此MA指标可以有效预防突然的熊市对投资者的利益损害。
2、如果用策略收益与基准收益的差值来横向策略效果,我们发现MA指标在牛市中效果要优于熊市,在熊市中熊效果由于震荡市。由于个股指标不具有代表性,因此不参与对比分析。
3、均线虽然具有滞后性、延续性等缺点,但是依然是判断股市趋势的有效指标。
均线策略注意事项: 我们常常制定交易策略时,由于过分担心风险发生,因此常常会考虑将买入条件设定非常苛刻,譬如让短期均线大于中期均线,中期均线大于长期均线。但万万过分苛刻的买入条件往往会降低收益,通过对股票市场的日线研究发现,市场中牛市的增长速度,始终是低于熊市的下跌速度,因此在用均线判断买入与卖出时机的时候,一定要注意,尽量保持买入与卖出条件接近,如果差异过大则可能导致收益率降低,风险系数反而增大。
在股票、期货市场中,均线一直是众多投资者常用指标。那么对于投资新手来讲,可能并不了解均线的原理和使用方法,本文对均线理论的原理、计算方式进行了介绍,并展示在聚宽平台的两种调用方法与相应策略。然后我们对设计的均线策略基于2018-01-01到2018-12-31,以上证ETF50为测试标的进行回测,回测结果显示,该策略收益高于基准收益7.5个百分点。
均线即移动平均线,是指将一定交易时间内的股票价格的平均值以曲线联结,用来显示股票价格波动情况。均线是利用平均数来消除股价不规则的变动,以观察股市的动态变化,因此移动的天数越少,均线相对股价的变化反应就越灵敏;移动的天数越多,均线中所包含的偶然性因素就越少,但同时其所提示的操作依据越滞后。
均线的计算又分为算数移动平均、线性加权移动平均、阶梯型移动平均、平滑移动平均多种。本文采用的是算数移动平均的计算方法。
下面我们介绍算数移动平均计算方法:
日均价=当日成交额/当日成交股数
5日平均价格=(当日平均价+前四日平均价格*4)/5
由于这种计算方法比较麻烦,因此现在多采用收盘价来计算。
MA=(P1+.....+Pn)/n
P为每日收盘价,n为天数
我们首先设定我们的基本参数,标的510050.XSGH,短期n1,中期n2,长期n3。然后通过attribute_history函数,和通过JoinQuant技术指标因子库MA函数来获取近日收盘价计算均价。attribute_history函数只能在回测和模拟交易环境使用。
我们设定以上证50为标的,选择2018-01-31为回测时期主要基于如下考虑:
均线策略属于择时策略,以一支股票为基准都存在自选择偏差,样本量过小并不能说明均线理论的适用性。
上证50 指数是根据科学客观的方法,挑选上海证券市场规模大、流动性好的最具代表性的50 只股票组成样本股,以便综合反映上海证券市场最具市场影响力的一批龙头企业的整体状况,这样就减少了选择偏差。
2018-01-31到2018-12-31期间,市场中出于不断震荡下跌状态,期间也存在小幅度回弹,这种市场状态持续时间长,比较常见,因此有利于测试均线策略的效果。
均线参数设定为短期3、中期7、长期21,该参数并无明确的优势参照组,因此我们又进一步使用均线参数5、 13、 34,做了回测,进行对比。
#设定标的security='510050.XSHG'#通过计算近N日收盘价来计算均线,先设定参数,短期n1,中期n2,长期n3.n1=3n2=7n3=21#使用attribute_history函数得到近n日的收盘价,n必须大于长期n3。该函数基于模拟盘,因此价获得的价格都是基于当前交易日期。close_data=attribute_history('510050.XSHG',n3+2,'1d','close',df=False)# 取得过去 ma_n1 天的平均价格ma_n1 = close_data['close'][-n1:].mean()# 取得过去 ma_n2 天的平均价格ma_n2 = close_data['close'][-n2:].mean()#取得过去ma_n3天的平均价格ma_n3 =close_data['close'][-n3:].mean()
#使用MA函数,第一步先导入technical_anaylisisfrom jqlib.technical_analysis import *# 获取均价,利用MA(security_list, check_date, timeperiod=5)获取MA均线,返回是一个列表,因此需要再次调用返回一个字符串。 # MA函数需要指定一个节点时期ma_n1=MA(security,check_date='2018-10-19',timeperiod=n1)[security]ma_n2=MA(security,check_date='2018-10-19',timeperiod=n2)[security]ma_n3=MA(security,check_date='2018-10-19',timeperiod=n3)[security]ma_n1,ma_n2,ma_n3
(2.4143333333333334, 2.4162857142857144, 2.4753809523809527)
#画图,根据计算的均线价格绘制成图,record(**kwargs) record(ma_n1=ma_n1) record(ma_n2=ma_n2) record(ma_n3=ma_n3)
均线计算结果如下图2-1所示:
图2-1如果短期均价高于中期均价,中期均价高于长期均价,则买入。
如果短期均价低于于中期均价,则卖出。
策略代码逻辑如下所示:
#获取当前现金cash = context.portfolio.cash# 如果当前有余额,并且n1日均线大于n2日均线;近两日成交量均值大于七日成交量均值if ma_n1 ma_n2 and ma_volume1>ma_volume7:# 用所有 cash 买入股票order_value(security, cash)# 记录这次买入log.info("Buying %s" % (security))# 如果n1日均线小于n3日均线,并且目前有头寸elif ma_n1 < ma_n3 and context.portfolio.positions[security].closeable_amount > 0:# 全部卖出order_target(security, 0)# 记录这次卖出log.info("Selling %s" % (security))
   根据前面的研究,我们基本可以写出一个简单的均线策略,参数3、 7、 21.该策略基于标的上证50ETF,在2018-01-01到2018-12-31的回测结果如下图4-1所示:
图4-1参数3、 7、 21.该策略基于标的上证50ETF,在2018-01-01到2018-12-31的回测结果如下图4-2所示:
图4-21、回测我们发现,MA指标依然是知道投资者买入卖出的优秀指标,通过研究发现,这主要是基于熊市股票达到高点后下跌的速度要远远快于牛市中股票上涨的速度。因此MA指标可以有效预防突然的熊市对投资者的利益损害。
2、如果用策略收益与基准收益的差值来横向策略效果,我们发现MA指标在牛市中效果要优于熊市,在熊市中熊效果由于震荡市。由于个股指标不具有代表性,因此不参与对比分析。
3、均线虽然具有滞后性、延续性等缺点,但是依然是判断股市趋势的有效指标。
[^]均线策略注意事项: 我们常常制定交易策略时,由于过分担心风险发生,因此常常会考虑将买入条件设定非常苛刻,譬如让短期均线大于中期均线,中期均线大于长期均线。但万万过分苛刻的买入条件往往会降低收益,通过对股票市场的日线研究发现,市场中牛市的增长速度,始终是低于熊市的下跌速度,因此在用均线判断买入与卖出时机的时候,一定要注意,尽量保持买入与卖出条件接近,如果差异过大则可能导致收益率降低,风险系数反而增大。
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程