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

이중 이동 평균 추진력 거래 전략: 시간 최적화 트렌드 추적 시스템

저자:차오장, 날짜: 2024-07-31 14:50:26
태그:SMAMA

img

전반적인 설명

이 전략은 이중 이동 평균 크로스오버와 시간 최적화에 기반한 트렌드-추천 거래 시스템이다. 이 전략은 거래 실행을 최적화하기 위해 특정 거래 시간 창을 통합하면서 구매 및 판매 신호를 생성하기 위해 단기 및 장기 이동 평균의 교차점을 활용합니다. 이 전략에는 또한 위험 및 수익을 관리하기 위해 여러 목표 가격과 스톱 로스 레벨이 포함되어 있습니다.

전략 원칙

이 전략의 핵심 원칙은 시장 트렌드를 식별하고 거래 신호를 생성하기 위해 서로 다른 기간을 가진 두 개의 이동 평균 (MA) 을 사용하는 것입니다. 구체적으로:

  1. 단기 및 장기 MAs: 전략은 단기 및 장기 시장 추세를 나타내는 사용자 정의 이동 평균 두 시기를 사용합니다.

  2. 크로스오버 신호: 단기 MA가 장기 MA를 넘을 때 구매 신호가 생성되며 단기 MA가 장기 MA를 넘을 때 판매 신호가 생성됩니다.

  3. 시간 최적화: 전략은 거래 시간 창 개념을 도입하여 사용자 지정 UTC 시간 범위 내에서 거래를 수행하여 높은 시장 변동성 또는 낮은 유동성의 시기를 피하는 데 도움이됩니다.

  4. 다중 타겟 가격: 전략은 각 거래에 두 개의 타겟 가격 (Target_1 및 Target_2) 을 설정하여 단계적인 수익을 허용합니다.

  5. 리스크 관리: 잠재적인 손실을 제한하기 위해 각 거래는 Stop-Loss 포인트로 설정됩니다.

  6. 시각화: 전략은 구매 및 판매 신호를 표시하고 차트에 가격 목표를 표시하여 거래자가 직관적으로 시장 역학을 이해할 수 있습니다.

전략적 장점

  1. 트렌드 추적: 이동 평균 크로스오버를 이용함으로써 전략은 시장 트렌드를 효과적으로 파악하여 수익 기회를 증가시킬 수 있습니다.

  2. 시간 최적화: 거래 시간 창을 제한함으로써 전략은 가장 활발하고 수익성있는 시장 기간에 집중하여 거래 효율성을 향상시킬 수 있습니다.

  3. 리스크 관리: 여러 가지 목표 가격과 스톱 로스 설정은 위험과 수익을 균형을 맞추고 자본 안전을 보호합니다.

  4. 유연성: 사용자는 개인 선호도와 시장 특성에 따라 MA 기간, 목표 가격 및 거래 시간 창을 조정할 수 있습니다.

  5. 시각 지원: 차트에 구매/판매 신호와 목표 가격 성취를 설명함으로써 거래자는 전략 성과를 더 직관적으로 이해할 수 있습니다.

  6. 양방향 거래: 이 전략은 다양한 시장 환경에서 기회를 찾고 긴 포지션과 짧은 포지션을 지원합니다.

전략 위험

  1. 부진 시장 위험: 옆 시장에서 빈번한 MA 크로스오버는 과도한 잘못된 신호와 거래 비용을 초래할 수 있습니다.

  2. 미끄러짐 위험: 빠른 시장에서 실제 실행 가격은 신호 생성 시 가격과 크게 다를 수 있습니다.

  3. 역사적인 데이터에 과도하게 의존: 이동 평균은 지체 지표이며 급격한 시장 전환에 제때 반응하지 않을 수 있습니다.

  4. 시간 창 제한: 엄격한 거래 시간 제한은 중요한 시장 기회를 놓칠 수 있습니다.

  5. 고정 스톱 로스 리스크: 고정 포인트 스톱 로스를 사용하는 것은 높은 변동성 기간 동안 충분히 유연하지 않을 수 있습니다.

  6. 과잉 거래: 특정 시장 조건에서 전략은 거래 비용을 증가시키는 너무 많은 거래 신호를 생성 할 수 있습니다.

전략 최적화 방향

  1. 동적 매개 변수 조정: 시장 변동성에 기초한 MA 기간과 거래 매개 변수를 동적으로 조정하기 위한 적응 메커니즘을 도입하는 것을 고려하십시오.

  2. 변동성 필터링: 낮은 변동성 기간 동안 과도한 거래를 피하기 위해 거래 신호를 생성하기 전에 시장 변동성을 평가합니다.

  3. 개선된 스톱 로스 메커니즘: 다른 시장 조건에 적응하기 위해 ATR (평균 진정한 범위) 에 기반한 동적 스톱 로스를 사용하는 것을 고려하십시오.

  4. 다른 기술 지표의 통합: RSI 또는 MACD와 같이 트렌드 강도를 확인하고 신호 품질을 향상시킵니다.

  5. 백테스팅 최적화: 최적의 매개 변수 조합과 시간 창 설정을 찾기 위해 더 광범위한 역사 데이터 백테스팅을 수행합니다.

  6. 자본 관리 최적화: 계좌 크기 및 시장 변동성에 따라 거래 크기를 동적으로 조정하는 것과 같은 더 정교한 위치 크기 전략을 구현하십시오.

  7. 기본 요인 고려: 높은 불확실성 기간 동안 거래를 피하기 위해 중요한 경제 데이터 발표 전 및 이후에 전략 행동을 조정하십시오.

  8. 기계 학습 통합: 매개 변수 선택 및 신호 생성 프로세스를 최적화하기 위해 기계 학습 알고리즘을 사용하여 탐구합니다.

결론

이중 이동 평균 모멘텀 거래 전략은 기술 분석과 시간 최적화를 결합한 트렌드 추적 시스템이다. 이동 평균 크로스오버와 신중하게 설계된 거래 시간 창을 활용함으로써 전략은 시장 트렌드를 파악하고 거래 실행을 최적화하는 것을 목표로 한다. 전략은 직관성과 유연성 등의 장점을 가지고 있지만 시장 변동성 및 과잉 거래와 같은 위험에도 직면한다. 동적 매개 변수 조정, 위험 관리 메커니즘 개선 및 더 많은 기술적 지표를 통합하는 등의 지속적인 최적화와 개선을 통해 이 전략은 더 견고하고 효율적인 거래 시스템으로 발전할 가능성이 있다. 이 전략을 사용하는 거래자는 그 원칙을 완전히 이해하고 개인적인 위험 선호도와 시장 환경에 따라 적절한 매개 변수 조정을 해야 한다.


/*backtest
start: 2024-07-23 00:00:00
end: 2024-07-30 00:00:00
period: 2m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Gold Trend Trader", shorttitle="Gold Trader", overlay=true)

// User-defined input for moving averages
shortMA = input.int(10, minval=1, title="Short MA Period")
longMA = input.int(100, minval=1, title="Long MA Period")
target_1 = input.int(100, minval=1, title="Target_1")
target_2 = input.int(150, minval=1, title="Target_2")

// User-defined input for the start and end times with default values
startTimeInput = input.int(12, title="Start Time for Session (UTC, in hours)", minval=0, maxval=23)
endTimeInput = input.int(17, title="End Time Session (UTC, in hours)", minval=0, maxval=23)
// Convert the input hours to minutes from midnight
startTime = startTimeInput * 60 
endTime = endTimeInput * 60  

// Function to convert the current exchange time to UTC time in minutes
toUTCTime(exchangeTime) =>
    exchangeTimeInMinutes = exchangeTime / 60000
    // Adjust for UTC time
    utcTime = exchangeTimeInMinutes % 1440
    utcTime

// Get the current time in UTC in minutes from midnight
utcTime = toUTCTime(time)

// Check if the current UTC time is within the allowed timeframe
isAllowedTime = (utcTime >= startTime and utcTime < endTime)

// Calculating moving averages
shortMAValue = ta.sma(close, shortMA)
longMAValue = ta.sma(close, longMA)

// Plotting the MAs
plot(shortMAValue, title="Short MA", color=color.blue)
plot(longMAValue, title="Long MA", color=color.red)

// Tracking buy and sell signals
var float buyEntryPrice_1 = na
var float buyEntryPrice_2 = na
var float sellEntryPrice_1 = na
var float sellEntryPrice_2 = na

// Logic for Buy and Sell signals
buySignal = ta.crossover(shortMAValue, longMAValue) and isAllowedTime
sellSignal = ta.crossunder(shortMAValue, longMAValue) and isAllowedTime

// Entry conditions for long and short trades
if (buySignal)
    strategy.entry("Buy_1", strategy.long)
    strategy.exit("TP_1", "Buy_1", limit=close + target_1, stop=close - 100)

    strategy.entry("Buy_2", strategy.long)
    strategy.exit("TP_2", "Buy_2", limit=close + target_2, stop=close - 1500)

if (sellSignal)
    strategy.entry("Sell_1", strategy.short)
    strategy.exit("TP_3", "Sell_1", limit=close - target_1, stop=close + 100)

    strategy.entry("Sell_2", strategy.short)
    strategy.exit("TP_4", "Sell_2", limit=close - target_2, stop=close + 150)

// Apply background color for entry candles
barcolor(buySignal ? color.green : sellSignal ? color.red : na)

// Creating buy and sell labels
if (buySignal)
    label.new(bar_index, low, text="BUY", style=label.style_label_up, color=color.green, textcolor=color.white, yloc=yloc.belowbar)

if (sellSignal)
    label.new(bar_index, high, text="SELL", style=label.style_label_down, color=color.red, textcolor=color.white, yloc=yloc.abovebar)

// Creating labels for 100-point movement
if (not na(buyEntryPrice_1) and close >= buyEntryPrice_1 + target_1)
    label.new(bar_index, high, text=str.tostring(target_1), style=label.style_label_down, color=color.green, textcolor=color.white, yloc=yloc.abovebar)
    buyEntryPrice_1 := na // Reset after label is created

if (not na(buyEntryPrice_2) and close >= buyEntryPrice_2 + target_2)
    label.new(bar_index, high, text=str.tostring(target_2), style=label.style_label_down, color=color.green, textcolor=color.white, yloc=yloc.abovebar)
    buyEntryPrice_2 := na // Reset after label is created

if (not na(sellEntryPrice_1) and close <= sellEntryPrice_1 - target_1)
    label.new(bar_index, low, text=str.tostring(target_1), style=label.style_label_up, color=color.red, textcolor=color.white, yloc=yloc.belowbar)
    sellEntryPrice_1 := na // Reset after label is created

if (not na(sellEntryPrice_2) and close <= sellEntryPrice_2 - target_2)
    label.new(bar_index, low, text=str.tostring(target_2), style=label.style_label_up, color=color.red, textcolor=color.white, yloc=yloc.belowbar)
    sellEntryPrice_2 := na // Reset after label is created


관련

더 많은