Tendencia de la media móvil doble siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2023-09-24 13:14:08
Las etiquetas:

Resumen general

Esta estrategia utiliza RMA a largo plazo y cruces de EMA a corto plazo para determinar la dirección de la tendencia.

Estrategia lógica

  1. Utilice el RMA de largo período y el EMA de corto período para determinar la tendencia.

  2. 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.

  3. Establezca una zona de no comercio alrededor de la RMA. No abra posiciones cuando el precio esté dentro de la zona para evitar golpes.

  4. Se establece el precio de toma de ganancias para las posiciones de salida a un porcentaje de ganancia después de la entrada.

Ventajas

  1. El cruce de la media móvil doble determina con fiabilidad la dirección de la tendencia.

  2. Los movimientos de stop loss siguen la tendencia.

  3. La zona de exclusión comercial filtra señales falsas de fuga.

  4. Tomar ganancias permite a la estrategia cerrar activamente operaciones rentables.

Los riesgos

  1. El retraso en los cruces de la media móvil puede aumentar las pérdidas.

  2. El stop loss demasiado cerca del precio puede ser detenido por el ruido.

  3. Una zona de exclusión comercial demasiado amplia puede perder oportunidades.

  4. No parar a tiempo puede llevar a más pérdidas.

Soluciones posibles:

  1. Optimizar los parámetros de la media móvil para reducir el retraso.

  2. Ampliar ligeramente el stop loss para evitar la hipersensibilidad.

  3. Prueba de ajuste del rango de zonas de exclusión comercial para evitar operaciones perdidas.

  4. Añadir otros mecanismos de stop loss para limitar la pérdida máxima.

Direcciones de optimización

  1. Pruebe otras combinaciones de promedios móviles para obtener una mejor adaptación.

  2. Agregue el spread, el MACD, etc. para mejorar la estabilidad.

  3. Utilice el aprendizaje automático para optimizar los parámetros de manera inteligente.

  4. Incorporar la fuerza de la tendencia para evitar operaciones contra la tendencia.

  5. Optimice la gestión del dinero para una mayor tasa de ganancia.

Resumen de las actividades

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

Más.