移動平均クロスオーバートレンドフォロー戦略


作成日: 2023-12-12 12:24:11 最終変更日: 2023-12-12 12:24:11
コピー: 0 クリック数: 553
1
フォロー
1621
フォロワー

移動平均クロスオーバートレンドフォロー戦略

概要

この戦略は,移動平均線交差とATR指標に基づいて,自動化されたトレンド追跡取引を実現する.高速EMA線が遅いEMA線を横切るときに,多頭ポジションをとる;高速EMA線の下の遅いEMA線を横切るときに,空頭ポジションをとる.同時に,ATR指標と組み合わせてトレンドの方向を判断し,ATRがトレンドの方向であると判断したときにのみ取引信号を発する.

戦略原則

この戦略は主に2つの技術指標に基づいています.

  1. EMA平均線: 快慢と2つの異なるパラメータのEMA平均線を用い,速線が慢線を穿越するときは多頭信号とみなされ,下穿越する時は空頭信号とみなされる。

  2. ATR指標:ATR指標は,価格変動の幅と強さを判断し,それによって現在の動きの傾向性を判断します.ATR値が小さいときは,現在収束状態にあることを示すため,当時はポジションを建てるのは不適切です.ATR値が大きく,方向が向上している場合は,現在トレンド市場にあることを示すため,当時はEMA金叉を待っています.ATR値が大きく,方向が下がっている場合は,現在トレンド市場にあることを示すため,当時はEMAデッドフォークを待っています.

EMA平均線の交差を介して,買出の機会を探し,ATR指数と組み合わせて,トレンドの弱い取引信号をフィルターして,市場の揺動的な整合に囚われないようにする.

優位分析

この戦略の利点は以下の通りです.

  1. ATRの指標がトレンドだと判断した時にのみ取引し,不明な振動が起きるときに閉じ込められることを避けるのに役立ちます.

  2. 取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先の取引先

  3. EMA平均線の感度と滑らさは,パラメータ調節によって個人の好みに合わせて調整できます.

  4. 戦略開発と最適化には,Pineエディタを介して簡単に実行できる完全な自動取引システム,それは2つの簡単な指標を利用して実現できます.

  5. パラメータを頻繁に調整する必要なく,シンプルなParameterSetとForgetの策略を実現します.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. EMA交差は偽信号を生じやすく,不必要な損失を引き起こす可能性がある。EMAパラメータを調整することでいくつかの指標を平滑化することができる。

  2. ATR指標は,時折,整合とトレンドの判断に誤りがあり,取引機会を逃す可能性があります.ATRの数値の門を適切に緩和できます.

  3. 戦略自体には,大規模な要因分析が考慮されていないため,重要なニュースの面に市場が逆転した場合,迅速な均線交差で判断することは困難であり,人工介入が必要である.

これらのリスクの影響を,ある種の最適化によって減らすことができます.

最適化の方向

この戦略には,以下の主要な改善策があります.

  1. 他の指標の判断を加え,指標の組み合わせシステムを形成し,信号の正確性を向上させることを考慮することができる.例えば,RSI指標を組み合わせて,過買過売のリスクを避ける.

  2. 異なる取引品種,異なる取引区間に応じてより適切なパラメータを選択することができ,EMAとATRのパラメータを現在の市場の特徴により適合させることができる.

  3. 機械学習などの方法によって動的パラメータの最適化が可能である.指数パラメータは,固定静的数値を使用するのではなく,リアルタイム市場の状況に応じて調整することができる.

要約する

この戦略は,全体として非常に実用的なトレンド追跡戦略である.二つの簡単な指標の組み合わせだけで,比較的完全な取引システムを実現することができる.パラメータを調整することで,異なる好みのトレーダーに対応することができる.さらに,戦略のパフォーマンスをより優れたものにするために,さらに拡張できる最適化の余地がある.シンプルで効率的な取引思想と優れた最適化の可能性は,長期の研究と適用に値する量化戦略の1つである.

ストラテジーソースコード
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This strategy has been created for GMT trade 4h by Zhukov


//@version=5
strategy('ZhukovTrade', overlay=true, calc_on_every_tick=true, currency=currency.USD)

// INPUT:

// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input.int(title='Fast EMA', defval=100, minval=1, maxval=9999)
emaSlow = input.int(title='Slow EMA', defval=200, minval=1, maxval=9999)

// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both')

// Options that configure the backtest date range
startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00'))
endDate = input(title='End Date', defval=timestamp('31 Dec 2023 23:59'))


// CALCULATIONS:

// Use the built-in function to calculate two EMA lines
fastEMA = ta.ema(close, emaFast)
slowEMA = ta.ema(close, emaSlow)
emapos = ta.ema(close,200)

// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2)
plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2)
plot(series=emapos, color=color.new(color.red, 0), linewidth=2)


// CONDITIONS:

// Check if the close time of the current bar falls inside the date range
inDateRange = true

// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'

// Decide if we should go long or short using the built-in functions
longCondition = ta.crossover(fastEMA, slowEMA) 
shortCondition = ta.crossunder(fastEMA, slowEMA) 
// ORDERS:
// Set take profit and stop loss percentages
take_profit_percent = input(0, title="Take Profit Percent")
stop_loss_percent = input(0, title="Stop Loss Percent")
// Submit entry (or reverse) orders


atrPeriod = input(12, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

if longCondition and inDateRange 
    if longOK and direction<0

        strategy.entry(id='long', direction=strategy.long, alert_message = "LONG")
if shortCondition and inDateRange 
    if shortOK and direction>0
        strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT")

// Submit exit orders in the cases where we trade only long or only short

if strategy.position_size > 0 and take_profit_percent
    strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent)
if strategy.position_size > 0 and stop_loss_percent
    strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent)

if strategy.position_size < 0 and stop_loss_percent
    strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent)
if strategy.position_size < 0 and take_profit_percent
    strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)