
三重EMAトレンド追跡戦略は,市場トレンドを追跡するのに非常に適した戦略である.それは,3つの異なる周期のEMAをポジション構築信号として使用し,十分なトレンドが確認されたときに多頭または空頭ポジションを確立する.
この戦略の優点は,偽信号を軽減し,トレンドの強度が充分になった後に再入場することを保証することにある.同時に,それは自律的な止損システムを備えており,市場の変動に応じて止損を追跡することができ,その結果,より良いリスク管理効果が得られる.
この戦略は,7・14・21周期の3つのEMAをポジショニングシグナルとして使用する.具体的には,価格が3つのEMAを同時に突破するときは,多めに;価格が3つのEMAを同時に突破するときは,空白にする.
このような設計は,偽信号を減少させ,トレンドが十分に明瞭であることを保証し,その後再入場する.同時に,三つのEMAサイクルが適切に設定され,市場トレンドの発生を間に合うように捉えることができる.
この戦略は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)