다중 이동 평균 종합 전략


생성 날짜: 2023-12-22 11:56:42 마지막으로 수정됨: 2023-12-22 11:56:42
복사: 0 클릭수: 406
1
집중하다
1166
수행원

다중 이동 평균 종합 전략

개요

다중 이동 평균 종합 전략은 매우 포괄적이고 보편적인 기술 분석 전략이다. 이 전략은 시장 추세에 대한 전체적인 통찰력을 제공하기 위해 다중 시간 주기의 이동 평균을 결합한다. 이 전략은 명확한 구매 및 판매 신호를 생성하여 잠재적인 진입 및 퇴출 지점을 식별하는 데 도움이됩니다.

원칙

이 전략의 핵심은 여러 개의 다른 길이의 기간의 이동 평균을 계산하고 추적하는 것입니다. 구체적으로 10일, 20일, 30일부터 100일까지의 이동 평균을 포함합니다. 이러한 이동 평균은 당일 종결 가격과 과거 일정 기간 (예: 10일, 20일 등) 의 종결 가격의 평균으로 설정됩니다. 예를 들어 20일 이동 평균은 지난 20일 종결 가격의 평균입니다.

오늘의 종전 가격이 이 모든 이동 평균보다 높을 때 구매 신호가 발생한다. 오늘의 종전 가격이 이 모든 이동 평균보다 낮을 때 판매 신호가 발생한다. 이렇게 모든 주기의 이동 평균이 같은 방향으로 향할 때만 신호가 발생하여 많은 잡음 거래 기회를 필터링하여 신호를 더 신뢰할 수 있게 한다.

장점

  1. 다양한 시장 환경에 적응할 수 있는 시간적 통찰력을 제공합니다.

  2. 다수의 확인, Noise 필터링, 신호 신뢰성

  3. 거래 규칙은 명확하고 이해하기 쉽고 실행이 가능합니다.

  4. 사용자 정의가 높으며, 사용자가 개인 요구에 맞게 매개 변수를 조정할 수 있습니다.

  5. 출입, 중지, 정지에 대한 명확한 지침을 제공하여 위험 관리에 도움이 됩니다.

위험과 해결책

  1. 시장이 흔들리는 시기에 여러 개의 이동 평균이 서로 교차하여 명확하지 않은 신호가 발생 할 수 있습니다. 이동 평균 주기의 수와 길이를 조정하여 교차 확률을 줄일 수 있습니다.

  2. 미래 가격의 여러 이동 평균을 깨는 가능성은 낮으며, 일부 거래 기회를 놓칠 수도 있다. 이동 평균의 수를 적절히 줄여서, 깨는 어려움을 줄일 수 있다.

  3. 신호는 지연되어 가격 전환점 이전에 트렌드를 잡을 수 없습니다. MACD와 같은 다른 선행 지표와 결합하면 트렌드 전환에 대한 판단을 향상시킬 수 있습니다.

  4. 거래 횟수가 많지 않아 안정적인 수익을 얻는 것이 어렵습니다. 이동 평균의 길이를 적절히 줄일 수 있거나 다른 전략 / 지표 조합과 함께 사용할 수 있습니다.

최적화 방향

  1. 변수 조정: 이동 평균의 주기 수와 길이를 조정하여 최적의 변수 조합을 찾습니다. 예를 들어 5일, 10일 및 20일 이동 평균의 조합을 테스트 할 수 있습니다.

  2. 다른 지표와 결합: MACD, RSI 등 다른 지표 조합과 함께 사용하여 전략의 탄력성을 향상시킵니다. 다른 지표는 상호 보완 할 수 있습니다.

  3. 전략 조합: 다른 전략과 결합하여 안정성을 향상시킵니다. 다른 전략은 위험을 분산시킬 수 있습니다.

  4. 자동 최적화: 알고리즘을 사용하여 다양한 매개 변수를 자동으로 테스트하여 원하는 매개 변수 조합을 최대화한다. 인적 개입을 줄이고 효율성을 높인다.

요약하다

다중 이동 평균 종합 전략은 매우 포괄적이고 강력한 전략 도구입니다. 그것은 다중 시간 규모의 통찰력을 제공하며, 신호는 신뢰할 수 있고, 사용하기 쉽고, 고도로 사용자 정의가 가능합니다. 또한 약간의 제한이 있지만, 파라미터를 조정하고, 다른 모델 조합과 같은 방법으로 최적화하여 더 복잡한 시장 상황에 적응 할 수 있습니다. 이 전략은 학습 도구로서 보조 기술 분석 사고를 구축 할 수 있으며, 실판 거래 사용도 가능합니다. 사용자는 자신의 필요에 따라 조정하고 전문화 할 수 있습니다.

전략 소스 코드
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Multiple Moving Average Strategy", overlay=true)

// Function to calculate moving average
get_ma(src, length) =>
    ta.sma(src, length)

// Initialize moving average lengths
ma_length_10 = 10
ma_length_20 = 20
ma_length_30 = 30
ma_length_40 = 40
ma_length_50 = 50
ma_length_60 = 60
ma_length_70 = 70
ma_length_80 = 80
ma_length_90 = 90
ma_length_100 = 100

// Calculate 10-day, 20-day, 30-day, 40-day, 50-day, 60-day, 70-day, 80-day, 90-day, and 100-day moving averages
ma_10 = get_ma(close, ma_length_10)
ma_20 = get_ma(close, ma_length_20)
ma_30 = get_ma(close, ma_length_30)
ma_40 = get_ma(close, ma_length_40)
ma_50 = get_ma(close, ma_length_50)
ma_60 = get_ma(close, ma_length_60)
ma_70 = get_ma(close, ma_length_70)
ma_80 = get_ma(close, ma_length_80)
ma_90 = get_ma(close, ma_length_90)
ma_100 = get_ma(close, ma_length_100)

// Generate Buy/Sell signals for the 10 moving averages
buy_signal = close > ma_10
sell_signal = close < ma_10

// Add conditions for each additional moving average length
buy_signal := buy_signal and (close > get_ma(close, ma_length_20))
sell_signal := sell_signal and (close < get_ma(close, ma_length_20))

buy_signal := buy_signal and (close > get_ma(close, ma_length_30))
sell_signal := sell_signal and (close < get_ma(close, ma_length_30))

buy_signal := buy_signal and (close > get_ma(close, ma_length_40))
sell_signal := sell_signal and (close < get_ma(close, ma_length_40))

buy_signal := buy_signal and (close > get_ma(close, ma_length_50))
sell_signal := sell_signal and (close < get_ma(close, ma_length_50))

buy_signal := buy_signal and (close > get_ma(close, ma_length_60))
sell_signal := sell_signal and (close < get_ma(close, ma_length_60))

buy_signal := buy_signal and (close > get_ma(close, ma_length_70))
sell_signal := sell_signal and (close < get_ma(close, ma_length_70))

buy_signal := buy_signal and (close > get_ma(close, ma_length_80))
sell_signal := sell_signal and (close < get_ma(close, ma_length_80))

buy_signal := buy_signal and (close > get_ma(close, ma_length_90))
sell_signal := sell_signal and (close < get_ma(close, ma_length_90))

buy_signal := buy_signal and (close > get_ma(close, ma_length_100))
sell_signal := sell_signal and (close < get_ma(close, ma_length_100))

// Plot Buy/Sell signals on the chart
plotshape(buy_signal, title="Buy Signal", color=color.green, style=shape.triangleup, location=location.belowbar)
plotshape(sell_signal, title="Sell Signal", color=color.red, style=shape.triangledown, location=location.abovebar)

// Execute long buy order when all ten moving averages give a Buy signal
if (buy_signal)
    strategy.entry("Buy", strategy.long)

// Execute sell order when all ten moving averages give a Sell signal
if (sell_signal)
    strategy.close("Buy")

// Execute short sell order when all ten moving averages give a Sell signal
if (sell_signal)
    strategy.entry("Sell", strategy.short)

// Execute buy order when all ten moving averages give a Buy signal
if (buy_signal)
    strategy.close("Sell")

// Plot closing price and moving averages on the chart
plot(close, title="Close", color=color.blue)
plot(ma_10, title="MA 10", color=color.orange)
plot(ma_20, title="MA 20", color=color.purple)
plot(ma_30, title="MA 30", color=color.blue)
plot(ma_40, title="MA 40", color=color.red)
plot(ma_50, title="MA 50", color=color.green)
plot(ma_60, title="MA 60", color=color.yellow)
plot(ma_70, title="MA 70", color=color.fuchsia)
plot(ma_80, title="MA 80", color=color.gray)
plot(ma_90, title="MA 90", color=color.teal)
plot(ma_100, title="MA 100", color=color.maroon)