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

Williams %R 동적 조정 정지 및 손실 전략

저자:차오장, 날짜: 2024-06-07 15:52:55
태그:EMATPSL

Williams %R 动态调整止盈止损策略

개요

이 전략은 윌리엄스 %R 지표에 기반을 두고 있으며, 동적 정지손실 수준을 조정하여 거래 성능을 최적화한다. 윌리엄스 %R가 오버셀로 (-80), 오버바이 (-20) 를 통과할 때 구매 신호를 생성하고, 동시 지표 이동평균 (EMA) 를 사용하여 윌리엄스 %R를 평평화하여 노이즈를 줄인다. 이 전략은 다양한 시장 환경과 거래자의 선호도에 따라 지표 주기, 정지손실 (TP/SL) 수준, 거래 시간 및 거래 방향의 선택 등 다양한 매개 변수를 포함해 유연한 매개 변수 설정을 제공한다.

전략적 원칙

  1. 주어진 주기의 Williams %R 지표값을 계산한다.
  2. Williams %R의 지수 이동 평균 (EMA) 을 계산합니다.
  3. Williams %R가 아래로부터 상향 80 레벨을 넘을 때 구매 신호를 유발하고, 위로부터 아래로 20 레벨을 넘을 때 판매 신호를 유발한다.
  4. 구매 후, 중지/손실 레벨을 설정하여, 중지/손실 가격 또는 Williams %R가 반전 신호를 유발할 때까지 평형화합니다.
  5. 판매 후, 정지/손실 수준이 정지/손실 가격 또는 Williams %R가 반전 신호를 유발할 때까지 평형화 될 때까지 정지 및 손해 수준을 설정한다.
  6. 지정된 시간 범위 (예를 들어 9시부터 11시까지) 에서 거래할 수 있고 전체점 근처 (이전 X분부터 후 Y분까지) 에서 거래할 수 있는 경우를 선택할 수 있습니다.
  7. 거래 방향은 더하기만, 빈지만 또는 쌍방향 거래로 선택할 수 있습니다.

장점 분석

  1. 동적 스톱 및 손실 스톱: 사용자 설정에 따라 동적 스톱 및 손실 레벨을 조정하여 수익을 더 잘 보호하고 위험을 제어 할 수 있습니다.
  2. 유연한 매개 변수: 사용자가 자신의 취향에 따라 다양한 매개 변수를 설정할 수 있습니다.
  3. 평형 지표: EMA 평형 Williams %R 숫자를 도입하여 지표 노이즈를 효과적으로 줄이고 신호 신뢰성을 향상시킬 수 있습니다.
  4. 거래 시간 제한: 특정 시간 범위에서 거래를 선택하여 시장의 큰 변동을 피하고 위험을 줄일 수 있습니다.
  5. 사용자 정의 거래 방향: 시장 추세와 개인 판단에 따라 더 많이, 빈 또는 쌍방향 거래를 선택할 수 있습니다.

위험 분석

  1. 파라미터 설정이 잘못되었다: 금전적 손해정치는 너무 느슨하거나 너무 엄격하면 수익 손실 또는 빈번한 손실로 이어질 수 있다.
  2. 트렌드 인식 오류: 윌리엄스 %R 지표가 불안한 시장에서 좋지 않은 성능을 보이며 잘못된 신호를 일으킬 수 있습니다.
  3. 시간 제한 효과는 제한적입니다: 거래 시간을 제한하면 전략이 좋은 거래 기회를 놓칠 수 있습니다.
  4. 과도한 최적화: 과도한 최적화 매개 변수는 전략이 미래의 실제 거래에서 좋지 않은 결과를 초래할 수 있다.

최적화 방향

  1. 트렌드 지표, 변동률 지표 등 다른 지표와 결합하여 신호 확인의 정확성을 향상시킵니다.
  2. 동적 매개 변수 최적화: 시장 상황에 따라 실시간으로 매개 변수를 조정합니다. 예를 들어 트렌드 시장과 불안 시장에서 다른 매개 변수 설정을 사용합니다.
  3. 개선된 손해배상 방지 방법: 수익을 더 잘 보호하고 위험을 통제하기 위해 손해배상 추적, 부분적 손해배상 방지 등의 방법을 사용한다.
  4. 펀드 관리에 참여: 계좌 잔액과 위험 선호도에 따라 거래 당 포지션 크기를 동적으로 조정합니다.

요약

윌리엄 %R 동적 조정 정지 손실 전략은 다른 시장 환경과 거래 스타일에 적응할 수 있는 유연한 매개 변수 설정을 제공하면서 가격의 오버사우트 상태를 간단하고 효과적인 방법으로 캡처합니다. 이 전략은 동적 조정 정지 손실 수준을 사용하여 위험을 더 잘 제어하고 수익을 보호합니다. 그러나 실제 응용에서는 매개 변수 설정, 신호 확인, 거래 시간 선택 등의 요소에주의를 기울여야 함으로써 전략의 안정성과 수익성을 더욱 향상시킬 수 있습니다.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Williams %R Strategy defined buy/sell criteria with TP / SL", overlay=true)

// User inputs for TP and SL levels
tp_level = input.int(defval=60, title="Take Profit (ticks)", minval=10, maxval=500, step=10)
sl_level = input.int(defval=60, title="Stop Loss (ticks)", minval=10, maxval=200, step=10)

// Williams %R calculation
length = input.int(defval=21, title="Length", minval=5, maxval=50, step=1)
willy = 100 * (close - ta.highest(length)) / (ta.highest(length) - ta.lowest(length))

// Exponential Moving Average (EMA) of Williams %R
ema_length = input.int(defval=13, title="EMA Length", minval=5, maxval=50, step=1)
ema_willy = ta.ema(willy, ema_length)

// User inputs for Williams %R thresholds
buy_threshold = -80
sell_threshold = -20

// User input to enable/disable specific trading hours
use_specific_hours = input.bool(defval=false, title="Use Specific Trading Hours")
start_hour = input(defval=timestamp("0000-01-01 09:00:00"), title="Start Hour")
end_hour = input(defval=timestamp("0000-01-01 11:00:00"), title="End Hour")

// User input to choose trade direction
trade_direction = input.string(defval="Both", title="Trade Direction", options=["Buy Only", "Sell Only", "Both"])

// User input to enable/disable "Minutes Before" and "Minutes After" options
enable_minutes_before_after = input.bool(defval=true, title="Enable Minutes Before/After Options")
minutes_before = enable_minutes_before_after ? input.int(defval=10, title="Minutes Before the Top of the Hour", minval=0, maxval=59, step=1) : 0
minutes_after = enable_minutes_before_after ? input.int(defval=10, title="Minutes After the Top of the Hour", minval=0, maxval=59, step=1) : 0

// Condition to check if the current minute is within the user-defined time window around the top of the hour
is_top_of_hour_range = (minute(time) >= (60 - minutes_before) and minute(time) <= 59) or (minute(time) >= 0 and minute(time) <= minutes_after)

// Condition to check if the current time is within the user-defined specific trading hours
in_specific_hours = true
if use_specific_hours
    in_specific_hours := (hour(time) * 60 + minute(time)) >= (hour(start_hour) * 60 + minute(start_hour)) and (hour(time) * 60 + minute(time)) <= (hour(end_hour) * 60 + minute(end_hour))

// Buy and Sell conditions with time-based restriction
buy_condition = ta.crossover(willy, buy_threshold) and is_top_of_hour_range and in_specific_hours
sell_condition = ta.crossunder(willy, sell_threshold) and is_top_of_hour_range and in_specific_hours

// Strategy entry and exit with TP and SL
if (trade_direction == "Buy Only" or trade_direction == "Both") and buy_condition
    strategy.entry("Buy", strategy.long)

if (trade_direction == "Sell Only" or trade_direction == "Both") and sell_condition
    strategy.entry("Sell", strategy.short)

// If a buy entry was taken, allow the trade to be closed after reaching TP and SL or if conditions for a sell entry are true
if (strategy.opentrades > 0)
    strategy.exit("TP/SL", profit=tp_level, loss=sl_level)

// Plot Williams %R and thresholds for visualization
hline(-20, "Upper Band", color=color.red)
hline(-80, "Lower Band", color=color.green)
plot(willy, title="%R", color=color.yellow, linewidth=2)
plot(ema_willy, title="EMA", color=color.aqua, linewidth=2)

관련 내용

더 많은 내용