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

Williams %R 동적 TP/SL 조정 전략

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

img

전반적인 설명

이 전략은 윌리엄스 %R 지표에 기반하고 있으며, 영업 성과를 동적으로 조정하여 수익을 취하고 손실을 멈추는 수준을 최적화합니다. 윌리엄스 %R가 과소매 영역 (-80) 을 넘을 때 구매 신호가 생성되고, 과소매 영역 (-20) 을 넘을 때 판매 신호가 생성됩니다. 기하급수적인 이동 평균 (EMA) 이 윌리엄스 %R 값을 부드럽게하고 소음을 줄이기 위해 사용됩니다. 전략은 다양한 시장 조건과 거래자의 선호도에 적응하기 위해 지표 기간, 이익/손실 (TP/SL) 수준, 거래 시간 및 거래 방향 선택 등 유연한 매개 변수 설정을 제공합니다.

전략 원칙

  1. 주어진 기간에 대한 윌리엄스 %R 지표 값을 계산합니다.
  2. 윌리엄스 %R의 지수 이동 평균 (EMA) 을 계산합니다.
  3. 윌리엄스 %R가 아래에서 -80 수준을 넘으면 구매 신호가 발사됩니다. 위에서 -20 수준을 넘으면 판매 신호가 발사됩니다.
  4. 구매 엔트리 후, 수익을 취하고 손실을 멈추는 레벨을 설정합니다. TP/SL 가격 수준에 도달하거나 Williams %R가 역 신호를 트리거 할 때 거래는 종료됩니다.
  5. 판매 엔트리 후, 수익을 취하고 손실을 멈추는 레벨을 설정합니다. TP/SL 가격 수준에 도달하거나 Williams %R가 역 신호를 트리거 할 때 거래는 종료됩니다.
  6. 선택적으로, 지정된 시간 범위 내에서 거래 (예를 들어, 9:00-11:00) 를 선택 하 고 시간 상단에 가까운 거래를 선택 하 고 (X 분 전 Y 분 후).
  7. 선택적으로, 무역 방향만 길고, 짧거나 둘 다로 선택하십시오.

이점 분석

  1. 동적 TP/SL: 사용자 설정에 따라 수익을 취하고 손실을 멈추는 수준을 동적으로 조정하여 수익을 더 잘 보호하고 위험을 제어 할 수 있습니다.
  2. 유연한 매개 변수: 사용자가 선호도에 따라 다양한 매개 변수를 설정할 수 있습니다. 예를 들어, 지표 기간, TP/SL 수준, 거래 시간 등, 다른 시장 조건에 적응하기 위해.
  3. 매끄러운 지표: EMA를 매끄러운 Williams %R 값으로 도입하면 지표 소음을 효과적으로 줄이고 신호 신뢰성을 향상시킬 수 있습니다.
  4. 제한된 거래 시간: 고도의 변동성 시장 기간을 피하고 위험을 줄이기 위해 특정 시간 범위 내에서 선택적으로 거래합니다.
  5. 사용자 정의 가능한 거래 방향: 시장 추세와 개인적인 판단에 따라 단, 긴 또는 두 방향으로 거래를 선택할 수 있습니다.

위험 분석

  1. 부적절한 매개 변수 설정: TP/SL 설정이 너무 느슨하거나 너무 엄격하면 수익 손실 또는 빈번한 중단로 이어질 수 있습니다.
  2. 트렌드 식별 오류: 윌리엄스 %R 지표는 불안정한 시장에서 성능이 좋지 않으며 잘못된 신호를 생성 할 수 있습니다.
  3. 시간 제한의 제한된 효과: 거래 시간을 제한하면 전략이 좋은 거래 기회를 놓칠 수 있습니다.
  4. 과도한 최적화: 과도한 최적화 매개 변수는 미래의 실제 거래에서 나쁜 전략 성과를 초래할 수 있습니다.

최적화 방향

  1. 다른 지표와 결합: 트렌드 지표, 변동성 지표 등, 신호 확인의 정확성을 향상시키기 위해.
  2. 동적 매개 변수 최적화: 트렌딩 및 범위 시장에서 다른 매개 변수 설정을 사용하는 것과 같은 시장 조건에 따라 실시간으로 매개 변수를 조정합니다.
  3. TP/SL 방법을 개선: 수익을 더 잘 보호하고 위험을 제어하기 위해 후속 스톱 손실, 부분 수익 취득 등을 사용하는 것.
  4. 자금 관리를 포함: 계정 잔액과 위험 선호도에 따라 각 거래의 위치 크기를 동적으로 조정합니다.

요약

윌리엄스 %R 동적 TP/SL 조정 전략은 다양한 시장 환경과 거래 스타일에 적응하기 위해 유연한 매개 변수 설정을 제공하면서 단순하고 효과적인 방식으로 과소 구매 및 과소 판매 가격 조건을 포착합니다. 전략은 수익을 취하고 손실을 중지하는 수준을 동적으로 조정하여 위험을 더 잘 제어하고 이익을 보호 할 수 있습니다. 그러나 전략을 실제로 적용할 때, 전략의 안정성과 수익성을 더욱 향상시키기 위해 매개 변수 설정, 신호 확인 및 거래 시간 선택과 같은 요소에 여전히주의를 기울여야합니다.


/*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)

관련

더 많은