
La estrategia utiliza una combinación de promedios móviles, el indicador Laguerre RSI y el indicador ADX para lograr operaciones de ruptura. Cuando el promedio móvil rápido atraviesa el promedio móvil lento, el RSI de Laguerre es mayor que 80, el ADX es mayor que 20, y cuando el promedio móvil rápido atraviesa el promedio móvil lento, el RSI de Laguerre es menor que 20, el ADX es mayor que 20 y queda en blanco.
La estrategia se basa principalmente en los siguientes indicadores para determinar la tendencia y el momento de entrada en el mercado:
Combinación de promedios móviles: EMA de 16 días, EMA de 48 días, SMA de 200 días. Cuando el promedio a corto plazo se corre sobre el promedio a largo plazo, se considera un mercado de más cabeza, y cuando se corre por debajo, se considera un mercado de cabeza vacía.
El RSI de Laguerre es un indicador que determina las zonas de sobreventa y sobrecompra. Un RSI mayor a 80 es una señal de másca y menor a 20 es una señal de baja.
El indicador ADX determina el estado de la tendencia. ADX mayor a 20 indica el estado de la tendencia, adecuado para las operaciones de ruptura.
La señal de entrada es la combinación de las medias móviles para determinar la dirección de la tendencia, el RSI de Laguerre para determinar el momento de la entrada, el filtro de ADX para los mercados no tendencia. La señal de salida es la reversión de las medias móviles.
La estrategia tiene las siguientes ventajas:
Capturar la dinámica de la tendencia: esta estrategia se utiliza solo cuando la tendencia comienza a desarrollarse y puede capturar los beneficios del índice de mercado posterior.
Limitación de pérdidas: el stop loss se establece correctamente, lo que permite controlar las pérdidas individuales en un cierto rango. Incluso si se encuentra en una celda, hay oportunidades de ganar.
El indicador de la combinación de indicadores es preciso: los promedios móviles, el RSI de Laguerre y el indicador ADX pueden determinar con relativa precisión la disponibilidad y el momento de entrada en el mercado.
Simple de implementar: La estrategia utiliza sólo 3 indicadores, es simple de implementar y fácil de aprender.
La estrategia también tiene ciertos riesgos:
Riesgo de reversión de la tendencia: la estrategia es una estrategia de seguimiento de la tendencia, y si no se detecta la reversión de la tendencia a tiempo, se producen grandes pérdidas.
Riesgo de retiro: en situaciones de crisis, el stop loss puede ser superado y la cuenta puede ser retirada.
Riesgo de optimización de parámetros: los parámetros del indicador deben ajustarse a los diferentes mercados, de lo contrario se producen fallas.
Respuesta:
El objetivo de la medida es reducir el riesgo de pérdidas.
Optimización de los parámetros indicadores y ajuste del número de brechas.
La administración de retiros se realiza mediante el uso de métodos como el valor por vencimiento de los conjuntos de futuros.
Esta estrategia puede ser optimizada en los siguientes aspectos:
Optimización de los parámetros óptimos: prueba con el ciclo de las medias móviles, los parámetros de Laguerre RSI y los parámetros de ADX para encontrar la combinación óptima de parámetros.
Optimización de brechas: prueba diferentes brechas de medias móviles para encontrar el equilibrio entre el número de transacciones y la tasa de ganancias.
Optimización de las condiciones de entrada: prueba de otros indicadores en combinación con el indicador RSI de Laguerre para buscar condiciones que determinen con mayor precisión el momento de entrada.
Optimización de las condiciones de salida: Estudiar otros indicadores en combinación con las medias móviles como una señal de salida más precisa.
Objetivos de ganancias y optimización de pérdidas y pérdidas: prueba diferentes estrategias de stop loss y optimización de la ganancia de la cuenta.
La estrategia capta la tendencia de manera efectiva mediante el uso de tres indicadores de movimiento de la media, el RSI de Laguerre y el ADX. La estrategia capta las ganancias en el índice de la tendencia al comenzar a desarrollarse. Al mismo tiempo, establece una estrategia de stop loss para controlar las pérdidas individuales.
/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PtGambler
//@version=5
strategy("3MA + Laguerre RSI + ADX [Pt]", shorttitle = "3MA+LaRSI+ADX[Pt]", overlay=true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills = false, max_bars_back = 500)
// ********************************** Trade Period / Strategy Setting **************************************
startY = input(title='Start Year', defval=2011, group = "Backtesting window")
startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Backtesting window")
startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Backtesting window")
finishY = input(title='Finish Year', defval=2050, group = "Backtesting window")
finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Backtesting window")
finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Backtesting window")
timestart = timestamp(startY, startM, startD, 00, 00)
timefinish = timestamp(finishY, finishM, finishD, 23, 59)
use_entry_sess = input.bool(false, 'Use Entry Session Window', group = "Trading Session")
t1_session = input("0930-1555:23456", "Entry Session", group="Trading Session", tooltip = "Entry Signal only generated within this period.")
t1 = time(timeframe.period, t1_session)
window = true
margin_req = input.float(1, title="Margin Requirement / Leverage", step=0.1, group = "Trading Options")
qty_per_trade = input.float(100, title = "% of initial capital per trade", group = "Trading Options")
reinvest = input.bool(defval=false,title="Reinvest profit", group = "Trading Options")
reinvest_percent = input.float(defval=100, title = "Reinvest percentage", group="Trading Options")
close_eod = input.bool(false, "All trades will close at the close of trading window", group = "Trading Options")
close_b4_open = input.bool(false, "Position must hit either SL/PT before entering new trade", group = "Trading Options")
profit = strategy.netprofit
strategy.initial_capital = 50000
float trade_amount = math.floor(strategy.initial_capital*margin_req / close)
if strategy.netprofit > 0 and reinvest
trade_amount := math.floor((strategy.initial_capital* (qty_per_trade/100)+(profit*reinvest_percent*0.01))*margin_req/ close)
else
trade_amount := math.floor(strategy.initial_capital* (qty_per_trade/100)*margin_req / close)
// ******************************************************************************************
group_ma = "Moving Average Ribbon"
group_larsi = "Laguerre RSI"
group_adx = "ADX"
group_SL = "Stop Loss / Profit Target"
// ----------------------------------------- MA Ribbon -------------------------------------
ema1_len = input.int(16, "Fast EMA Length", group = group_ma)
ema2_len = input.int(48, "Slow EMA Length ", group = group_ma)
sma1_len = input.int(200, "Slow SMA Length", group = group_ma)
ema1 = ta.ema(close, ema1_len)
ema2 = ta.ema(close, ema2_len)
sma1 = ta.sma(close, sma1_len)
plot(ema1, "EMA 1", color.white, linewidth = 2)
plot(ema2, "EMA 2", color.yellow, linewidth = 2)
plot(sma1, "SMA 1", color.purple, linewidth = 2)
ma_bull = ema1 > ema2 and ema2 > sma1
ma_bear = ema1 < ema2 and ema2 < sma1
// ------------------------------------------ Laguerre RSI ---------------------------------------
alpha = input.float(0.2, title='Alpha', minval=0, maxval=1, step=0.1, group = group_larsi)
gamma = 1 - alpha
L0 = 0.0
L0 := (1 - gamma) * close + gamma * nz(L0[1])
L1 = 0.0
L1 := -gamma * L0 + nz(L0[1]) + gamma * nz(L1[1])
L2 = 0.0
L2 := -gamma * L1 + nz(L1[1]) + gamma * nz(L2[1])
L3 = 0.0
L3 := -gamma * L2 + nz(L2[1]) + gamma * nz(L3[1])
cu = (L0 > L1 ? L0 - L1 : 0) + (L1 > L2 ? L1 - L2 : 0) + (L2 > L3 ? L2 - L3 : 0)
cd = (L0 < L1 ? L1 - L0 : 0) + (L1 < L2 ? L2 - L1 : 0) + (L2 < L3 ? L3 - L2 : 0)
temp = cu + cd == 0 ? -1 : cu + cd
LaRSI = temp == -1 ? 0 : cu / temp
LaRSI := LaRSI * 100
bull_LaRSI = LaRSI > 80
bear_LaRSI = LaRSI < 20
// --------------------------------------- ADX ------------------------
adxlen = input(14, title="ADX Smoothing", group = group_adx)
dilen = input(14, title="DI Length", group = group_adx)
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
active_adx = sig > 20 //and sig > sig[1]
// ******************************* Profit Target / Stop Loss *********************************************
use_SLPT = input.bool(false, 'Use Fixed SL / PT', group = group_SL)
SL = input.float(50, 'Stop loss in ticks', step = 1, group = group_SL) * syminfo.mintick
PT = input.float(100, "Profit target in ticks", step = 1, group = group_SL) * syminfo.mintick
var L_PT = 0.0
var S_PT = 0.0
var L_SL = 0.0
var S_SL = 0.0
if strategy.position_size > 0
L_SL := L_SL[1]
L_PT := L_PT[1]
else if strategy.position_size < 0
S_SL := S_SL[1]
S_PT := S_PT[1]
else
L_SL := close - SL
L_PT := close + PT
S_SL := close + SL
S_PT := close - PT
entry_line = plot(use_SLPT and strategy.position_size != 0 ? strategy.opentrades.entry_price(0) : na, "Entry Price", color.white, linewidth = 1, style = plot.style_linebr)
L_PT_line = plot(use_SLPT and strategy.position_size > 0 ? L_PT : na, "L PT", color.green, linewidth = 2, style = plot.style_linebr)
S_PT_line = plot(use_SLPT and strategy.position_size < 0 ? S_PT : na, "S PT", color.green, linewidth = 2, style = plot.style_linebr)
L_SL_line = plot(use_SLPT and strategy.position_size > 0 ? L_SL : na, "L SL", color.red, linewidth = 2, style = plot.style_linebr)
S_SL_line = plot(use_SLPT and strategy.position_size < 0 ? S_SL : na, "S SL", color.red, linewidth = 2, style = plot.style_linebr)
fill(L_PT_line, entry_line, color = color.new(color.green,90))
fill(S_PT_line, entry_line, color = color.new(color.green,90))
fill(L_SL_line, entry_line, color = color.new(color.red,90))
fill(S_SL_line, entry_line, color = color.new(color.red,90))
// ---------------------------------- Strategy setup ------------------------------------------------------
L_entry1 = ma_bull and bull_LaRSI and active_adx
S_entry1 = ma_bear and bear_LaRSI and active_adx
L_exit1 = ta.crossunder(ema1, ema2)
S_exit1 = ta.crossover(ema1, ema2)
// Trigger zones
bgcolor(ma_bull ? color.new(color.green ,90) : na)
bgcolor(ma_bear ? color.new(color.red,90) : na)
if L_entry1 and (use_entry_sess ? window : true) and (close_b4_open ? strategy.position_size == 0 : true)
strategy.entry("Long", strategy.long, trade_amount)
if S_entry1 and (use_entry_sess ? window : true) and (close_b4_open ? strategy.position_size == 0 : true)
strategy.entry("Short", strategy.short, trade_amount)
if use_SLPT
strategy.exit("Exit Long", "Long", limit = L_PT, stop = L_SL, comment_profit = "Exit Long, PT hit", comment_loss = "Exit Long, SL hit")
strategy.exit("Exit Short", "Short", limit = S_PT, stop = S_SL, comment_profit = "Exit Short, PT hit", comment_loss = "Exit Short, SL hit")
else
if L_exit1
strategy.close("Long", comment = "Exit Long")
if S_exit1
strategy.close("Short", comment = "Exit Short")
if use_entry_sess and not window and close_eod
strategy.close_all(comment = "EOD close")