トリプル EMA トレンドフォロー戦略は,市場のトレンドをフォローするのに非常に適した戦略です.それは十分なトレンド確認があるときに,ロングまたはショートポジションを確立するために,異なる期間の3つのEMAを取引シグナルとして使用します.
この戦略の利点は,誤った信号を軽減し,ポジションに入る前に十分なトレンド強さを確保できる.同時に,市場の変動に基づいてストップを遅らせることができる適応性のあるストップ・ロースシステムがあり,よりよいリスク管理を達成する.
この戦略では,7~14~21期間の EMAがエントリーシグナル指標として使用されます. 具体的な論理は,価格が3つのEMAを同時に越えるときは,ロング,価格が3つのEMAを同時に越えるときはショートです.
このデザインは,誤った信号を減らすことができ,トレンドが入る前に十分に明確であることを保証します.また,市場トレンドをタイムリーに把握するために,EMAの3つの期間は適切に設定されています.
この戦略は,ATRと最大引き下げに基づいた適応型ストップ損失システムを使用する.これはリアルタイムで価格変動を計算し,それに応じてストップ損失ラインを設定する.特に,ストップ損失バッファゾーンとしてATRの一定倍数を計算する.
上昇傾向の間,ストップ・ロスは新しい高値で上昇し,良い追いかける効果があります.価格がバッファゾーンの低点に戻ると,ストップ・ロスはポジションを閉じるように誘発されます.これは市場の状況に応じてストップ・ロスのリスクを制御することができます.
この戦略は固定パーセントの取利益方法を使用する.ポジションを開いた後,取利益ラインはエントリー価格よりも一定の割合で設定されます.価格が取利益ラインに上昇すると,ポジションは取利益のために閉鎖されます.
この固定収益率の利点は,達成された時点で退出を満足させる目標利益水準を事前に設定することを可能にする.また,価格が再び下がるリスクも回避する.収益率は必要に応じて調整することができます.
トレンド判断指標と組み合わせることで不安定な市場で盲目的にポジションを開くのを避けることができる.また,収益を取ることまたは利益比率の移動方法を使用して利益を取ることをより柔軟にする.一般的に,戦略の適用と協力するために手動的な判断はまだ必要です.
戦略は,次の側面でも最適化できます.
MACD,KDなどなどのインテリタイミングを決定するためにより多くのインジケーターを使用し,不安定な市場に囚われないようにします.
利潤を取ることにより柔軟性があります. 利潤を取ることにより,
ストップ・ロスのメソッドにダウン・トレイル・メカニズムを追加し,価格が再び下落すると再び低値点を追跡し,リスクを制御することができます.
異なる製品の特徴に基づいて EMA 期間パラメータを調整し,トレンド判断を最適化します.
ポジションサイジングモジュールを追加し,資金の利用比に基づいて取引サイズごとに調整できます.
トリプルEMAトレンドフォロー戦略は,非常に実践的なトレンドフォロー戦略です. 強いトレンド判断能力を持ち,自動的にオーダーを管理できる適応性のある取利益とストップ損失メカニズムも備えています. 最適化観点から,取利益とストップ損失システムは,リアルタイム市場状況に基づいて調整するためにさらに改善することができます. しかし,全体として,この戦略は実行しやすく制御可能なリスク選択です.
/*backtest start: 2023-01-01 00:00:00 end: 2023-06-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(shorttitle='Three EMAs Trend-following Strategy',title='Three EMAs Trend-following Strategy (by Coinrule)', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1) //Backtest dates fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970) showDate = input(defval = true, title = "Show Date Range", type = input.bool) start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" ema_1 = ema(close, input(7)) ema_2 = ema(close, input(12)) ema_3 = ema(close, input(21)) Take_profit= ((input (4))/100) longTakeProfit = strategy.position_avg_price * (1 + Take_profit) length = input(20, "Length", minval = 2) src = input(close, "Source") factor = input(3.0, "Multiplier", minval = 0.25, step = 0.25) volStop(src, atrlen, atrfactor) => var max = src var min = src var uptrend = true var stop = 0.0 atrM = nz(atr(atrlen) * atrfactor, tr) max := max(max, src) min := min(min, src) stop := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src) uptrend := src - stop >= 0.0 if uptrend != nz(uptrend[1], true) max := src min := src stop := uptrend ? max - atrM : min + atrM [stop, uptrend] [vStop, uptrend] = volStop(src, length, factor) go_long = crossover(close, ema_1) and crossover(close, ema_2) and crossover(close, ema_3) closeLong = close > longTakeProfit or crossunder(close, vStop) //Entry strategy.entry(id="long", long = true, when = go_long and window()) //Exit strategy.close("long", when = closeLong and window()) plot(vStop,"Vstop", color.black, linewidth=2) plot(ema_1,"EMA Short", color.green, linewidth=1) plot(ema_2,"EMA Mid", color.purple, linewidth=1) plot(ema_3,"EMA Long", color.red, linewidth=1)