
Esta estrategia se beneficia mediante la identificación de acciones que aumentan rápidamente y la creación de más posiciones cuando se rompe el nuevo máximo, con un porcentaje fijo de paradas. Esta estrategia es una estrategia de seguimiento de tendencias.
La estrategia se basa principalmente en dos indicadores:
RSI Rápido: Para determinar el movimiento de los precios, calcula los cambios de alza y bajada de las 3 líneas K más recientes. Cuando el RSI Rápido es inferior a 10, se considera que la acción está en un estado de hiperinflación.
Filtración de la entidad principal: calcula el tamaño promedio de la entidad de las 20 líneas K más recientes, cuando la entidad de precio es 2,5 veces mayor que la entidad promedio, se considera una ruptura efectiva.
Cuando el RSI rápido es inferior a 10 y el filtro de la entidad es efectivo, se realiza una apertura adicional. Luego se establece un punto de parada fijo del 20% cuando el precio supera el precio de apertura*Cuando el precio de la posición se mantiene, el precio de la posición se mantiene.
La ventaja de esta estrategia es que puede capturar oportunidades de ruptura en la etapa inicial de la tendencia, y evitar falsas rupturas a través de la determinación de las zonas inferiores por el RSI rápido, con filtración de entidades. Adoptar un método de parada fija para bloquear cada ganancia, puede mantenerse en la tendencia.
La estrategia tiene las siguientes ventajas:
El uso del RSI rápido para determinar la zona de descenso de la parte inferior puede mejorar la precisión de la entrada.
El mecanismo de filtración principal puede evitar falsas rupturas causadas por el temblor.
El método de cierre porcentual fijo permite obtener ganancias continuas y conocer las tendencias.
La lógica de la estrategia es simple, clara y fácil de entender.
La estructura del código es elegante, extensible y fácil de optimizar.
Durante el período de referencia, la estrategia obtuvo un rendimiento positivo estable y una alta tasa de éxito.
La estrategia también tiene algunos riesgos a tener en cuenta:
La estrategia no tiene un mecanismo de stop loss y existe el riesgo de que las pérdidas individuales se extiendan.
La configuración incorrecta de la posición fija del punto de parada puede provocar una parada prematura o un punto de parada demasiado profundo.
Cuando la situación es turbulenta, es fácil que se produzcan pequeñas pérdidas continuas.
Sin tener en cuenta el costo de financiación y liquidación, la ganancia a tiempo real disminuirá.
La optimización de los parámetros de la estrategia es insuficiente, y las diferentes variedades necesitan ajustar los parámetros.
La estrategia puede ser optimizada en los siguientes aspectos:
El aumento del mecanismo de suspensión de pérdidas permite controlar las pérdidas individuales.
Optimiza el punto de parada para que pueda seguir la tendencia de forma dinámica.
Optimizar los indicadores de evaluación de las brechas y mejorar la precisión de la admisión.
Añadir un módulo de gestión de posiciones para optimizar la ocupación de posiciones.
Añade un módulo de optimización de parámetros de variedades para optimizar automáticamente los parámetros de diferentes variedades.
Aumentar las condiciones de filtración para evitar pérdidas cuando las cosas se mueven demasiado.
Considere agregar un módulo de gestión del costo promedio de la posición.
En general, esta estrategia es una estrategia de seguimiento de tendencias muy sencilla y elegante. Utiliza un rápido RSI para juzgar los excesos y caídas, un filtro de entidades para determinar las rupturas efectivas y un punto de parada fijo para obtener ganancias estables. Aunque hay algunos espacios para optimizar, la estrategia responde con agilidad y es adecuada para capturar escenarios de cambios rápidos en la conducta.
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// this is based on https://www.tradingview.com/v/PbQW4mRn/
strategy(title = "ONLY LONG V4 v1", overlay = true, initial_capital = 1000, pyramiding = 1000,
calc_on_order_fills = false, calc_on_every_tick = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 50, commission_value = 0.075)
//study(title = "ONLY LONG V4 v1", overlay = true)
//Fast RSI
src = close
fastup = rma(max(change(src), 0), 3)
fastdown = rma(-min(change(src), 0), 3)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Body Filter
body = abs(close - open)
abody = sma(body, 20)
mac = sma(close, 20)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
up = close < open and len > sma * 2 and min < min[1] and fastrsi < 10 and body > abody * 2.5
// Strategy
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
var bool longCondition = na
longCondition := up == 1 ? 1 : na
// Get the price of the last opened long
var float last_open_longCondition = na
last_open_longCondition := longCondition ? close : nz(last_open_longCondition[1])
// Get the bar time of the last opened long
var int last_longCondition = 0
last_longCondition := longCondition ? time : nz(last_longCondition[1])
// Take profit
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
tp = input(20, "TAKE PROFIT %", type = input.float, minval = 0, step = 0.5)
long_tp = crossover(high, (1+(tp/100))*last_open_longCondition) and not longCondition
// Get the time of the last tp close
var int last_long_tp = na
last_long_tp := long_tp ? time : nz(last_long_tp[1])
Final_Long_tp = long_tp and last_longCondition > nz(last_long_tp[1])
// Count your long conditions
var int sectionLongs = 0
sectionLongs := nz(sectionLongs[1])
var int sectionTPs = 0
sectionTPs := nz(sectionTPs[1])
// Longs Counter
if longCondition
sectionLongs := sectionLongs + 1
sectionTPs := 0
if Final_Long_tp
sectionLongs := 0
sectionTPs := sectionTPs + 1
// Signals
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// Long
// label.new(
// x = longCondition[1] ? time : na,
// y = na,
// text = 'LONG'+tostring(sectionLongs),
// color=color.lime,
// textcolor=color.black,
// style = label.style_labelup,
// xloc = xloc.bar_time,
// yloc = yloc.belowbar,
// size = size.tiny)
// Tp
// label.new(
// x = Final_Long_tp ? time : na,
// y = na,
// text = 'PROFIT '+tostring(tp)+'%',
// color=color.orange,
// textcolor=color.black,
// style = label.style_labeldown,
// xloc = xloc.bar_time,
// yloc = yloc.abovebar,
// size = size.tiny)
ltp = iff(Final_Long_tp, (last_open_longCondition*(1+(tp/100))), na), plot(ltp, style=plot.style_cross, linewidth=3, color = color.white, editable = false)
// Backtesting
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
testStartYear = input(2019, "BACKTEST START YEAR", minval = 1, maxval = 2222)
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
strategy.entry("long", strategy.long, when = longCondition and (time >= testPeriodStart))
strategy.exit("TP", "long", limit = (last_open_longCondition*(1+(tp/100))))
// Alerts
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
alertcondition(longCondition[1], title="Long Alert", message = "LONG")
alertcondition(Final_Long_tp, title="Long TP Alert", message = "LONG TP")