これは,二重移動平均指標に基づく逆転取引戦略である.異なるパラメータ設定を持つ移動平均の2つのグループを計算し,方向の変化に応じて価格傾向を判断することによって,方向変化の感度パラメータを設定することによって取引信号を生成することができる.
この戦略のコア指標は,二重移動平均線である.この戦略は,移動平均線の種類 (SMA,EMA,など),長さ,価格源 (閉じる価格,典型的な価格,など) を選択することができます.移動平均線の2つのグループを計算した後,反応パラメータを定義することによって,それらの方向が決定されます.速い線がスローラインの上を横切ると購入信号が生成され,下を横切ると販売信号が生成されます.反応パラメータは,ターニングポイントを識別するために感度を調整するために使用されます.
さらに,戦略は,間違った信号を生むのを避けるために,方向の変化と継続的な上昇/低下を決定するための条件も設定します.そして,価格の上昇と低下を異なる色で視覚化します.価格が上昇し続けるとき,movavg線は緑で,価格が下がるときは赤で表示されます.
デュアル・モバヴグ戦略は,異なるパラメータ設定の速い線と遅い線を組み合わせ,取引市場のノイズを効果的にフィルタリングし,より強いトレンドを識別することができます.単一のモバヴグ戦略と比較して,間違った信号を削減し,トレンドがよりはっきりしているときに市場に参入することができ,それによってより高い勝利率を得ることができます.
反応パラメータは,戦略が柔軟で,異なるサイクルや種類に適応できるようにします.戦略プロセスは直感的でシンプルで,理解し最適化するのが簡単です.
この戦略の最大のリスクは,ターニングポイントを逃し,お金を失うか,逆向きのポジションを取ることである.これは反応パラメータ設定に関連している.反応が小さすぎると,間違った信号が発生する傾向がある.反応が大きすぎると,より良いエントリーポイントを逃す可能性があります.
また,損失を効果的に制御できないというリスクもあります.価格が激しく変動すると,損失を迅速に止めることができず,損失が増大します.これはリスクを制御するためにストップロスの戦略を使用する必要があります.
この戦略の主な最適化方向は,反応パラメータ,移動平均の種類,長さを選択することに焦点を当てている.適切な反応を増やすことは,間違った信号を減らすことができる.シグナルを生成するための最良の組み合わせを選択するために,移動平均パラメータは,異なるサイクルと種類に従ってテストすることができる.
さらに,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)