移动平均线均回复策略是一种非常简单的趋势交易策略。它的核心思想是当短期移动平均线低于长期移动平均线一定百分比时做多,当短期移动平均线上穿长期移动平均线时平仓。该策略首先计算一短期和一长期的移动平均线,然后根据两条移动平均线的关系产生交易信号。
该策略主要依赖两个移动平均线,一个短期移动平均线,一个长期移动平均线。短期移动平均线参数为smallMAPeriod,长期移动平均线参数为bigMAPeriod。策略首先计算出这两条移动平均线,然后比较两条移动平均线的大小关系。
当短期移动平均线从上方向下跌破长期移动平均线的一定百分比(由percentBelowToBuy参数设定)时,产生买入信号,做多入市。当短期移动平均线后续上涨,重新上穿长期移动平均线时,产生卖出信号,平仓。
该策略捕捉短期移动平均线与长期移动平均线之间的均值回复机会。当短期移动平均线低于长期移动平均线一定程度时,说明资产可能被低估,应有回归均值的机会,做多可以获得反弹利润。
移动平均线均回复策略具有以下几个优势:
该策略简单Parameters优化就可以获得不错的效果。通过调整移动平均线参数和让步百分比参数,可以对股票、外汇、加密货币等不同市场资产进行回测,筛选出最佳参数组合。
移动平均线均回复策略也存在一些风险:
可以通过以下方法降低风险:
移动平均线均回复策略可以从以下几个方面进行优化:
移动平均线均回复策略通过比较短期和长期两个移动平均线的关系,捕捉到短期价格偏离长期趋势后的回归机会。该策略思路简单,容易理解和实现,通过参数优化可以获得较好的效果。但也存在交易信号较少、容易错过价格转折等风险,需要对参数和过滤条件进行测试和优化,才能将策略的收益最大化。
/*backtest start: 2023-02-20 00:00:00 end: 2024-02-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // // @author Sunil Halai // // This very simple strategy is an implementation of PJ Sutherlands' Jaws Mean reversion algorithm. It simply buys when a small moving average period (e.g. 2) is below // a longer moving average period (e.g. 5) by a certain percentage, and closes when the small period average crosses over the longer moving average. // // If you are going to use this, you may wish to apply this to a range of investment assets, as the amount signals is low. Alternatively you may wish to tweak the settings to provide more // signals. strategy("Jaws Mean Reversion [Strategy]", overlay = true) //Strategy inputs source = input(title = "Source", defval = close) smallMAPeriod = input(title = "Small Moving Average", defval = 2) bigMAPeriod = input(title = "Big Moving Average", defval = 5) percentBelowToBuy = input(title = "Percent below to buy %", defval = 3) //Strategy calculation smallMA = sma(source, smallMAPeriod) bigMA = sma(source, bigMAPeriod) buyMA = ((100 - percentBelowToBuy) / 100) * sma(source, bigMAPeriod)[0] if(crossunder(smallMA, buyMA)) strategy.entry("BUY", strategy.long) if(crossover(smallMA, bigMA)) strategy.close("BUY")