Esta estrategia es un sistema de promedio móvil basado en 4 SMMA (Smoothed Moving Average) con diferentes períodos y 1 indicador EMA. Combina múltiples herramientas de análisis técnico para formar una estrategia de negociación a través del juicio de tendencia. Esta estrategia es principalmente adecuada para el comercio intradiario de bonos de 15 minutos EURUSD de alto apalancamiento.
La estrategia utiliza 4 SMMA con diferentes parámetros (3, 6, 9, 50) y 1 EMA (200) para construir un sistema de promedios móviles de varios niveles. El indicador SMMA puede filtrar eficazmente el ruido del mercado y determinar la dirección de la tendencia. El indicador EMA detecta tendencias a largo plazo.
Cuando el promedio móvil a corto plazo (como SMMA de 3 períodos) cruza por encima del promedio móvil a largo plazo (como EMA de 200 períodos), se genera una señal de compra. Cuando el promedio móvil a corto plazo cruza por debajo del promedio móvil a largo plazo, se genera una señal de venta. Al juzgar la disposición de múltiples promedios móviles, se determina la dirección de la tendencia.
Además, la estrategia también establece puntos de stop-profit y stop-loss para controlar los riesgos.
La estrategia tiene las siguientes ventajas:
La estructura de la media móvil de varios niveles puede determinar eficazmente la dirección de la tendencia y reducir las señales falsas.
El indicador SMMA filtra eficazmente el ruido del mercado y el indicador EMA detecta tendencias a largo plazo.
Es adecuado para cuentas de alto apalancamiento para amplificar las ganancias comerciales.
Los puntos de detención de ganancias y de detención de pérdidas se establecen para controlar eficazmente los riesgos.
Optimiza las variedades de negociación (EURUSD) y los ciclos (15 minutos) para que sea más ventajoso.
La estrategia también presenta los siguientes riesgos:
La gran cantidad de medias móviles puede perder oportunidades de inversión a corto plazo.
El alto apalancamiento amplifica las pérdidas mientras amplifica las ganancias.
Cuando el promedio móvil genera una señal, la tendencia a corto plazo puede haberse invertido ya.
El tipo de cambio EURUSD puede experimentar violentas fluctuaciones, lo que conlleva mayores riesgos.
En respuesta a estos riesgos, podemos ajustar adecuadamente la relación de apalancamiento, optimizar los parámetros de la media móvil, introducir otros indicadores para juzgar la inversión de tendencia, etc. para la optimización.
Las principales direcciones de optimización de esta estrategia incluyen:
Evaluar el rendimiento de las diferentes variedades y ciclos y seleccionar los parámetros óptimos.
Prueba diferentes combinaciones y cantidades de medias móviles.
Aumentar los indicadores de volumen o volatilidad para determinar los puntos de inversión a corto plazo.
Aumentar el ajuste dinámico del intervalo de stop profit y stop loss.
Añadir el indicador ENU para determinar el punto de inversión.
A través de pruebas y optimización multifacéticas, la estabilidad y rentabilidad de la estrategia pueden mejorarse en gran medida.
Esta estrategia de promedio móvil integra las ventajas de los indicadores de promedio móvil para formar un sistema de juicio de tendencia robusto. Optimiza las variedades y ciclos de negociación y es muy adecuado para el comercio intradiario de alto apalancamiento. A través del ajuste de parámetros y las pruebas de optimización, esta estrategia puede convertirse en una estrategia de negociación de algoritmos eficiente y confiable.
/*backtest start: 2023-10-24 00:00:00 end: 2023-11-23 00:00:00 period: 1h 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/ // © SoftKill21 //@version=4 strategy("Money maker EURUSD 15min" ) fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2000, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) len = input(3, minval=1, title="Length") src = input(hl2, title="Source") smma = 0.0 sma1 = sma(src, len) smma := na(smma[1]) ? sma1 : (smma[1] * (len - 1) + src) / len len2 = input(6, minval=1, title="Length") src2 = input(hl2, title="Source") smma2 = 0.0 sma2 = sma(src2, len2) smma2 := na(smma2[1]) ? sma2 : (smma2[1] * (len2 - 1) + src2) / len2 len3 = input(9, minval=1, title="Length") src3 = input(hl2, title="Source") smma3 = 0.0 sma3 = sma(src3, len3) smma3 := na(smma3[1]) ? sma3 : (smma3[1] * (len3 - 1) + src3) / len3 len4 = input(50, minval=1, title="Length") src4 = input(close, title="Source") smma4 = 0.0 sma4 = sma(src4, len4) smma4 := na(smma4[1]) ? sma4 : (smma4[1] * (len4 - 1) + src4) / len4 len5 = input(200, minval=1, title="Length") src5 = input(close, title="Source") out5 = ema(src5, len5) timeinrange(res, sess) => time(res, sess) != 0 london=timeinrange(timeframe.period, "0300-1045") londonEntry=timeinrange(timeframe.period, "0300-0845") extraEntry =timeinrange(timeframe.period, "0745-1030") time_cond = true //time_cond2 = time >= startDate and time <= finishDate and extraEntry // longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond //longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond2 //shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond2 //longCond2 = crossover(close,out5) and crossover(close,smma4) and crossover(close,smma3) and crossover(close,smma2) and crossover(close,smma) and time_cond //shortCond2 = crossunder(close,out5) and crossunder(close,smma4) and crossunder(close,smma3) and crossunder(close,smma2) and crossunder(close,smma) and time_cond tp=input(300,title="tp") sl=input(300,title="sl") strategy.initial_capital = 50000 //MONEY MANAGEMENT-------------------------------------------------------------- balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(1,type=input.float,title="Risk %")/100 //risk % per trade //Calculate the size of the next trade temp01 = balance * risk //Risk in USD temp02 = temp01/sl //Risk in lots temp03 = temp02*100000 //Convert to contracts size = temp03 - temp03%1000 //Normalize to 1000s (Trade size) if(size < 1000) size := 1000 //Set min. lot size dataL = (close-out5)*100000 dataS = (out5-close)*100000 minDistanceL = (smma4 - out5)*100000 minDistanceS= (out5 - smma4)*100000 strategy.entry("long",1,1,when=longCond ) strategy.exit("closelong","long", profit=tp,loss=sl) strategy.entry("short",0,1,when=shortCond ) strategy.exit("closeshort","short", profit=tp,loss=sl) strategy.close_all(when = not london, comment="london finish") //strategy.close_all(when = not extraEntry, comment="london finish") // maxEntry=input(2,title="max entries") // strategy.risk.max_intraday_filled_orders(maxEntry)