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

동적 취득 중지 손실 EMA 크로스오버 양적 거래 전략

저자:차오장, 날짜: 2024-11-18 15:53:49
태그:EMA

전반적인 설명

이 전략은 동적 인 영업 수익 및 스톱 로스 메커니즘과 결합된 이동 평균 크로스오버를 기반으로 한 양적 거래 시스템이다. 전략의 핵심은 시장 트렌드를 식별하고 리트랙시션 중에 거래를 실행하기 위해 10 기간 및 26 기간 기하급수적 이동 평균 (EMA) 의 크로스오버를 사용합니다. 시스템은 엄격한 리스크 관리를 통해 자본을 보호하기 위해 고정된 영업 수익 및 스톱 로스 수준을 사용합니다. 이 전략은 종종 더 명확한 시장 반전 신호와 더 큰 수익 잠재력을 제공하기 때문에 특히 높은 변동성 거래 도구에 적합합니다.

전략 원칙

이 전략은 핵심 지표로 서로 다른 기간을 가진 두 개의 EMA를 사용합니다. 단기 10 기간 EMA와 장기 26 기간 EMA. 단기 EMA가 장기 EMA를 넘어서면 구매 신호가 생성되며 상승 추세를 나타냅니다. 단기 EMA가 장기 EMA를 넘어서면 판매 신호가 생성되며 하락 추세를 나타냅니다. 시스템은 트렌드 확인 후 가격 리트레이싱 중에 거래에 들어가고, 리스크 통제를 위해 30 포인트의 수익을 취하고 15 포인트의 스톱 로스 수준을 사용합니다. 전략은 단일 신호 메커니즘을 사용하여 한 번에 하나의 방향 거래를 허용하며 시스템 복잡성을 줄이고 신뢰성을 향상시키는 데 도움이됩니다.

전략적 장점

  1. 명확한 신호: EMA 크로스오버를 거래 신호로 사용하여 실행 및 모니터링이 쉬운 간단하고 명확한 규칙을 제공합니다.
  2. 통제된 위험: 거래별로 효과적인 위험 관리를 위해 고정된 영업률과 스톱 손실 수준을 사용합니다.
  3. 트렌드 추적: 트렌드 시장을 효과적으로 포착하기 위해 EMA 크로스오버와 가격 리트레이싱을 결합합니다.
  4. 높은 자동화: 자동화 거래 시스템에서 쉽게 구현 할 수있는 명확한 전략 논리
  5. 높은 적응성: 다양한 거래 도구, 특히 높은 변동성을 가진 도구에 적합합니다.

전략 위험

  1. 시장 위험: 범위를 제한하는 시장에서 빈번한 잘못된 신호를 생성할 수 있습니다.
  2. 지연 위험: 높은 변동성 기간 동안 상당한 지연 위험이 있습니다.
  3. 스톱 로스 위험: 특정 시장 조건에서 고정 스톱 로스 수준이 충분히 유연하지 않을 수 있습니다.
  4. 신호 지연: EMA 크로스오버 신호는 고유한 지연을 가지고 있으며 최적의 입구 지점을 놓칠 수 있습니다.
  5. 자금 관리 위험: 거래별로 포지션 크기의 적절한 통제가 필요합니다.

최적화 방향

  1. 동적 스톱 로스: 시장 변동성에 따라 스톱 로스 수준을 조정하는 것을 고려하십시오.
  2. 신호 필터링: 잘못된 신호를 필터링하기 위해 부피, 변동성 또는 기타 보조 지표를 추가합니다.
  3. 시간 필터링: 매우 변동적인 기간을 피하기 위해 거래 시간 필터를 구현합니다.
  4. 포지션 관리: 나머지 포지션이 트렌드를 따라갈 수 있도록 하는 한편 부분적인 이익 취득 메커니즘을 추가합니다.
  5. 자금 관리: 계좌 자금에 기초한 역동적 위치 크기를 구현

결론

이 전략은 EMA 크로스오버와 가격 리트레이싱을 결합하여 완전한 거래 시스템을 구축합니다. 전략 디자인은 간단하고 직관적이며 명확한 리스크 제어와 함께 고 변동성 거래 도구에 적합합니다. 적절한 최적화 및 매개 변수 조정을 통해이 전략은 라이브 거래에서 안정적인 수익을 얻을 수 있습니다. 트레이더들은 라이브 구현 전에 철저한 백테스팅과 데모 거래를 수행하고 실제 거래 조건에 따라 매개 변수를 최적화하는 것이 좋습니다.


/*backtest
start: 2023-11-18 00:00:00
end: 2024-11-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)

// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10

// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10  // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value

// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)

// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)

// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na

// Variable to track if a trade is active
var bool inTrade = false

// Check if the trade hit stop loss or take profit
if (inTrade)
    if (not na(long_take_profit) and close >= long_take_profit)
        inTrade := false  // Exit the trade after hitting target
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(long_stop_loss) and close <= long_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(short_take_profit) and close <= short_take_profit)
        inTrade := false  // Exit the trade after hitting target
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

    if (not na(short_stop_loss) and close >= short_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

// Only generate new signals if not already in a trade
if (not inTrade)
    if (longCondition)
        long_entry_price := close
        long_take_profit := close + target_value
        long_stop_loss := close - stoploss_value
        strategy.entry("Long", strategy.long)  // Enter a long trade
        strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
        inTrade := true  // Mark trade as active

    if (shortCondition)
        short_entry_price := close
        short_take_profit := close - target_value
        short_stop_loss := close + stoploss_value
        strategy.entry("Short", strategy.short)  // Enter a short trade
        strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
        inTrade := true  // Mark trade as active

// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")

plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")

plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")


관련

더 많은