これは,二重移動平均指標に基づく反転取引戦略である.この戦略は,異なるパラメータの2つのセットの移動平均を計算し,その方向の変化に基づいて価格の傾向を判断し,方向の変化に対する感受性パラメータを設定し,取引信号を生成する.
この戦略の核心指標は,二重移動平均である。戦略は,移動平均の種類 (SMA,EMAなど),長さ,価格源 (閉盘価格,典型的な価格など) を選択することを許している。移動平均の2つのセットを計算した後,パラメータの反応を定義することによってその方向を判断する。急線を横切ると買入シグナルが生み出され,横切ると売出シグナルが生み出されます。反応パラメータは,転換点を識別する感覚を調整するために使用される。
さらに,戦略は,変化の方向と継続的な上昇/下降の条件判定を設定し,誤ったシグナルを生じさせないようにする.そして,異なる色で視覚的に価格の下降状態を示す.価格が上昇し続ける時,movavgラインは緑で表示され,下降する時は赤で表示される.
この二重のmovavg戦略は,異なるパラメータで設定された快慢線を組み合わせて,強力なトレンドを識別するために,取引市場のノイズを効果的にシミュレートします.単一のmovavg戦略と比較して,誤った信号を減らすことで,トレンドがより明確であるときに入場することができ,その結果,より高い勝率を得ることができます.
敏感度パラメータのreactionは,この戦略を異なる周期と品種に柔軟に適応させることができる. 戦略プロセスは直感的にシンプルで,容易に理解し,最適化することができる.
この戦略の最大のリスクは,ターニングポイントを逃して損をするか,逆転してポジションを構築することである.これは,パラメータのreactionの設定に関係している.リアクションが小さすぎると,誤った信号が生じやすい;リアクションが大きすぎると,入場ポイントが欠けやすい.
もう一つのリスクは,損失を効果的に制御できないことです.価格が激しく変動するときに,迅速に止まらないことがあり,損失が拡大します.これは,止損戦略と連携して制御する必要があります.
この戦略の最適化方向は,主にパラメータの反応,移動平均のタイプと長さの選択に焦点を当てている. 反応は誤信号を減らすために適切に増加することができる.移動平均のパラメータは,異なる周期と品種に基づいてテストされ,信号を生成する最適な組み合わせを選択することができる.
また,RSI,KDなどの他の補助指標と組み合わせて取引信号を確認することも最適化思考である.または,機械学習方法を使用して自動選択パラメータを使用する.
この戦略は,全体的にシンプルで実用的で,双重移動平均のフィルター波と取引シグナルを生成することによって,トレンド反転を効果的に識別することができ,典型的なトレンド追跡戦略です.最適化パラメータの組み合わせの後,順位捕捉能力と反市場ポジション保持能力の両方が向上します. 止損と位置管理機構と連携して使用する効果はより高いです.
/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)
// === INPUTS
ma_type = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len = input(defval=32, title="MA Lenght", minval=1)
ma_src = input(close, title="MA Source")
reaction = input(defval=2, title="MA Reaction", minval=1)
// SuperSmoother filter
// © 2013 John F. Ehlers
variant_supersmoother(src,len) =>
a1 = exp(-1.414*3.14159 / len)
b1 = 2*a1*cos(1.414*3.14159 / len)
c2 = b1
c3 = (-a1)*a1
c1 = 1 - c2 - c3
v9 = 0.0
v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
v9
variant_smoothed(src,len) =>
v5 = 0.0
v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
v5
variant_zerolagema(src,len) =>
ema1 = ema(src, len)
ema2 = ema(ema1, len)
v10 = ema1+(ema1-ema2)
v10
variant_doubleema(src,len) =>
v2 = ema(src, len)
v6 = 2 * v2 - ema(v2, len)
v6
variant_tripleema(src,len) =>
v2 = ema(src, len)
v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)
v7
variant(type, src, len) =>
type=="EMA" ? ema(src,len) :
type=="WMA" ? wma(src,len):
type=="VWMA" ? vwma(src,len) :
type=="SMMA" ? variant_smoothed(src,len) :
type=="DEMA" ? variant_doubleema(src,len):
type=="TEMA" ? variant_tripleema(src,len):
type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
type=="SSMA" ? variant_supersmoother(src,len) :
type=="ZEMA" ? variant_zerolagema(src,len) :
type=="TMA" ? sma(sma(src,len),len) : sma(src,len)
// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)
direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)
pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")
/////// Alerts ///////
alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")
longCondition = direction>0
shortCondition = direction<0
if (longCondition)
strategy.entry("BUY", strategy.long)
if (shortCondition)
strategy.entry("SELL", strategy.short)