La estrategia utiliza indicadores técnicos transitorios para identificar la dirección de la tendencia, combinando filtración de tendencia y filtración de volatilidad para lograr operaciones de seguimiento de tendencias de bajo riesgo.
Utiliza brechas altas y bajas para juzgar las señales de compra y venta. Mira abajo cuando el precio rompe los máximos de 7 ciclos y mira más cuando rompe los mínimos de 7 ciclos.
El indicador Trendflex determina la dirección de la tendencia principal. El indicador combina la tecnología de doble suavización para identificar eficazmente el tramo medio de la tendencia. Los valores superiores a 1 indican una tendencia ascendente, y los valores inferiores a -1 son una tendencia descendente.
La oscilación de las Bollinger Bands trae consigo la identificación de zonas de oscilación.
El uso de stop loss móvil y stop stop móvil para administrar las posiciones.
La combinación de la tecnología de doble alineación permite identificar la dirección de la tendencia y evitar la perturbación de los movimientos de la bolsa.
Al mismo tiempo, se tiene en cuenta la dirección de la tendencia y las leyes de fluctuación para que las señales de negociación sean más confiables.
La suspensión de pérdidas se establece de manera razonable para bloquear las ganancias y evitar la expansión de las pérdidas.
Las estrategias son sencillas, fáciles de entender y de implementar.
Las señales de ruptura pueden presentar falsas rupturas, lo que genera transacciones erróneas. Se puede considerar agregar más condiciones de interferencia.
Los parámetros de ciclo fijo no pueden adaptarse a los cambios en el mercado, se pueden considerar los parámetros de optimización dinámica.
La ausencia de paradas de precios no puede evitar grandes pérdidas causadas por las tendencias extremas.
El punto de parada y pérdida está fijo y no puede ajustarse a las fluctuaciones del mercado.
Se puede considerar la inclusión de más indicadores de juicio de tendencias para formar una combinación de estrategias y mejorar la precisión de juicio.
Se ha añadido un módulo de reconocimiento de temblores, para suspender el comercio en caso de una fuerte sacudida y reducir el riesgo.
Introducción de algoritmos de aprendizaje automático para la optimización dinámica de los parámetros.
El módulo de parada de pérdidas se puede agregar y se puede salir de la parada de pérdidas cuando las pérdidas alcanzan una cierta depreciación.
Se calcula el Stop Loss Ratio basado en la fluctuación del mercado para lograr un ajuste inteligente del Stop Loss.
En general, esta estrategia es bastante sólida y confiable, pero también hay cierto espacio para mejorar. La idea central es determinar la dirección de la tendencia a lo largo de los ciclos, y luego combinar los indicadores de intensidad de la tendencia y los indicadores de fluctuación para filtrar, lo que emite una señal de alta calidad.
/*backtest
start: 2023-08-27 00:00:00
end: 2023-09-26 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Eltrut", shorttitle="Eltrut Strat", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity,calc_on_order_fills=false, slippage=25,commission_type=strategy.commission.percent,commission_value=0.075)
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// R E F L E X / T R E N D F L E X
f_supersmoother(_src,_len)=>
pi = 2 * asin(1)
_a = exp(-sqrt(2) * pi / _len)
_c2 = 2 * _a * cos(sqrt(2) * pi / _len)
_c3 = -_a * _a
_c1 = 1 - _c2 - _c3
_out = 0.0
_out := _c1 * _src + _c2 * nz(_out[1],nz(_src[1],_src)) + _c3 * nz(_out[2],nz(_src[2],nz(_src[1],_src)))
f_IQIFM(_src1,_max)=>
_src = _src1 < 0.001 ? _src1 * 10000 : _src1
_imult = 0.635, _qmult = 0.338 , _inphase = 0.0, _quad = 0.0
_re = 0.0, _im = 0.0, _deltaphase = 0.0, _instper = 0.0, _per = 0.0, _v4 = 0.0
_v1 = _src - nz(_src[7])
_inphase := 1.25 * (nz(_v1[4]) - _imult * _v1[2]) + _imult * nz(_inphase[3])
_quad := _v1[2] - _qmult * _v1 + _qmult * nz(_quad[2])
_re := 0.2 * (_inphase * _inphase[1] + _quad * _quad[1]) + 0.8 * nz(_re[1])
_im := 0.2 * (_inphase * _quad[1] - _inphase[1] * _quad) + 0.8 * nz(_im[1])
if _re != 0.0
_deltaphase := atan(_im / _re)
for i = 0 to _max
_v4 := _v4 + _deltaphase[i]
if _v4 > 4 * asin(1) and _instper == 0.0
_instper := i
if _instper == 0.0
_instper := nz(_instper[1])
_per := 0.25 * _instper + 0.75 * nz(_per[1])
_per
f_flex(_src1, _fixed_len, _reflex) =>
_src = _src1
_len = _fixed_len
_ss1 = f_supersmoother(_src, _len)
_ss = _ss1
_slope = (_ss[_len] - _ss) / _len
_sum = 0.0
for _i = 1 to _len
_c1 = _reflex ? _ss + _i * _slope - _ss[_i] : _ss - _ss[_i]
_sum := _sum + _c1
_sum := _sum / _len
_ms = 0.0
_ms := 0.04 * pow(_sum,2) + 0.96 * nz(_ms[1])
_flex1 = _ms != 0 ? _sum / sqrt(nz(_ms)) : 0.0
_flex = _flex1
_flex
rflx = f_flex(close, 20, true)
trndflx = f_flex(close, 20, false)
// S I G N A L
hi7 = highest(7)
lo7 = lowest(7)
long_cond = crossunder(close, lo7[1])
short_cond = crossover(close, hi7[1])
// F I L T E R S
long_filter1 = trndflx < 1
short_filter1 = trndflx > -1
basis = sma(close, 35)
dev = 3 * stdev(close, 35)
long_filter2 = close > basis - dev
short_filter2 = close < basis + dev
// S T R A T E G Y
long = long_cond and long_filter1 and long_filter2
short = short_cond and short_filter1 and short_filter2
if( true)
strategy.entry("Long", strategy.long, when = long)
strategy.entry("Long", strategy.long, when = short)
// User Options to Change Inputs (%)
stopPer = input(3, title='Stop Loss %', type=input.float) / 100
takePer = input(9, title='Take Profit %', type=input.float) / 100
// Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)
if strategy.position_size > 0
strategy.exit(id="Exit Long", stop=longStop, limit=longTake)
if strategy.position_size < 0
strategy.exit(id="Exit Short", stop=shortStop, limit=shortTake)
// P L O T
plotshape(long, color = #1e90ff, text = "", style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(short, color = #ff69b4, text = "", style=shape.triangledown, location=location.abovebar, size=size.tiny)
alertcondition(long, "Long", "Enter Long")
alertcondition(short, "Short", "Enter S")