複数のEMAクロスオーバートレンドフォロー戦略


作成日: 2024-01-04 16:22:07 最終変更日: 2024-01-04 16:22:07
コピー: 6 クリック数: 588
1
フォロー
1617
フォロワー

複数のEMAクロスオーバートレンドフォロー戦略

概要

多重EMA平均線交差トレンド追跡戦略は,複数の異なるパラメータのEMA平均線を組み合わせて使用し,短期のEMAで金叉形成時に多行し,死叉形成時に空行し,トレンド追跡取引を実現する.この戦略は,同時に12,26,50,100,200,89,および144の周期を含む7つのEMA平均線を使用して,これらのEMAの交差を比較してトレンド方向を判断する.

戦略原則

この戦略の核心的な論理は,EMA平均線の交差原理に基づいている.EMA平均線では,周期が短いEMAは価格変化により敏感であり,最近の価格の傾向を反映することができる.しかし,周期が長いEMAは価格の変化にあまり敏感ではなく,長期の傾向を反映することができる.短期周期EMAが下から長期周期EMAを穿越すると,いわゆる金フォークが形成され,短期傾向がブルイッシュになるという表示がされ,多額の注文を設定することができる.逆に,短期周期EMAが上から下から長期周期EMAを穿越すると,死フォークが形成され,短期傾向がベーリスになるという表示がされ,空の注文を設定することができる.

この戦略は,12&26,12&50,12&100,12&200,12&89および12&144を含む7つのEMA平均線を使用している.この戦略は7つのEMAの交差を同時に比較する.例えば,12日EMAに26日EMAが金叉を形成すると,多項取引が開かれ,死叉が発生すると,多項取引が平らになる.この戦略は,他の6つのEMA平均線にも同じロジックを使用する.

優位分析

この戦略の最大の利点は,複数のタイムスケールのトレンドを同時に捕捉できるという点にある.複数のEMA平均線を組み合わせることで,戦略は短期トレンドを捕捉することも,長期トレンドを追跡することもでき,複数のタイム軸のトレンドを追跡を実現することもできる.さらに,この戦略は,異なるEMAのパラメータを調整することでパフォーマンスを最適化することもできる.

リスク分析

この戦略の主なリスクは,複数のEMA均線組合せを使用すると,交差信号が過度に頻繁に発生する可能性があることにある.例えば,12日EMAと26日EMA間の交差は,12日EMAと200日EMA間の交差よりも頻繁に発生し,ポジション開設とポジションの頻度が制御できない場合,取引コストと滑り場損失が増加する.さらに,EMA均線自体は価格変化に遅れているため,信号が不時に発生する可能性があります.

上記のリスクを軽減するために,EMAの周期パラメータを適切に最適化して,その交差周波数を適切な範囲に置くことができます.また,一日のポジション開設回数を適切に制限したり,リスクを制御するためにストップを設定することもできます.

最適化の方向

この戦略の最適化スペースは主にEMA平均線のパラメータ調整に焦点を当てている.より多くの異なる周期のパラメータ組み合わせを試すことができる.これに加えて,SMAなどの他のタイプの移動平均を試すこともできる.また,戦略は,取引量指標,波動率指標など,シグナルをフィルターする追加の条件を追加して,信号の質を向上させることができる.止損策を追加すると,さらに最適化され,市場の激しい変動の影響を軽減することができる.

要約する

多重EMA平均線交差トレンド追跡戦略は,複数のEMAの交差状況を比較してトレンドの方向性を判断し,複数の時間尺度のトレンド追跡を実現する一般的なトレンド追跡戦略である.この戦略の優点は,パラメータを柔軟に調整して,異なるレベルのトレンドを捕捉できることです.その弱点は,信号が過度に頻繁になり,取引コストを増加させることです.パラメータの最適化と補助条件の追加により,戦略のパフォーマンスをさらに向上させることができます.

ストラテジーソースコード
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("EMA Trades", overlay=true, pyramiding=4)

src = input(close, title="Source")

shortestLine = input(12, minval=1, title="Shortest Line")
shorterLine = input(26, minval=1, title="Shorter Line")
shortLine = input(50, minval=1, title="Short Line")
middleLine = input(100, minval=1, title="Middle Line")
longLine = input(200, minval=1, title="Long Line")
longerLine = input(89, minval=1, title="Longer Line")
longestLine = input(144, minval=1, title="Longest Line")

shortestLineOutput = ema(src, shortestLine)
shorterLineOutput = ema(src, shorterLine)
shortLineOutput = ema(src, shortLine)
middleLineOutput = ema(src, middleLine)
longLineOutput = ema(src, longLine)
longerLineOutput = ema(src, longerLine)
longestLineOutput = ema(src, longestLine)

//plot(shortestLineOutput, title="Shortest EMA", color=#ffffff)
//plot(shorterLineOutput, title="Shorter EMA", color=#e54fe6)
//plot(shortLineOutput, title="Short EMA", color=#4e6bc3)
//plot(middleLineOutput, title="Middle EMA", color=#1dd6d8)
//plot(longLineOutput, title="Long EMA", color=#d0de10)
//plot(longerLineOutput, title="Longer EMA", color=#ef6a1a)
//plot(longestLineOutput, title="Longest EMA", color=#ff0e0e)

longEnrtyCondition_1 = crossover(shortestLineOutput[1], shorterLineOutput[1]) and shortestLineOutput > shorterLineOutput
longEntryCondition_2 = crossover(shortestLineOutput[1], shortLineOutput[1]) and shortestLineOutput > shortLineOutput
longEnrtyCondition_3 = crossover(shortestLineOutput[1], middleLineOutput[1]) and shortestLineOutput > middleLineOutput
longEntryCondition_4 = crossover(shortestLineOutput[1], longLineOutput[1]) and shortestLineOutput > longLineOutput

shortEnrtyCondition_1 = crossunder(shortestLineOutput[1], shorterLineOutput[1]) and shortestLineOutput < shorterLineOutput
shortEntryCondition_2 = crossunder(shortestLineOutput[1], shortLineOutput[1]) and shortestLineOutput < shortLineOutput
shortEnrtyCondition_3 = crossunder(shortestLineOutput[1], middleLineOutput[1]) and shortestLineOutput < middleLineOutput
shortEntryCondition_4 = crossunder(shortestLineOutput[1], longLineOutput[1]) and shortestLineOutput < longLineOutput

if (longEnrtyCondition_1)
    strategy.entry("Buy1", strategy.long)
    strategy.exit("Sell1")

if (longEntryCondition_2)
    strategy.entry("Buy2", strategy.long)
    strategy.exit("Sell2")

if (longEnrtyCondition_3)
    strategy.entry("Buy3", strategy.long)
    strategy.exit("Sell3")

if (longEntryCondition_4)
    strategy.entry("Buy4", strategy.long)
    strategy.exit("Sell4")

if (shortEnrtyCondition_1)
    strategy.entry("Sell1", strategy.short)
    strategy.exit("Buy1")

if (shortEntryCondition_2)
    strategy.entry("Sell2", strategy.short)
    strategy.exit("Buy2")

if (shortEnrtyCondition_3)
    strategy.entry("Sell3", strategy.short)
    strategy.exit("Buy3")

if (shortEntryCondition_4)
    strategy.entry("Sell4", strategy.short)
    strategy.exit("Buy4")