이동 평균 필터와 함께 윌리엄스 %R 크로스오버 전략

저자:차오장, 날짜: 2023-09-19 21:57:46
태그:

전반적인 설명

이 전략은 윌리엄스 %R 크로스오버 신호를 활용하고 유연한 단기 거래 시스템을 만들기 위해 이동 평균 필터를 추가합니다. 과잉 구매 및 과잉 판매 상황을 명확하게 캡처 할 수 있으며 MA 필터는 더 높은 안정성을 위해 시장 소음을 피합니다.

전략 논리

  1. 윌리엄스 %R와 200주기 간단한 이동 평균 (MA) 을 계산합니다.

  2. %R가 -50 수준을 한계로 넘어서고 마가 마를 때 긴 경로로 이동합니다.

  3. %R가 -50 이하의 임계값을 넘어서 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스 마이너스

  4. 긴 경우, 긴 포지션은 수익을 취하기 (입시 가격 + 수익을 취하기) 또는 스톱 로스 레벨 (입시 가격 - 스톱 로스 피프) 에 도달 할 때 닫습니다.

  5. 단축된 경우, 가까운 범위에서 수익을 얻거나 (입시 가격 - 수익 피프) 또는 스톱 로스 레벨 (입시 가격 + 스톱 로스 피프) 을 닫습니다.

이 전략은 윌리엄스 %R의 과잉 구매/ 과잉 판매 성격을 활용하고, 더 신뢰할 수 있는 신호를 위해 MA 트렌드 필터를 결합합니다. 스톱 로스/트레이프 로직은 간단하고 명확합니다. 전반적으로 완전한 단기 시스템입니다.

이점 분석

  1. 윌리엄스 %R는 명확한 신호로 과반 구매/ 과반 판매 수준을 효과적으로 식별합니다.

  2. MA 필터는 트렌드 편향을 추가하여 화이트사 (Whipsaws) 를 피합니다.

  3. 유연성을 위해 사용자 정의 가능한 매개 변수.

  4. 대부분의 수익을 막기 위해 스톱 로스를 추적합니다.

  5. 단순하고 명확한 논리, 이해하기 쉽고 실행하기 쉽습니다. 단기 거래에 좋습니다.

  6. 여러 제품과 유연성을 적용할 수 있습니다.

위험 분석

  1. 윌리엄스 %R는 후속 효과가 있고, 몇 가지 기회를 놓칠 수도 있습니다.

  2. MA 필터에도 약간의 지연이 있습니다.

  3. 엄격한 과잉 구매/ 과잉 판매 규칙은 어떤 추세를 놓칠 수 있습니다.

  4. 너무 단단한 스톱 손실은 윙사 (whipsaws) 로 멈출 수 있습니다.

  5. 너무 큰 스톱 손실은 수익을 제한할 수 있습니다.

  6. 매개 변수는 다른 시장 환경에 맞춰야 합니다.

최적화 방향

  1. 더 높은 승률을 위해 매개 변수를 최적화합니다.

  2. MACD, KDJ 등 다른 필터를 추가합니다.

  3. 지수적인 MA와 같은 다른 MA 유형을 시도해보세요.

  4. 트렌드 편향을 추가하고, 트렌드 방향으로만 거래합니다.

  5. 동적 중지, 촛불 출구와 같은 중지 손실 전략을 최적화

  6. 고정 분수, 마틴게일 등과 같은 위치 크기를 시도해보세요.

  7. 더 나은 매개 변수 최적화를 위해 기계 학습을 활용합니다.

결론

이 전략은 간단한 단기 시스템으로 윌리엄스 %R 과잉 구매/대판 신호와 MA 트렌드 필터를 결합합니다. 명확한 입구 신호와 스톱 손실/이익 로직을 가지고 있습니다. 더 많은 탄력성을 위해 매개 변수 조정, 지표 선택, 스톱 손실 관리 등을 통해 추가 개선이 가능합니다. 구현하고 확장하기가 쉽습니다. 이 전략은 단기 거래자에게 적합합니다.


/*backtest
start: 2023-08-19 00:00:00
end: 2023-09-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Williams %R Cross Strategy with MA Filter", overlay=true)

// User Inputs
wrLength = input(14, title="Williams %R Length")
crossPips = input(10, title="Cross Threshold (Pips)")
takeProfitPips = input(30, title="Take Profit (Pips)")
stopLossPips = input(20, title="Stop Loss (Pips)")

// Calculate Williams %R
wrHigh = ta.highest(high, wrLength)
wrLow = ta.lowest(low, wrLength)
wr = (wrHigh - close) / (wrHigh - wrLow) * -100

// Calculate 200-period Simple Moving Average
ma200 = ta.sma(close, 200)

// Entry Conditions
enterLong = ta.crossover(wr, -50 - crossPips) and close > ma200
enterShort = ta.crossunder(wr, -50 + crossPips) and close < ma200

// Exit Conditions
exitLong = close >= (strategy.position_avg_price + (takeProfitPips / syminfo.mintick)) or close <= (strategy.position_avg_price - (stopLossPips / syminfo.mintick))
exitShort = close <= (strategy.position_avg_price - (takeProfitPips / syminfo.mintick)) or close >= (strategy.position_avg_price + (stopLossPips / syminfo.mintick))

// Order Management
if enterLong
    strategy.entry("Long", strategy.long)
    
if enterShort
    strategy.entry("Short", strategy.short)

if exitLong
    strategy.close("Long")

if exitShort
    strategy.close("Short")


더 많은