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

SMA MA TP SL
作成日: 2024-12-27 15:08:40 最終変更日: 2024-12-27 15:08:40
コピー: 4 クリック数: 398
1
フォロー
1617
フォロワー

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

概要

この戦略は、動的なストッププロフィットとストップロスのメカニズムと組み合わせた、二重移動平均クロスオーバー信号に基づくトレンド追跡システムです。この戦略では、5 期間および 12 期間の単純移動平均 (SMA) を使用して取引シグナルを生成し、利益確定レベルと損失停止レベルを動的に調整することでリスク リターン比を最適化します。当初のテイクプロフィットは10%に設定され、ストップロスは5%に設定されます。価格が有利な方向に動くと、テイクプロフィットレベルは20%に調整され、ストップロスは2.5%に引き下げられます。利益を守るため。

戦略原則

この戦略のコアロジックは、高速移動平均 (5 期間) と低速移動平均 (12 期間) 間のクロスオーバー関係に基づいています。高速ラインが低速ラインを下から上に横切ると、システムはロング シグナルを生成し、ポジションを開きます。高速ラインが低速ラインを上から下に横切ると、システムはポジションを閉じます。この戦略のユニークさは、動的なリスク管理メカニズムにあります。ポジションが確立されると、システムは価格動向をリアルタイムで監視し、価格の変化に応じて利益確定レベルと損切りレベルを動的に調整して、リスクを管理しながら利益を最大化します。 。

戦略的優位性

  1. このシステムは、シグナルが明確で、理解しやすく実行しやすい、古典的な二重移動平均クロスオーバー戦略を採用しています。
  2. ダイナミックなストッププロフィットとストップロスのメカニズムは、実現利益を効果的に保護し、ドローダウンを回避することができます。
  3. 戦略パラメータは、さまざまな市場特性に応じて柔軟に調整でき、適応性が高い
  4. リスク管理の仕組みは完璧で、単一の取引のリスクを効果的に制御できます。
  5. コード構造は明確で、保守や最適化が容易です。

戦略リスク

  1. 不安定な市場は誤ったシグナルを生成し、頻繁な取引につながる可能性がある。
  2. 急激な反転で大きなリトレースメントが発生する可能性がある
  3. 不適切なパラメータ設定は戦略のパフォーマンスに影響を与える可能性があります
  4. 市場の流動性が不十分だとストップロスの実行に影響が出る可能性がある リスクを管理するために、次の対策が推奨されます。
  • トレンドフィルターを追加
  • 最適化パラメータの選択
  • 市場流動性のリアルタイム監視
  • 健全な資金管理システムを確立する

戦略最適化の方向性

  1. ショックな市場シグナルをフィルタリングするためのトレンド強度指標を導入する
  2. 信号の信頼性を向上させるためにボリューム係数を追加することを検討してください
  3. ストッププロフィットとストップロスのパラメータを最適化してリスクリターン比を改善する
  4. 市場変動適応メカニズムの追加
  5. 倉庫管理システムの改善

要約する

この戦略は、従来の移動平均クロスオーバー信号と革新的な動的リスク管理メカニズムを組み合わせることで、トレンドの効果的な把握とリスクの動的な制御を実現します。戦略設計コンセプトは明確で、実装方法は簡潔かつ効果的であり、実用性と拡張性に優れています。この戦略は、継続的な最適化と改善を通じて、実際の取引において安定した利益実績を達成することが期待されます。

ストラテジーソースコード
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("My Moving Average Crossover Strategy with Take Profit and Stop Loss", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//risk_free_rate = float(request.security("IRUS", "D", close)/request.security("IRUS", "D", close[1]) - 1  ))




// MA periods
fastLength = input.int(5, title="Fast MA Length")
slowLength = input.int(12, title="Slow MA Length")




// Take Profit and Stop Loss
takeProfitLevel = input(10, title="Take Profit (пункты)") // Take profit % from the last price
stopLossLevel = input(5, title="Stop Loss (пункты)") // Stop loss  % from the last price
takeProfitLevel_dyn = input(20, title="Dynamic Take Profit (пункты)") // Move TP if current_price higher buy_px
stopLossLevel_dyn =  input(2.5, title="Dynamic Stop Loss (пункты)") // S Move SL if current_price higher buy_px


// Вычисление скользящих средних
fastMA = ta.sma(close, fastLength)
slowMA= ta.sma(close, slowLength)


// Conditions for Sell and Buy
longCondition = ta.crossover (fastMA, slowMA) // покупаем, если короткая MA персекает длинную снизу-вверх
shortCondition = ta.crossunder(fastMA, slowMA) // продаем, если короткая MA персекает длинную сверху-вниз




// Buy position condition
if (longCondition)
    strategy.entry("Buy", strategy.long)






// Dynamic TP SL leveles
takeProfitPrice = strategy.position_avg_price * (1+ takeProfitLevel / 100)
stopLossPrice = strategy.position_avg_price * (1-stopLossLevel / 100)


entryPrice = strategy.position_avg_price




if (strategy.position_size > 0) // если есть открытая позиция




    // takeProfitPrice := entryPrice * (1+ takeProfitLevel / 100)
    // stopLossPrice := entryPrice * (1-stopLossLevel / 100)


    // // Перемещение Stop Loss и Take Profit
    if (close > entryPrice)
   
        takeProfitPrice := close * (1+ takeProfitLevel_dyn / 100)
        stopLossPrice := close * (1- stopLossLevel_dyn/ 100)






if (shortCondition)
    strategy.close("Buy")




strategy.exit("Take Profit/Stop loss", "Buy", limit=takeProfitPrice, stop=stopLossPrice)


// Drawing MA lines
plot(fastMA, color=color.blue, title="Fast Moving Average")
plot(slowMA, color=color.orange, title="Slow Moving Average")




// Визуализация
plot(longCondition ? na : takeProfitPrice, title="Take Profit Level", color=color.green, linewidth=1, style=plot.style_line)
plot(longCondition ? na: stopLossPrice, title="Stop Loss Level", color=color.red, linewidth=1, style=plot.style_line)