시몬스 전략으로 금 거래

저자:차오장, 날짜: 2024-03-01 12:28:38
태그:

img

전반적인 설명

이 전략은 이동 평균 지표, 상대 강도 지표 (RSI) 및 포식 패턴을 결합하여 금에 대한 긴 및 짧은 거래를 수행합니다. 주로 21 일, 50 일 및 200 일 이동 평균의 크로스오버를 거래 신호로 사용하고, RSI 지표와 포식 패턴을 사용하여 더 나은 최적화를 위해 추가 입력 신호를 필터링합니다.

전략 논리

이 전략은 다음과 같은 측면에 기초하여 거래 결정을 합니다.

  1. 이동 평균 크로스오버

    21일 MA와 200일 MA 사이의 크로스오버는 트렌드 반전을 결정하는 주요 지표로 사용됩니다. 골든 크로스는 구매 신호이며 죽음의 크로스는 판매 신호입니다. 50일 MA는 또한 잘못된 신호를 필터링하는 데 사용됩니다.

  2. RSI 지표

    70에서 RSI 과잉 구매 라인과 30에서 과잉 판매 라인이 구성됩니다. RSI는 긴 신호에 대한 과잉 구매 수준 아래와 짧은 신호에 대한 과잉 판매 수준 위에 있어야합니다. 구매 피크와 판매 골짜기를 피하기 위해.

  3. 포식 패턴 확인

    황금 교차가 발생했을 때 긴 신호에 대한 상승 포식 패턴이 필요합니다. 죽음의 교차가 발생했을 때 짧은 신호에 필요한 하락 포식 패턴이 필요합니다. 이것은 추세 반전을 더욱 확인합니다.

상위 세 가지 조건이 모두 충족되면 거래 신호가 생성됩니다. 이것은 전략에 대한 엄격한 필터 세트를 형성합니다.

장점

가장 큰 장점은 의사 결정에 대한 여러 매개 변수 및 지표의 포괄적 인 사용에 있습니다. 이는 잘못된 신호를 잘 필터링하고 불필요한 스톱 손실을 줄입니다. 구체적으로:

  1. 이동 평균 전략 자체는 비교적 안정성이 좋습니다.

  2. RSI 설정은 구매 피크와 판매 골짜기를 방지합니다.

  3. 포용 패턴 확인은 트렌드 역전 판단의 신뢰성을 향상시킵니다.

  4. 더 작은 스톱 로즈는 위험을 효과적으로 통제합니다.

위험성

이 전략은 신호 필터링과 위험 통제에서 우수한 반면, 여전히 몇 가지 약점과 위험을 포함합니다:

  1. 복잡한 매개 변수 조절은 최적의 조합을 찾기 위해 상당한 노력을 필요로 합니다.

  2. 엄격한 입국 신호는 좋은 기회를 놓칠 수 있습니다.

  3. 극도로 변동적인 시장 조건에서 약간의 지연이 있을 것입니다.

  4. 장기간 안정성과 유효성은 추가 검증이 필요합니다.

위의 위험을 해결하기 위해, 우리는 매개 변수를 정밀하게 조정하고, 논리 흐름을 최적화하고, 전략을 개선하기 위해 다른 지표를 포함시킬 수 있습니다.

최적화 기회

이 전략은 여러 지표를 결합하는 데 좋은 성과를 거두었지만 여전히 최적화 할 여지가 있습니다.

  1. 또한 더 많은 백테스팅을 통해 최적의 매개 변수 집합을 찾습니다. 더 나은 매개 변수 조합을 결정하기 위해 결과에 대한 다른 매개 변수의 영향을 평가하십시오.

  2. 트렌드 역전 시기를 판단하는 데 도움이되는 MACD, KD 등과 같은 다른 지표를 포함합니다. 이것은 더 포괄적인 지표 시스템을 형성합니다.

  3. 스톱 로스 메커니즘을 강화하고 정제합니다. 더 큰 스톱 로스 비율이 불필요한 위치 변경을 줄일 수 있는지 평가하십시오.

  4. 전략의 장기 유효성을 확인하기 위해 더 긴 역사 데이터 세트를 테스트하십시오. 다양한 시장 조건에서 더 많은 년 동안의 안정성을 검사하십시오.

결론

결론적으로,이 전략은 이동 평균, RSI 및 삼키는 패턴과 같은 기술적 분석 도구의 도구 키트를 활용하여 긴 짧은 금 거래를 수행합니다. 매개 변수 구성 및 신호 필터링을 통해 어느 정도 위험을 제어하는 비교적 엄격한 시스템을 구축합니다. 그러나 어떤 전략도 절대적으로 완벽 할 수 없습니다. 이 전략은 여전히 최적화 및 방향 개선에 많은 여지가 있습니다. 일반적으로 정량화 된 거래에 의미있는 참조를 제공하지만 실제로 적용 할 때 실용적인 조정과 함께 신중하게 사용해야합니다.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Gold Trading with Simons Strategy", overlay=true)

// Parameters
length21 = input(21, minval=1, title="Length for 21 MA")
length50 = input(50, minval=1, title="Length for 50 MA")
length200 = input(200, minval=1, title="Length for 200 MA")
rsiLength = input(14, minval=1, title="RSI Length")
rsiOverbought = input(70, title="RSI Overbought Level")
rsiOversold = input(30, title="RSI Oversold Level")
takeProfitPercent = input(4, title="Take Profit %")
stopLossPercent = input(1, title="Stop Loss %")

// Moving Averages
ma21 = sma(close, length21)
ma50 = sma(close, length50)
ma200 = sma(close, length200)

// RSI
rsi = rsi(close, rsiLength)

// Engulfing Pattern
isBullishCandle(c) => close[c] > open[c]
isBearishCandle(c) => close[c] < open[c]

bearishEngulfing = isBullishCandle(1) and isBearishCandle(0) and close < open[1] and open > close[1]
bullishEngulfing = isBearishCandle(1) and isBullishCandle(0) and close > open[1] and open < close[1]

// Calculate Take Profit and Stop Loss Levels
takeProfitLevel(entryPrice) => entryPrice * (1 + takeProfitPercent / 100)
stopLossLevel(entryPrice) => entryPrice * (1 - stopLossPercent / 100)

// Entry Conditions
longCondition = crossover(ma21, ma200) and close > ma21 and close > ma50 and rsi < rsiOverbought and bullishEngulfing
shortCondition = crossunder(ma21, ma200) and close < ma21 and close < ma50 and rsi > rsiOversold and bearishEngulfing

// Entry
if (longCondition)
    entryPrice = close
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit", "Long", limit=takeProfitLevel(entryPrice))
    strategy.exit("Stop Loss", "Long", stop=stopLossLevel(entryPrice))
if (shortCondition)
    entryPrice = close
    strategy.entry("Short", strategy.short)
    strategy.exit("Take Profit", "Short", limit=takeProfitLevel(entryPrice))
    strategy.exit("Stop Loss", "Short", stop=stopLossLevel(entryPrice))

// Plotting
plot(ma21, color=color.blue, title="21 MA")
plot(ma50, color=color.orange, title="50 MA")
plot(ma200, color=color.red, title="200 MA")
hline(rsiOverbought, "RSI Overbought", color=color.green)
hline(rsiOversold, "RSI Oversold", color=color.red)
plot(rsi, "RSI", color=color.purple)

더 많은