マルチ-EMAクロスオーバートレンドフォロー戦略は,クロスオーバー信号に基づいてトレンド方向を特定するために,異なるパラメータを持つ複数のEMAラインを組み合わせ,市場のトレンドを追跡することを目的としています.そのクロスオーバー状況を比較することによって,12年,26年,50年,100年,200年,89年,144年の期間を含む7つのEMAラインを使用します.
この戦略の核心論理は,EMAラインのクロスオーバー原則に基づいている.EMAでは,短期間EMAは最近の価格変化により敏感で,短期間のトレンドを反映することができるが,長期期間EMAはより敏感で,長期間のトレンドを表現する.短期間EMAがより長いEMAを下から越えると,短期間トレンドが上昇していることを示唆する"黄金十字
この戦略は,12&26,12&50,12&100,12&200,12&89および12&144期を含む7つのグループEMAクロスオーバーを同時に監視する.例えば,12日間のEMAが26日間のEMAを超えると,戦略はロングポジションを開く.デッドクロスが発生するとロングポジションを閉じる.他のEMAペアにも同じ論理が適用される.
この戦略の最大の利点は,複数のタイムフレームのトレンドを把握する能力である.複数のEMAを組み合わせることで,短期的および長期的トレンドの両方を特定し,マルチタイムフレームのトレンドフォローを実現することができる.さらに,EMAパラメータを調整することによって戦略パフォーマンスを最適化することができる.
この戦略の主なリスクは,複数のEMAを一緒に使用する際に過頻なクロスオーバー信号である.例えば,12日~26日間のEMA間のクロスオーバーは,12日~200日間のラインよりも頻繁に起こる.頻繁なエントリーと出口は取引コストとスライプを増加させる可能性がある.また,EMAは遅延性があり,不適切な取引信号を引き起こす可能性があります.
リスクを軽減するために,EMA期間を最適化して適切なレベルでのクロスオーバー頻度を制御することができる.最大日々のエントリー数を制限したり,ストップロスを設定したりすることでリスクも制限される.
主な最適化空間は,より多くの期間の組み合わせを実験したり,SMAのような他の移動平均を試したりなど,EMAパラメータを調整することにある.また,音量または変動指標などの信号品質を改善するために追加のフィルターを追加することもできます.さらに,ストップ損失戦略は,市場の混乱の影響を軽減するために使用することができます.
マルチ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")