Esta estratégia é um sistema de média móvel baseado em 4 SMMAs (Smoothed Moving Average) com diferentes períodos e 1 indicador EMA. Ele combina várias ferramentas de análise técnica para formar uma estratégia de negociação através do julgamento da tendência. Esta estratégia é principalmente adequada para negociação intradiária de títulos de 15 minutos EURUSD de alta alavancagem.
A estratégia usa 4 SMMAs com diferentes parâmetros (3, 6, 9, 50) e 1 EMA (200) para construir um sistema de média móvel de vários níveis. O indicador SMMA pode efetivamente filtrar o ruído do mercado e determinar a direção da tendência. O indicador EMA detecta tendências de longo prazo. A lógica específica de negociação é:
Quando a média móvel de curto período (como a SMMA de 3 períodos) cruza acima da média móvel de período mais longo (como a EMA de 200 períodos), um sinal de compra é gerado. Quando a média móvel de curto período cruza abaixo da média móvel de período mais longo, um sinal de venda é gerado. Ao julgar o arranjo de múltiplas médias móveis, a direção da tendência é determinada.
Além disso, a estratégia também estabelece pontos de stop profit e stop loss para controlar os riscos.
A estratégia apresenta as seguintes vantagens:
A estrutura da média móvel de vários níveis pode determinar eficazmente a direcção da tendência e reduzir os falsos sinais.
O indicador SMMA filtra eficazmente o ruído do mercado e o indicador EMA detecta tendências a longo prazo.
É adequado para contas de alta alavancagem para amplificar os lucros de negociação.
Os pontos de stop-profit e stop-loss são definidos para controlar eficazmente os riscos.
Otimiza variedades de negociação (EURUSD) e ciclos (15 minutos) para torná-lo mais vantajoso.
A estratégia apresenta igualmente os seguintes riscos:
A grande quantidade de médias móveis pode perder oportunidades de reversão a curto prazo.
A alavancagem elevada amplifica as perdas enquanto amplifica os lucros.
Quando a média móvel gera um sinal, a tendência a curto prazo pode já ter-se invertido.
A taxa de câmbio EURUSD pode sofrer violentas flutuações, o que implica riscos maiores.
Em resposta a estes riscos, podemos ajustar adequadamente o rácio de alavancagem, otimizar os parâmetros da média móvel, introduzir outros indicadores para julgar a inversão da tendência, etc. para otimização.
As principais direcções de otimização desta estratégia incluem:
Avaliar o desempenho das diferentes variedades e ciclos e selecionar os parâmetros ideais.
Teste diferentes combinações e quantidades de médias móveis.
Aumentar os indicadores de volume ou volatilidade para determinar pontos de reversão a curto prazo.
Aumentar o ajustamento dinâmico do intervalo de stop profit e stop loss.
Adicionar o indicador ENU para determinar o ponto de inversão.
Através de testes e otimização multifacetados, a estabilidade e a rentabilidade da estratégia podem ser muito melhoradas.
Esta estratégia de média móvel integra as vantagens dos indicadores de média móvel para formar um sistema de julgamento de tendência robusto. Otimiza as variedades e ciclos de negociação e é muito adequado para negociação intradiária de alta alavancagem. Através do ajuste de parâmetros e testes de otimização, esta estratégia pode se tornar uma estratégia de negociação de algoritmo eficiente e confiável.
/*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)