ダブルEMAクロスオーバーシステムは,2つの指数的な移動平均値 (EMA) をベースとしたトレンドフォローティングシステムである.現在のトレンド方向を決定し,それに応じて取引信号を生成するために異なる期間を持つ2つのEMAを使用する.このシステムは,シンプルな論理と簡単な実装により,市場のトレンドを効果的に把握することができ,中長期のトレーダーに適している.
このシステムの核心は2つのEMAに依存しており,一つは高速EMAと一つは遅いEMAである.高速EMAがスローEMAよりも高くなったとき,それは上昇傾向とみなされる.高速EMAがスローEMAよりも低いとき,それは下落傾向とみなされる.
この2つのEMAとの価格関係に基づいて,バーは異なる取引区域に分類できる.
速いEMAがスローEMAよりも高く,価格が速いEMA (G1) よりも高くなった場合,強い買い区間であり,ここでロングポジションを取ることができます.
価格が速いEMA (R1) の下にある場合,これは強いセールゾーンであり,ここでショートポジションを取ることができます.
2つのEMAが交差すると,警告 (黄色) と移行 (オレンジ) ゾーンは,2つのEMAとの価格関係に基づいて決定されます.これらのゾーンは潜在的な傾向の変化を示し,追加の指標を使用して慎重に取引する必要があります.
トレーディング・シグナルは,価格が異なるゾーンに移動するときに生成される. 強いゾーンG1とR1では,シグナルが直接取り込める. 警告および移行ゾーンでは,追加の指標の確認が必要です.
StochRSIは,潜在的なエントリーとアウトプット点を特定するのに役立つように実装されています.StockRSIからの過剰販売および過剰購入の読み取りは,追加の購入および販売信号を提供することができます.
シンプルで清潔な論理で,理解し実行するのが簡単です
中長期の傾向を効果的に把握する
強いゾーンと警告/移行ゾーンを区別し,信頼できる取引信号を生成する
ストックRSIの導入により,入口と出口のタイミングがさらに改善される
純粋にトレンドフォローするシステムとして,トレンドではない市場では業績が損なわれる可能性があります.
適切なEMA期間の設定が誤った信号を引き起こす可能性があります.
警告区域と移行区域は,取引リスクが高いため,慎重に扱われるべきです.
ストップ・ロスの欠如は,損失の増加につながる可能性があります.
リスクは以下によって軽減できます.
傾向が強い楽器を選択し,傾向が弱ければ取引を一時停止する
誤った信号を最小限に抑えるために EMA 期間を最適化
警告/移行地域における確認のための追加指標の導入
ストップ・ロスの実施と,トレードごとに損失を制御する
この制度は以下の分野においてさらに改善できる.
信号の確認のためにMACD,KDJなどのより多くの指標を組み込む
取引成功率を向上させるため,取引地域での量拡大などのフィルターを追加します.
適正パラメータのための市場条件に基づいて,EMA期間を動的に調整する
ストップロスの戦略を導入し,特定の損失率で取引を終了する.
ポジションサイズとマネー管理を最適化
最適な構成を見つけるために,異なる楽器のパラメータをテストし,微調整する
より多くの信号確認,ダイナミックパラメータ最適化,ストップ損失,適切なマネーマネジメントを導入することで,システムの安定性が向上し,より良い結果を得るリスクが軽減できます.
ダブルEMAクロスオーバーシステムは,二つのEMAを比較した上で,トレンドフォローするシステムである.トレンド方向を決定し,トレードシグナルを生成するために,EMAとの価格関係に基づいて異なるトレードゾーンを識別する.明確な論理と簡単な実装を持つシステムとして,トレンドを効果的に把握することができる.リスクは存在するが,補助指標,ダイナミック最適化,ストップ損失,マネーマネジメントを通じて軽減できる.全体として,ダブルEMAクロスオーバーシステムは,中長期のトレーダーに適した堅牢なトレンドフォローするシステムである.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Vvaz_ //base-on CDC ActionZone By Piriya a simple 2EMA and is most suitable for use with medium volatility market //@version=4 strategy(title="Vin's Playzone" ,shorttitle="VPz", overlay=true, margin_long=4, margin_short=2) //variable srcf = input(title="Source",type=input.source,defval=close) tffix = input(title="Fixed Timeframe",type=input.bool,defval=true) tfn = input(title="Timeframe in",type=input.resolution,defval="D") ema1 = input(title="Fast EMA",type=input.integer,defval=12) ema2 = input(title="Slow EMA",type=input.integer,defval=26) ema3 = input(title="EMA 100",type=input.bool,defval=true) smooter =input(title="Smoothing period (1 = no smoothing)",type=input.integer,defval=2) fillbar =input(title="Fill Bar Color",type=input.bool,defval=true) emasw = input(title="Show EMA",type=input.bool,defval=true) bssw = input(title="Show Buy-Sell signal",type=input.bool,defval=true) plotmm = input(title="Show Buy-Sell Momentum",type=input.bool,defval=true) plotmmsm = input(title="RSI Smoothing",type=input.integer,defval=0,minval=0,maxval=2) //math xcross =ema(srcf,smooter) efast = tffix ? ema(security(syminfo.tickerid,tfn,ema(srcf,ema1), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema1) eslow = tffix ? ema(security(syminfo.tickerid,tfn,ema(srcf,ema2), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema2) ema3x = ema(xcross,100) //Zone Bull = efast > eslow Bear = efast < eslow G1 = Bull and xcross > efast //buy G2 = Bear and xcross > efast and xcross > eslow //pre-buy1 G3 = Bear and xcross > efast and xcross < eslow //pre-buy2 R1 = Bear and xcross < efast //sell R2 = Bull and xcross < efast and xcross < eslow //pre-sell1 R3 = Bull and xcross < efast and xcross > eslow //pre-sell2 //color bcl = G1 ? color.green : G2 ? color.yellow : G3 ? color.orange :R1 ? color.red :R2 ? color.orange : R3 ? color.yellow : color.black barcolor(color=fillbar ? bcl : na ) //plots line1 = plot(ema3 ? ema3x : na ,"EMA100",color=color.white) line2 = plot(emasw ? efast : na ,"Fast EMA",color=color.green) line3 = plot(emasw ? eslow : na ,"Slow EMA",color=color.red) fillcl = Bull ? color.green : Bear ? color.red : color.black fill(line2,line3,fillcl) //actions buywhen = G1 and G1[1]==0 sellwhen = R1 and R1[1]==0 bullish = barssince(buywhen) < barssince(sellwhen) bearish = barssince(sellwhen) < barssince(buywhen) buy = bearish[1] and buywhen sell = bullish[1] and sellwhen bullbearcl = bullish ? color.green : bearish ? color.red : color.black //plot trend plotshape(bssw ? buy : na ,style=shape.arrowup,title="BUY",location=location.belowbar,color=color.green) plotshape( bssw ? sell : na ,style=shape.arrowdown ,title="Sell",location=location.abovebar,color=color.red) // Momentum Signal using StochRSI smoothK = input(5,"StochRSI smooth K",type=input.integer,minval=1) smoothD = input(4,"StochRSI smooth D",type=input.integer,minval=1) RSIlen = input(14,"RSI length",type=input.integer,minval=1) STOlen = input(14,"Stochastic length",type=input.integer,minval=1) SRsrc = input(close,"Source for StochasticRSI",type=input.source) OSlel = input(20,"Oversold Threshold",type=input.float,minval=0.00) OBlel = input(80,"Oversold Threshold",type=input.float,minval=0.00) rsil = rsi(SRsrc,RSIlen) K = sma(stoch(rsil,rsil,rsil,STOlen),smoothK) D = sma(K,smoothD) buymore = iff( bullish ,iff(D < OSlel and crossover(K,D), 2, iff(D > OSlel and crossover(K,D), 1,0)),0) sellmore = iff( bearish,iff(D > OBlel and crossunder(K,D), 2, iff(D < OBlel and crossunder(K,D), 1,0)),0) //plot momentum plotshape(plotmm ? buymore > plotmmsm ? buymore : na : na ,"Buy More!" ,style=shape.triangleup,location=location.belowbar,color=color.green) plotshape(plotmm ? sellmore > plotmmsm ? sellmore : na : na ,"Sell More!" ,style=shape.triangledown,location=location.abovebar,color=color.red) // === INPUT BACKTEST RANGE === FromYear = input(defval = 2009, title = "From Year", minval = 2009) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2009) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" //stratgy excuter strategy.entry("Long",true,when=window() and buy or buymore) strategy.close("Long",when=window() and sell or sellmore,comment="TP Long") strategy.entry("Short",false,when=window() and sell or sellmore) strategy.close("Short",when=window() and buy or buymore,comment="TP Short")