
La estrategia se basa en la metodología de Wyckoff, que combina el índice de fuerza relativa (RSI) y el promedio móvil de volumen de transacciones (MA) para identificar las fases de acumulación y distribución del mercado, lo que genera una señal de compra y venta. Al mismo tiempo, la estrategia utiliza un mecanismo de suspensión de pérdidas de retorno dinámico para controlar el riesgo al establecer el valor máximo de retorno.
La estrategia de suspensión de pérdidas de reversión dinámica del RSI combina el RSI y el indicador de volumen de transacción para identificar las etapas de acumulación y distribución del mercado, y al mismo tiempo utiliza el mecanismo de suspensión de pérdidas de reversión dinámica para controlar el riesgo. La estrategia, al tiempo que capta la tendencia del mercado, también tiene un cierto grado de utilidad para la gestión del riesgo. Sin embargo, el rendimiento de la estrategia depende de la elección de los parámetros del indicador y las características del mercado.
/*backtest
start: 2024-05-07 00:00:00
end: 2024-06-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Wyckoff Methodology Strategy with Max Drawdown", overlay=true)
// Define input parameters
length = input(14, title="RSI Length")
overbought = input(70, title="RSI Overbought Level")
oversold = input(30, title="RSI Oversold Level")
volume_length = input(20, title="Volume MA Length")
initial_capital = input(10000, title="Initial Capital")
max_drawdown = input(500, title="Max Drawdown")
// Calculate RSI
rsi = ta.rsi(close, length)
// Calculate Volume Moving Average
vol_ma = ta.sma(volume, volume_length)
// Identify Accumulation Phase
accumulation = ta.crossover(rsi, oversold) and volume > vol_ma
// Identify Distribution Phase
distribution = ta.crossunder(rsi, overbought) and volume > vol_ma
// Plot RSI
hline(overbought, "Overbought", color=color.red)
hline(oversold, "Oversold", color=color.green)
plot(rsi, title="RSI", color=color.blue)
// Plot Volume and Volume Moving Average
plot(volume, title="Volume", color=color.orange, style=plot.style_histogram)
plot(vol_ma, title="Volume MA", color=color.purple)
// Variables to track drawdown
var float max_equity = initial_capital
var float drawdown = 0.0
// Update max equity and drawdown
current_equity = strategy.equity
if (current_equity > max_equity)
max_equity := current_equity
drawdown := max_equity - current_equity
// Generate Buy and Sell Signals
if (accumulation and drawdown < max_drawdown)
strategy.entry("Buy", strategy.long)
if (distribution and drawdown < max_drawdown)
strategy.entry("Sell", strategy.short)
// Plot Buy and Sell signals on chart
plotshape(series=accumulation, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY")
plotshape(series=distribution, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")
// Close positions if drawdown exceeds max drawdown
if (drawdown >= max_drawdown)
strategy.close_all("Max Drawdown Exceeded")
// Set strategy exit conditions
strategy.close("Buy", when=distribution or drawdown >= max_drawdown)
strategy.close("Sell", when=accumulation or drawdown >= max_drawdown)
// Display drawdown on chart
plot(drawdown, title="Drawdown", color=color.red, linewidth=2, style=plot.style_stepline)