리소스 로딩... 로딩...

ATR 기반 리스크 관리 시스템과 전략에 따른 이중 이동 평균 트렌드

저자:차오장, 2024-11-29 14:56:43
태그:SMAATRTPSLHTF

img

전반적인 설명

이 전략은 ATR 기반의 동적 리스크 관리와 클래식 듀얼 이동 평균 트렌드 추적을 결합한다. 트렌드 추적을 위해 간단한 이동 평균 크로스오버를 사용하는 기본 모드, 더 높은 시간 프레임 트렌드 필터링과 ATR 기반의 동적 스톱-로스 메커니즘을 통합하는 고급 모드 두 가지 거래 모드를 제공합니다. 트레이더는 간단한 드롭다운 메뉴를 통해 모드 사이를 전환할 수 있으며, 초보자 사용 편의성 및 경험이 많은 트레이더 리스크 관리 필요를 모두 충족시킵니다.

전략 원칙

전략 1 (기본 모드) 는 21일 및 49일 이중 이동 평균 시스템을 사용하며, 빠른 MA가 느린 MA를 넘을 때 긴 신호를 생성합니다. 수익을 잠금하기 위해 선택적 인 후속 정지와 함께 비율 또는 포인트로 수익 목표를 설정할 수 있습니다. 전략 2 (첨단 모드) 는 매일 시간 프레임 트렌드 필터링을 추가하여 가격이 더 높은 시간 프레임 이동 평균보다 높을 때만 엔트리를 허용합니다. 시장 변동성에 조정되는 14 기간 ATR 기반 동적 스톱-손실 기능을 통합하고 있으며 이윤을 보호하기 위해 부분 수익 취득 기능을 포함합니다.

전략적 장점

  1. 트레이더 경험과 시장 조건에 따라 유연할 수 있는 매우 적응력 있는 전략
  2. 고급 모드에서 멀티 타임프레임 분석은 신호 품질을 향상시킵니다.
  3. ATR 기반의 동적 정지값은 시장의 변동성에 적응합니다.
  4. 부분 수익 양성 추세 지속과 함께 이익 보호
  5. 다양한 시장 특성에 대한 유연한 매개 변수 구성

전략 위험

  1. 이중 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


관련

더 많은