
Esta estrategia utiliza un indicador de promedio móvil combinado con varios marcos de tiempo para determinar la consistencia de la tendencia entre varios marcos de tiempo.
Esta estrategia construye señales de negociación utilizando promedios móviles de 8 y 20 periodos en cuatro marcos de tiempo de 5 minutos, 15 minutos, 30 minutos y 60 minutos. Se genera una señal de compra cuando se atraviesa una media móvil de 20 días sobre una media móvil de 8 días más corta; se genera una señal de venta cuando se atraviesa una media móvil de 20 días por debajo de una media móvil de 8 días.
La estrategia requiere que las señales de transacción de los intervalos de tiempo de 5, 15, 30 y 60 minutos sean consistentes para emitir órdenes de negociación. Es decir, una operación de compra o venta solo se realizará cuando las medias móviles de los cuatro intervalos de tiempo coincidan con las señales de compra o venta.
Después de entrar en una posición, la estrategia establece un parón con un punto de ventaja fijo en el parón, para realizar operaciones de escalping en el día.
Concretamente, la estrategia obtiene datos de promedios móviles en diferentes marcos de tiempo mediante la invocación de la función de seguridad. Calcula la diferencia entre los promedios de 8 y 20 días de 5 minutos, 15 minutos, 30 minutos y 60 minutos y traza la curva de diferencia.
Juzga las señales de compra y venta en función de si la curva de diferencia cruza o no el eje cero. Y establece varios indicadores de islong e isshort para registrar las señales de negociación en cada marco de tiempo. Finalmente, emite instrucciones de entrada y salida cuando los estados de islong e isshort cumplen con los requisitos.
Después de la entrada, la estrategia establece un parón de puntos fijos a través de la función strategy.exit para realizar la operación de scalping.
La estrategia tiene las siguientes ventajas:
El diseño de un marco de tiempo múltiple, mediante el juicio integral de los diferentes indicadores de ciclo, puede filtrar eficazmente los fraudes y reducir la frecuencia de las transacciones.
Las estrategias de scalping en el día, la optimización de los beneficios y la acumulación de pequeñas ganancias.
La estructura del código es clara, cada parte de la función es clara, fácil de entender y optimizar.
Las condiciones establecidas son razonables y permiten controlar eficazmente el riesgo de las transacciones.
La estrategia también tiene ciertos riesgos:
El diseño de múltiples marcos de tiempo puede filtrar parte del ruido, pero también puede pasar por alto algunos detalles que provocan cambios de tendencia que no son evidentes.
El scalping diurno implica operaciones frecuentes, por lo que es necesario tener en cuenta el control de los costos de las transacciones.
La fijación del punto de parada no es lo suficientemente flexible para adaptarse a los cambios en el mercado.
La dependencia de los indicadores para generar señales de comercio puede ser engañosa.
Esta estrategia puede ser optimizada en los siguientes aspectos:
Añadir más indicadores para diferentes períodos de tiempo, lo que hace que la señal sea más estable y confiable.
Optimización de la estrategia de paradas y configuración del punto de paradas en función de la dinámica ATR.
Se añaden condiciones adicionales para filtrar el momento de entrada, como el aumento del volumen de transacciones, la ruptura de los máximos históricos, etc.
Optimización de los parámetros periódicos de las medias móviles para encontrar la combinación óptima de parámetros.
Aumentar el uso de modelos de aprendizaje automático para evaluar la fiabilidad de las señales de los indicadores y evitar el arbitraje.
Esta estrategia en su conjunto es una estrategia típica de seguimiento de tendencias de múltiples marcos temporales, que obtiene ganancias mediante el uso de la estrategia de scalping en el día. La estrategia es clara, la estructura del código es razonable y merece ser probada y optimizada aún más.
/*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)