Esta estrategia utiliza RMA a largo plazo y cruces de EMA a corto plazo para determinar la dirección de la tendencia.
Utilice el RMA de largo período y el EMA de corto período para determinar la tendencia.
Cuando el precio se rompe por encima del máximo reciente en ciertos períodos, sigue el máximo más alto como stop loss.
Establezca una zona de no comercio alrededor de la RMA. No abra posiciones cuando el precio esté dentro de la zona para evitar golpes.
Se establece el precio de toma de ganancias para las posiciones de salida a un porcentaje de ganancia después de la entrada.
El cruce de la media móvil doble determina con fiabilidad la dirección de la tendencia.
Los movimientos de stop loss siguen la tendencia.
La zona de exclusión comercial filtra señales falsas de fuga.
Tomar ganancias permite a la estrategia cerrar activamente operaciones rentables.
El retraso en los cruces de la media móvil puede aumentar las pérdidas.
El stop loss demasiado cerca del precio puede ser detenido por el ruido.
Una zona de exclusión comercial demasiado amplia puede perder oportunidades.
No parar a tiempo puede llevar a más pérdidas.
Soluciones posibles:
Optimizar los parámetros de la media móvil para reducir el retraso.
Ampliar ligeramente el stop loss para evitar la hipersensibilidad.
Prueba de ajuste del rango de zonas de exclusión comercial para evitar operaciones perdidas.
Añadir otros mecanismos de stop loss para limitar la pérdida máxima.
Pruebe otras combinaciones de promedios móviles para obtener una mejor adaptación.
Agregue el spread, el MACD, etc. para mejorar la estabilidad.
Utilice el aprendizaje automático para optimizar los parámetros de manera inteligente.
Incorporar la fuerza de la tendencia para evitar operaciones contra la tendencia.
Optimice la gestión del dinero para una mayor tasa de ganancia.
Esta estrategia utiliza dos cruces de promedios móviles para determinar la dirección de la tendencia y combina paradas de seguimiento y zonas de no comercio para bloquear las ganancias de la tendencia.
/*backtest start: 2023-08-24 00:00:00 end: 2023-09-12 00:00:00 period: 3h basePeriod: 15m 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/ // © PatrickGwynBuckley //@version=5 //var initialCapital = strategy.equity strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true) shortma = input.int(55, title="quick ma's") longma = input.int(100, title="long ma's") ema55h = ta.ema(high, shortma) ema55l = ta.ema(low, shortma) ema200h = ta.rma(high, longma) ema200l = ta.rma(low, longma) stock = ta.stoch(close, high, low, 14) lev = input.int(3, title="leverage") hhVal = input.int(170, title="Highest high period") llVal = input.int(170, title="Lowest low period") hh = ta.highest(high, hhVal) ll = ta.lowest(low, llVal) //plot(stock) plot(hh, color=color.new(color.green, 50)) plot(ll, color=color.new(color.red, 50)) var float downtrade = 0 p = input.float(3.0, title="no trade zone") l = 3 emadistlong = ema200h + ((ema200h/100)*p) emadistshort = ema200l - ((ema200h/100)*p) plot(ema55h) plot(ema55l) ntl = plot(emadistlong, color=color.new(color.red, 10)) nts = plot(emadistshort, color=color.new(color.red, 10)) fill(ntl, nts, color=color.new(color.red, 90)) //position size EntryPrice = close //positionValue = initialCapital positionSize = (strategy.equity*lev) / EntryPrice //plot(strategy.equity) //standard short if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 strategy.entry("short", strategy.short, qty=positionSize, comment="short") downtrade := 1 //reset count if (ta.crossunder(ema55h, ema200l)) and downtrade == 1 downtrade := 0 //standard long if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 strategy.entry("long", strategy.long, qty=positionSize, comment="long") downtrade := 0 //RESET COUNT ON MA CROSS if (ta.crossover(ema55l, ema200h)) and downtrade == 0 downtrade := 1 longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)// shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)// sl = 3.5 tp = input.float(6.9, title="take profit %") tp2 = 10 strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl))) strategy.close("long", when = longclose2, comment = "long exit") //strategy.close("long", when = (downtrade == 1), comment = "long exit") //strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl))) //strategy.close ("long2", when = longclose2, comment = "long exit") //strategy.close("long", when = (downtrade == 1), comment = "long exit") strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300) strategy.close("short", when = shortclose2, comment = "short exit") //strategy.close("short", when = (downtrade == 0), comment = "short exit") //strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl))) //strategy.close ("short2", when = shortclose2, comment = "short exit") //strategy.close("short2", when = (downtrade == 0), comment = "short exit") //if (strategy.exit("long exit", "long")) //downtrade := 1 //else // downtrade := 0