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.
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.
Las ventajas de esta estrategia incluyen:
El diseño de marcos de tiempo múltiples filtra el ruido y reduce la frecuencia del comercio.
El scalping intradiario con optimización de ganancias acumula pequeñas ganancias de manera constante.
Estructura de código clara, fácil de entender y optimizar.
Las condiciones razonables ayudan a controlar el riesgo.
Los riesgos potenciales de esta estrategia:
Los marcos de tiempo múltiples pueden pasar por alto cambios sutiles en la tendencia.
Las operaciones de scalping frecuentes aumentan los costos.
El objetivo de ganancia fija no es flexible.
Depende de los indicadores, se arriesga a ser engañado.
Optimizaciones posibles:
Agregue más marcos de tiempo para señales más robustas.
Objetivo dinámico de ganancia basado en ATR.
Filtros adicionales como el aumento de volumen o los extremos de la historia.
Optimizar los períodos de admisión para obtener los mejores parámetros.
Agregue aprendizaje automático para juzgar la confiabilidad de la señal.
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)