トレンド・トレーディングとダブル・EMA・クロスオーバー・システム

作者: リン・ハーンチャオチャン,日付: 2023年10月26日 17:15:46
タグ:

img

概要

ダブル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期間の設定が誤った信号を引き起こす可能性があります.

  • 警告区域と移行区域は,取引リスクが高いため,慎重に扱われるべきです.

  • ストップ・ロスの欠如は,損失の増加につながる可能性があります.

リスクは以下によって軽減できます.

  1. 傾向が強い楽器を選択し,傾向が弱ければ取引を一時停止する

  2. 誤った信号を最小限に抑えるために EMA 期間を最適化

  3. 警告/移行地域における確認のための追加指標の導入

  4. ストップ・ロスの実施と,トレードごとに損失を制御する

増進 の 機会

この制度は以下の分野においてさらに改善できる.

  1. 信号の確認のためにMACD,KDJなどのより多くの指標を組み込む

  2. 取引成功率を向上させるため,取引地域での量拡大などのフィルターを追加します.

  3. 適正パラメータのための市場条件に基づいて,EMA期間を動的に調整する

  4. ストップロスの戦略を導入し,特定の損失率で取引を終了する.

  5. ポジションサイズとマネー管理を最適化

  6. 最適な構成を見つけるために,異なる楽器のパラメータをテストし,微調整する

より多くの信号確認,ダイナミックパラメータ最適化,ストップ損失,適切なマネーマネジメントを導入することで,システムの安定性が向上し,より良い結果を得るリスクが軽減できます.

結論

ダブル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")




        

もっと