Estratégia do sistema das médias móveis sólidas

Autora:ChaoZhang, Data: 2023-11-24 15:11:18
Tags:

img

Resumo

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.

Princípio da estratégia

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.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. 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.

  2. O indicador SMMA filtra eficazmente o ruído do mercado e o indicador EMA detecta tendências a longo prazo.

  3. É adequado para contas de alta alavancagem para amplificar os lucros de negociação.

  4. Os pontos de stop-profit e stop-loss são definidos para controlar eficazmente os riscos.

  5. Otimiza variedades de negociação (EURUSD) e ciclos (15 minutos) para torná-lo mais vantajoso.

Análise de riscos

A estratégia apresenta igualmente os seguintes riscos:

  1. A grande quantidade de médias móveis pode perder oportunidades de reversão a curto prazo.

  2. A alavancagem elevada amplifica as perdas enquanto amplifica os lucros.

  3. Quando a média móvel gera um sinal, a tendência a curto prazo pode já ter-se invertido.

  4. 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.

Orientações de otimização

As principais direcções de otimização desta estratégia incluem:

  1. Avaliar o desempenho das diferentes variedades e ciclos e selecionar os parâmetros ideais.

  2. Teste diferentes combinações e quantidades de médias móveis.

  3. Aumentar os indicadores de volume ou volatilidade para determinar pontos de reversão a curto prazo.

  4. Aumentar o ajustamento dinâmico do intervalo de stop profit e stop loss.

  5. 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.

Resumo

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)



Mais.