
La idea principal de la estrategia es combinar soportes de resistencia y brechas en el volumen de transacciones para determinar el momento de entrada, y utilizar el indicador ATR para lograr un ajuste dinámico del precio de seguimiento de la pérdida después de la ganancia, para obtener más ganancias potenciales.
La estrategia se compone principalmente de las siguientes partes lógicas:
Utiliza las funciones ta.pivothigh y ta.pivotlow para calcular el valor máximo de la línea L_Bars raíz K y el valor mínimo de la línea R_Bars raíz K, como líneas de resistencia y de soporte.
Haga más cuando el precio de cierre cruza la línea de resistencia y el volumen de transacción rompe el umbral del rango de volumen; cuando el precio de cierre cruza la línea de soporte y el volumen de transacción rompe el umbral del rango de volumen, haga un descuento.
Después de hacer más, use close-ATR_LO como parada larga; después de hacer short, use close+ATR_SH como parada corta, para lograr un stop de seguimiento de ajuste dinámico.
Durante las horas de negociación ((0915-1445), no se abrirá una nueva orden después de que se haga la primera señal de negociación diaria y los beneficios o pérdidas alcancen el monto de riesgo.
El uso de la teoría de la resistencia de soporte, combinado con el indicador de la masa de tráfico, hace que el tiempo de entrada sea más preciso.
El indicador ATR utiliza el seguimiento de las pérdidas, lo que permite ajustar la posición de las pérdidas de forma flexible en función de la volatilidad del mercado, lo que reduce la probabilidad de retorno de ganancias después de obtener ganancias.
Controlar adecuadamente el número de operaciones en un día y el riesgo de una sola operación puede ayudar a comprender la tendencia y evitar pérdidas excesivas.
La resistencia de soporte puede fallar y no proporcionar una señal de entrada efectiva.
El indicador ATR está demasiado alto, lo que puede llevar a que el stop loss sea demasiado largo, lo que aumenta el riesgo de pérdidas.
Si el indicador de volumen de transacciones se establece demasiado pequeño, puede ocasionar oportunidades perdidas; si se establece demasiado grande, puede ocasionar señales de error.
La solución:
Ajuste los parámetros de resistencia de soporte según las características de las diferentes variedades
Optimización de los parámetros de reducción de los ATR y de los volúmenes de transacción
El tiempo de ingreso en combinación con otros indicadores
Combinado con otros indicadores para determinar el tiempo de entrada, como la media móvil, etc.
Optimización de los parámetros de reducción de ATR y volumen de transacción
Optimización de parámetros dinámicos en combinación con algoritmos de aprendizaje automático
Extensión a otras variedades, búsqueda de parámetros regulares
La estrategia integra varias herramientas analíticas y logra mejores resultados en la fase de retracción mediante el uso de métodos de soporte de resistencia, volumen de transacción y parada de pérdidas. Sin embargo, es posible que se enfrente a más incertidumbres en el mercado real y se necesite mejorar aún más el rendimiento del mercado real mediante la optimización de parámetros e introducir otros indicadores de juicio. En general, la estrategia es clara y fácil de entender y proporciona un buen caso de referencia para la estrategia de comercio cuantitativo.
/*backtest
start: 2024-01-03 00:00:00
end: 2024-01-10 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// ____________ _________ _____________
// |____________| ||________| ||__________|
// || ____ || || || ______ ________ _____ ________
// || | || || ||________|| | || || || || | || /\\ | // |______| || || |______|
// || |===|| |=== ||__________ | || || || || |===|| /__\\ |=== || || \\ ||
// || | || ||___ || || |___|| ||___ ||___ || | || / \\ | \\ || || ___|| ||
// || ||________|| ||__________
// || ||________| ||__________|
//@version=5
strategy("SUPPORT RESISTANCE STRATEGY [5MIN TF]",overlay=true )
L_Bars = input.int(defval = 10, minval = 1 , maxval = 50, step =1)
R_Bars = input.int(defval = 15, minval = 1 , maxval = 50, step =1)
volumeRange = input.int(20, title='Volume Break [threshold]', minval = 1)
// ═══════════════════════════ //
// ——————————> INPUT <——————— //
// ═══════════════════════════ //
EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")
var initialCapital = strategy.equity
t = time(timeframe.period, '0915-1445:1234567')
time_cond = not na(t)
// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)
plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')
// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1
// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2
long_trail = close - ATR_LO
short_trail = close + ATR_SH
// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> RESISTANCE/SUPPORT LEVELS DATA <————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
Resistance_pi = fixnan(ta.pivothigh(L_Bars, R_Bars)[1])
Support_pi = fixnan(ta.pivotlow(L_Bars, R_Bars)[1])
r1 = plot(Resistance_pi, color=ta.change(Resistance_pi) ? na : color.red, offset=-(R_Bars + 1),linewidth=2, title='RESISTANCE')
s1 = plot(Support_pi, color=ta.change(Support_pi) ? na : color.green, offset=-(R_Bars + 1),linewidth=2, title='SUPPORT')
//Volume
vol_1 = ta.ema(volume, 5)
vol_2 = ta.ema(volume, 10)
osc_vol = 100 * (vol_1 - vol_2) / vol_2
// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******
if ( ta.crossover(close, Resistance_pi) and osc_vol > volumeRange and not(open - low > close - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
strategy.entry(id= "Long" ,direction = strategy.long, comment = "BUY")
plot(long_trail , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')
if strategy.position_size > 0
strategy.exit("long tsl", "Long" , stop = long_trail ,comment='SELL')
// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( ta.crossunder(close, Support_pi) and osc_vol > volumeRange and not(open - close < high - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
strategy.entry(id = "Short" ,direction = strategy.short, comment = "SELL")
if strategy.position_size < 0
strategy.exit("short tsl", "Short" , stop = short_trail ,comment='BUY')
// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)
// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)