
La estrategia es un sistema de promedios móviles basados en 4 SMMA (medias móviles suaves) de diferentes períodos y un indicador de EMA. Combina varias herramientas de análisis técnico de valores para formar una estrategia de negociación a través de la determinación de tendencias. La estrategia se aplica principalmente a los bonos de 15 minutos EURUSD de cuentas de alto nivel de apalancamiento para operaciones diarias.
La estrategia utiliza 4 parámetros diferentes SMMA ((3, 6, 9, 50) y una 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. La lógica de negociación específica es:
Cuando una media móvil de corto período (por ejemplo, SMMA de 3 períodos) atraviesa una media móvil de largo período (por ejemplo, EMA de 200 períodos), genera una señal de compra. Cuando una media móvil de corto período atraviesa una media móvil de largo período, genera una señal de venta. Así, se determina la dirección de la tendencia al juzgar la relación de ordenamiento de varias medias móviles.
Además, la estrategia establece un punto de parada para controlar el riesgo.
La estrategia tiene las siguientes ventajas:
La estructura de las medias móviles en varios niveles permite determinar la dirección de la tendencia y reducir las señales falsas.
El indicador SMMA filtra el ruido del mercado, mientras que el EMA detecta las tendencias de largo plazo.
La cuenta de alto nivel de apalancamiento es adecuada para aumentar los beneficios de las operaciones.
Se ha establecido un punto de parada y pérdida para controlar el riesgo.
Se optimizan las variedades de negociación (EURUSD) y el ciclo (minutos 15), lo que hace que sea más ventajoso.
La estrategia también tiene los siguientes riesgos:
El uso masivo de las medias móviles puede hacer que se pierda la oportunidad de una reversión a corto plazo.
El apalancamiento alto aumenta las pérdidas y también aumenta las ganancias.
Cuando las medias móviles producen señales, la tendencia a corto plazo puede haber cambiado.
El EURUSD puede fluctuar mucho y conllevar un mayor riesgo.
En respuesta a estos riesgos, se puede ajustar el coeficiente de apalancamiento adecuadamente, optimizar los parámetros de las medias móviles, introducir otros indicadores para determinar la reversión de la tendencia, etc.
Las principales direcciones de optimización de la estrategia son:
Evaluar el rendimiento de las diferentes variedades y ciclos para seleccionar los parámetros óptimos.
Prueba diferentes combinaciones de parámetros y cantidades de promedios móviles.
Aumentar el volumen de transacciones o el índice de fluctuación para determinar el punto de inflexión a corto plazo.
Ajuste dinámico para aumentar la amplitud de la parada de frenado.
Un punto de inflexión en la evaluación de los indicadores de la ENU
La estabilidad y la rentabilidad de las estrategias se pueden mejorar considerablemente a través de pruebas y optimizaciones multifacetadas.
La estrategia de media móvil integra las ventajas de los indicadores de media para formar un sólido sistema de determinación de tendencias. Optimiza las variedades y los períodos de negociación, lo que es ideal para el comercio de días de alto nivel. A través de ajustes de parámetros y pruebas de optimización, la estrategia puede ser una estrategia de negociación algorítmica 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)