Williams %R ajusta dinámicamente la estrategia de stop-profit y stop-loss

EMA TP SL
Fecha de creación: 2024-06-07 15:52:55 Última modificación: 2024-06-07 15:52:55
Copiar: 10 Número de Visitas: 783
1
Seguir
1617
Seguidores

Williams %R ajusta dinámicamente la estrategia de stop-profit y stop-loss

Descripción general

La estrategia se basa en el indicador Williams %R para optimizar el rendimiento de las operaciones mediante el ajuste dinámico de los niveles de stop-loss. Se genera una señal de compra cuando Williams %R cruza la zona de sobreventa (−80) y una señal de venta cuando cruza la zona de sobreventa (−20). Al mismo tiempo, se utiliza el índice de promedio móvil (EMA) para suavizar los valores de Williams %R para reducir el ruido. La estrategia ofrece una configuración flexible de parámetros, que incluye el ciclo del indicador, el nivel de stop-loss (TP/SL), la elección del tiempo de negociación y la dirección de negociación, para adaptarse a diferentes entornos de mercado y preferencias de los operadores.

Principio de estrategia

  1. Calcula el índice Williams %R de un período dado.
  2. Calcula el promedio móvil de Williams %R.
  3. Cuando Williams %R cruza el nivel 80 de abajo hacia arriba, se activa una señal de compra; cuando cruza el nivel 20 de arriba hacia abajo, se activa una señal de venta.
  4. Una vez comprado, se establecen los niveles de stop y stop loss para que se cancelen las posiciones hasta que se alcance el precio de stop/stop loss o se active la señal de reversión Williams %R.
  5. Una vez vendido, establece los niveles de stop y stop loss para cerrar la posición hasta que se alcance el precio de stop / stop loss o se active la señal de reversión Williams % R.
  6. Se puede elegir entre el rango de tiempo especificado para operar (por ejemplo, 9:00-11:00) y si operar cerca del punto entero (por ejemplo, X minutos antes y Y minutos después).
  7. Se puede optar por hacer solo más, solo a la baja o a dos.

Análisis de las ventajas

  1. Detención de pérdidas dinámicas: ajuste dinámico del nivel de detención de pérdidas según la configuración del usuario, para proteger mejor los beneficios y controlar el riesgo.
  2. Parámetros flexibles: los usuarios pueden configurar varios parámetros según sus propias preferencias, como el ciclo del indicador, el nivel de stop loss, el tiempo de negociación, etc., para adaptarse a diferentes condiciones del mercado.
  3. Indicador de nivelación: Introduzca el valor de nivelación Williams % R de EMA, que puede reducir el ruido del indicador y mejorar la fiabilidad de la señal.
  4. Limitar el tiempo de negociación: se puede optar por negociar en un período de tiempo específico, evitar los momentos de gran volatilidad del mercado y reducir el riesgo.
  5. Dirección de negociación personalizada: puede elegir solo hacer más, solo hacer menos o negociar en ambos sentidos, según las tendencias del mercado y el juicio personal.

Análisis de riesgos

  1. Configuración incorrecta de los parámetros: si el parámetro de parada y pérdida está configurado de manera demasiado flexible o demasiado estricta, puede causar pérdidas de ganancias o paradas frecuentes.
  2. Error de reconocimiento de tendencias: el indicador Williams %R no funciona bien en mercados convulsivos y puede generar señales erróneas.
  3. Las restricciones de tiempo tienen un efecto limitado: las restricciones de tiempo de negociación pueden hacer que la estrategia pierda algunas buenas oportunidades de negociación.
  4. Optimización excesiva: los parámetros de optimización excesiva pueden causar que la estrategia no funcione bien en las operaciones reales futuras.

Dirección de optimización

  1. En combinación con otros indicadores, como indicadores de tendencia, indicadores de fluctuación, etc., mejora la precisión de la detección de señales.
  2. Optimización de parámetros dinámicos: ajuste de parámetros en tiempo real según la situación del mercado, como el uso de diferentes configuraciones de parámetros en los mercados de tendencia y los mercados de crisis.
  3. Mejorar los métodos de detención de pérdidas, como el uso de métodos de seguimiento de pérdidas, detención parcial, etc., para proteger mejor los beneficios y controlar el riesgo.
  4. Adjunto a la administración de fondos: ajuste dinámico del tamaño de las posiciones de cada operación según el saldo de la cuenta y las preferencias de riesgo.

Resumir

La estrategia Williams %R para el ajuste dinámico del stop loss capta el estado de sobreventa y sobreventa de los precios de una manera simple y efectiva, al tiempo que ofrece una configuración de parámetros flexible para adaptarse a diferentes entornos de mercado y estilos de negociación. La estrategia ajusta dinámicamente el nivel de stop loss para controlar mejor el riesgo y proteger las ganancias.

Código Fuente de la Estrategia
/*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)