Estrategia de Scalping intradiario para el seguimiento de tendencias en varios marcos de tiempo

El autor:¿ Qué pasa?, Fecha: 2023-11-16 17:47:06
Las etiquetas:

img

Resumen general

Esta estrategia combina indicadores de promedio móvil en múltiples marcos de tiempo para determinar la consistencia de la tendencia y toma acciones de scalping durante el día para seguir la tendencia y obtener ganancias.

Estrategia lógica

Esta estrategia utiliza promedios móviles de 8 períodos y 20 períodos en los marcos de tiempo de 5 minutos, 15 minutos, 30 minutos y 60 minutos para generar señales comerciales. Una señal de compra se genera cuando el MA de 8 períodos cruza por encima del MA de 20 períodos. Una señal de venta se genera cuando el MA de 8 períodos cruza por debajo del MA de 20 períodos.

La estrategia requiere señales consistentes a través de los cuatro marcos de tiempo antes de emitir una orden comercial.

Una vez introducida en una posición, la estrategia establece un objetivo de ganancia fijo para obtener ganancias intradiarias.

Específicamente, la estrategia utiliza la función de seguridad para recuperar los valores de MA de diferentes marcos de tiempo.

Las señales de compra y venta se determinan por si la línea de diferencia cruza por encima/por debajo de la línea cero. Se utilizan varias banderas islong e isshort para registrar la señal en cada marco de tiempo. Las órdenes se colocan cuando se cumplen las condiciones islong e isshort.

Después de entrar en un comercio, la estrategia utilizastrategy.exit() para fijar un objetivo de ganancia fijo para el scalping.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. El diseño de marcos de tiempo múltiples filtra el ruido y reduce la frecuencia del comercio.

  2. El scalping intradiario con optimización de ganancias acumula pequeñas ganancias de manera constante.

  3. Estructura de código clara, fácil de entender y optimizar.

  4. Las condiciones razonables ayudan a controlar el riesgo.

Análisis de riesgos

Los riesgos potenciales de esta estrategia:

  1. Los marcos de tiempo múltiples pueden pasar por alto cambios sutiles en la tendencia.

  2. Las operaciones de scalping frecuentes aumentan los costos.

  3. El objetivo de ganancia fija no es flexible.

  4. Depende de los indicadores, se arriesga a ser engañado.

Direcciones de optimización

Optimizaciones posibles:

  1. Agregue más marcos de tiempo para señales más robustas.

  2. Objetivo dinámico de ganancia basado en ATR.

  3. Filtros adicionales como el aumento de volumen o los extremos de la historia.

  4. Optimizar los períodos de admisión para obtener los mejores parámetros.

  5. Agregue aprendizaje automático para juzgar la confiabilidad de la señal.

Resumen de las actividades

En general, esta es una estrategia típica de seguimiento de tendencias de varios marcos de tiempo que utiliza el scalping intradiario. La lógica es clara y el código bien estructurado. Con la optimización adecuada, puede convertirse en una plantilla de estrategia de scalping muy práctica.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="PeBAS $JPY Scalper 15m ",overlay=true) 
zeigeallebars= input(false, title="Zeige alle (Show all) Candles/Bars?")
profitwert=input(52, title="Profit")
myatr=  input(title="ATR", type=float, defval=0.00002, minval=0.00001,step=0.00001)


//Plot  EMA-Differenz Aktueller Timeframe

dif=(ema(close,8)+ema(close,20))/2
mcolor=ema(close,8) > ema(close,20) ? green : red
bs = ema(close,8) > ema(close,20) ? true : false
ThisATR=atr(16)

//trans = zeigeallebars == true ? 00 : 100
//plot(dif,"dif",color=mcolor,linewidth=6,transp=trans)


//1M EMA
htf_ma1Mema8 = ema(close, 5)
htf_ma1Mema20 = ema(close, 20)
ema81m=request.security(syminfo.tickerid, "1", htf_ma1Mema8)
ema201m=request.security(syminfo.tickerid, "1", htf_ma1Mema20)
dif1M = (ema81m + ema201m) / 2
Close1M = request.security(syminfo.tickerid, "1", close)
color1=ema81m > ema201m ? green : red
//plot(dif1M,"dif",color1,linewidth=6)
//plotshape(1, style=shape.cross, color=color1,location=location.top)
ls1 = ema81m > ema201m ? 1 : 0



//5M EMA

htf_ma5Mema8 = ema(close, 8)
htf_ma5Mema20 = ema(close, 20)
ema85m=request.security(syminfo.tickerid, "5", htf_ma5Mema8)
ema205m=request.security(syminfo.tickerid, "5", htf_ma5Mema20)
dif5M = (ema85m + ema205m) / 2
 
color5=ema85m > ema205m ? green : red
plot(dif5M,"dif",color5,linewidth=5)
ls5 = ema85m > ema205m ? 1 : 0
alert1= ema85m > ema205m and ema85m[1] < ema205m[1] ? 1 : 0
islong5 = ema85m > ema205m ? 1 : 0
isshort5 = ema85m < ema205m ? 1 : 0

//15M EMA

htf_ma15Mema8 = ema(close, 8)
htf_ma15Mema20 = ema(close, 20)
ema815m=request.security(syminfo.tickerid, "15", htf_ma15Mema8)
ema2015m=request.security(syminfo.tickerid, "15", htf_ma15Mema20)
dif15M = (ema815m + ema2015m) / 2
 
color15=ema815m > ema2015m ? green : red
plot(dif15M,"dif",color15,linewidth=3)
ls15= ema815m > ema2015m ? 1 : 0
alert2= ema815m > ema2015m and ema815m[1] < ema2015m[1] ? 1 : 0
islong15 = ema815m > ema2015m ? 1 : 0
isshort15 = ema815m < ema2015m ? 1 : 0





//30M EMA
htf_ma30Mema8 = ema(close, 8)
htf_ma30Mema20 = ema(close, 20)
ema830m=request.security(syminfo.tickerid, "30", htf_ma30Mema8)
ema2030m=request.security(syminfo.tickerid, "30", htf_ma30Mema20)
dif30M = (ema830m + ema2030m) / 2
 
color30=ema830m > ema2030m ? green : red
ls30= ema830m > ema2030m ?1 : 0
islong30 = ema830m > ema2030m ? 1 : 0
isshort30 = ema830m < ema2030m ? 1 : 0



//60M EMA

htf_ma60Mema8 = ema(close, 8)
htf_ma60Mema20 = ema(close, 20)
ema860m=request.security(syminfo.tickerid, "60", htf_ma60Mema8)
ema2060m=request.security(syminfo.tickerid, "60", htf_ma60Mema20)
dif60M = (ema860m + ema2060m) / 2
 
color60=ema860m > ema2060m ? green : red
ls60= ema860m > ema2060m ?1 : 0

islong60 = ema860m > ema2060m ? 1 : 0
isshort60 = ema860m < ema2060m ? 1 : 0

plot(dif60M,"dif",color60,linewidth=3,transp=70)

islong = islong5 ==1 and islong15 ==1 and islong60 ==1 and year > 2017 ? 1 : 0
isshort = isshort5 ==1 and isshort15 ==1 and  isshort60 ==1 and year > 2017 ? 1 : 0


condition2l= 0 
condition2s = 0

c= alert1 == alert2  and alert1[1] != alert2[1] ? 1 : 0
alertcondition(c, title='Da tat sich was ', message='Da tat sich was!')

strategy.entry("enter long", strategy.long,1,when = islong ==1 and islong[1] == 0  ) 
strategy.entry("enter short", strategy.short,1,when = isshort == 1  and isshort [1] == 0) 
strategy.exit("close",profit=profitwert)
strategy.exit("close",profit=profitwert)





Más.