資源の読み込みに... 荷物...

ATRベースのリスク管理システムによる戦略をフォローする二重移動平均傾向

作者: リン・ハーンチャオチャン,日付: 2024年11月29日 14:56:43
タグ:SMAATRTPSLHTF

img

概要

この戦略は,ATRベースのダイナミックリスクマネジメントとクラシックな二重移動平均トレンドフォローを組み合わせています. トレンドフォローのための単純な移動平均クロスオーバーを使用する基本的なモードと,より高いタイムフレームトレンドフィルタリングとATRベースのダイナミックストップロスのメカニズムを組み込んだ高度なモードを2つの取引モードで提供しています.トレーダーは簡単なドロップダウンメニューを通じてモードを切り替えることができ,初心者易用性および経験豊富なトレーダーリスクマネジメントの両方のニーズに対応します.

戦略の原則

戦略1 (基本モード) は21日および49日間の二重移動平均システムを使用し,高速MAが遅いMAを超えると長信号を生成する. 収益をロックするためにオプションのトレーリングストップで,収益目標をパーセントまたはポイントとして設定することができる. 戦略2 (高度モード) は毎日のタイムフレームトレンドフィルタリングを追加し,価格がより高いタイムフレーム移動平均値を超える場合にのみエントリを許可する. 市場変動に調整する14期間のATRベースのダイナミックストップ・ロスを組み込み,利益を保護するための部分的な利益の取り機能を含む.

戦略 の 利点

  1. トレーダーの経験と市場状況に合わせて柔軟性のある高度に適応可能な戦略
  2. 高級モードでの多時間枠分析は信号品質を向上させる
  3. ATRベースの動的ストップは,変動する市場変動に対応する.
  4. 部分利益収支 傾向の継続と利益保護
  5. 異なる市場特性を合わせる柔軟なパラメータ構成

戦略リスク

  1. 2つのMAシステムにより,様々な市場で頻繁に誤った信号が発生する可能性があります.
  2. トレンドフィルタリングは信号遅延を引き起こし,いくつかの取引機会を逃す可能性があります
  3. ATR停止は,変動のピークに十分に迅速に調整されない可能性があります.
  4. 部分的な利益占いは,強い動向でポジションサイズを早すぎるほど削減する可能性があります.

戦略の最適化方向

  1. 偽信号をフィルタリングするために,ボリュームと波動性指標を追加
  2. 市場状況に基づいて動的パラメータ調整を実施することを検討する
  3. ATR 計算期間を最適化し,敏感性と安定性をバランスにする
  4. 自動戦略モード選択のための市場状態認識モジュールを追加
  5. トレーリングストップやタイムベースの出口などのより多くのストップ・ロスのオプションを導入します

概要

これは,よく設計された包括的な取引システムです. ツイン移動平均トレンドフォローとATRベースのリスク管理の組み合わせは,信頼性と効果的なリスク管理の両方を保証します. ツインモードデザインは,異なるトレーダーレベルのニーズを満たし,豊かなパラメータ設定は,豊富な最適化機会を提供します. トレーダーはライブトレーディングで保守的なパラメータから始め,最良の結果のために徐々に最適化することをお勧めします.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shaashish1

//@version=5
strategy("Dual Strategy Selector V2 - Cryptogyani", overlay=true, pyramiding=0, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000)

//#region STRATEGY SELECTION
strategyOptions = input.string(title="Select Strategy", defval="Strategy 1", options=["Strategy 1", "Strategy 2"], group="Strategy Selection")
//#endregion STRATEGY SELECTION

// ####################### STRATEGY 1: Original Logic ########################
//#region STRATEGY 1 INPUTS
s1_fastMALen = input.int(defval=21, title="Fast SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_slowMALen = input.int(defval=49, title="Slow SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_takeProfitMode = input.string(defval="Percentage", title="Take Profit Mode (S1)", options=["Percentage", "Pips"], group="Strategy 1 Settings")
s1_takeProfitPerc = input.float(defval=7.0, title="Take Profit % (S1)", minval=0.05, step=0.05, group="Strategy 1 Settings") / 100
s1_takeProfitPips = input.float(defval=50, title="Take Profit Pips (S1)", minval=1, step=1, group="Strategy 1 Settings")
s1_trailingTakeProfitEnabled = input.bool(defval=false, title="Enable Trailing (S1)", group="Strategy 1 Settings")
//#endregion STRATEGY 1 INPUTS

// ####################### STRATEGY 2: Enhanced with Recommendations ########################
//#region STRATEGY 2 INPUTS
s2_fastMALen = input.int(defval=20, title="Fast SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_slowMALen = input.int(defval=50, title="Slow SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_atrLength = input.int(defval=14, title="ATR Length (S2)", group="Strategy 2 Settings", inline="ATR")
s2_atrMultiplier = input.float(defval=1.5, title="ATR Multiplier for Stop-Loss (S2)", group="Strategy 2 Settings", inline="ATR")
s2_partialTakeProfitPerc = input.float(defval=50.0, title="Partial Take Profit % (S2)", minval=10, maxval=100, step=10, group="Strategy 2 Settings")
s2_timeframeTrend = input.timeframe(defval="1D", title="Higher Timeframe for Trend Filter (S2)", group="Strategy 2 Settings")
//#endregion STRATEGY 2 INPUTS

// ####################### GLOBAL VARIABLES ########################
var float takeProfitPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na
var float fastMA = na
var float slowMA = na
var float higherTimeframeTrendMA = na
var bool validOpenLongPosition = false

// Precalculate higher timeframe values (global scope for Strategy 2)
higherTimeframeTrendMA := request.security(syminfo.tickerid, s2_timeframeTrend, ta.sma(close, s2_slowMALen))

// ####################### LOGIC ########################
if (strategyOptions == "Strategy 1")
    // Strategy 1 Logic (Original Logic Preserved)
    fastMA := ta.sma(close, s1_fastMALen)
    slowMA := ta.sma(close, s1_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA)
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0
    
    // Take Profit Price
    takeProfitPrice := if (s1_takeProfitMode == "Percentage")
        close * (1 + s1_takeProfitPerc)
    else
        close + (s1_takeProfitPips * syminfo.mintick)

    // Trailing Stop Price (if enabled)
    if (strategy.position_size > 0 and s1_trailingTakeProfitEnabled)
        trailingStopPrice := high - (s1_takeProfitPips * syminfo.mintick)
    else
        trailingStopPrice := na

else if (strategyOptions == "Strategy 2")
    // Strategy 2 Logic with Recommendations
    fastMA := ta.sma(close, s2_fastMALen)
    slowMA := ta.sma(close, s2_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA) and close > higherTimeframeTrendMA
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0

    // ATR-Based Stop-Loss
    atr = ta.atr(s2_atrLength)
    stopLossPrice := close - (atr * s2_atrMultiplier)

    // Partial Take Profit Logic
    takeProfitPrice := close * (1 + (s2_partialTakeProfitPerc / 100))
//#endregion STRATEGY LOGIC

// ####################### PLOTTING ########################
plot(series=fastMA, title="Fast SMA", color=color.yellow, linewidth=1)
plot(series=slowMA, title="Slow SMA", color=color.orange, linewidth=1)
plot(series=takeProfitPrice, title="Take Profit Price", color=color.teal, linewidth=1, style=plot.style_linebr)

// Trailing Stop and ATR Stop-Loss Plots (Global Scope)
plot(series=(strategyOptions == "Strategy 1" and s1_trailingTakeProfitEnabled) ? trailingStopPrice : na, title="Trailing Stop", color=color.red, linewidth=1, style=plot.style_linebr)
plot(series=(strategyOptions == "Strategy 2") ? stopLossPrice : na, title="ATR Stop-Loss", color=color.red, linewidth=1, style=plot.style_linebr)
//#endregion PLOTTING

// ####################### POSITION ORDERS ########################
//#region POSITION ORDERS
if (validOpenLongPosition)
    strategy.entry(id="Long Entry", direction=strategy.long)

if (strategyOptions == "Strategy 1")
    if (strategy.position_size > 0)
        if (s1_trailingTakeProfitEnabled)
            strategy.exit(id="Trailing Take Profit", from_entry="Long Entry", stop=trailingStopPrice)
        else
            strategy.exit(id="Take Profit", from_entry="Long Entry", limit=takeProfitPrice)

else if (strategyOptions == "Strategy 2")
    if (strategy.position_size > 0)
        strategy.exit(id="Partial Take Profit", from_entry="Long Entry", qty_percent=s2_partialTakeProfitPerc, limit=takeProfitPrice)
        strategy.exit(id="Stop Loss", from_entry="Long Entry", stop=stopLossPrice)
//#endregion POSITION ORDERS


関連性

もっと