Estratégia MACD multi-temporal optimizada em tempo e espaço

Autora:ChaoZhang, Data: 2024-01-29
Tags:

img

Resumo

Esta estratégia otimiza os parâmetros do indicador MACD, combina-se com a média móvel, a ação do preço e os tempos de negociação específicos para alcançar uma estratégia de negociação forex de alta taxa de ganho.

Estratégia lógica

  1. Utilize 3 linhas K para julgar a tendência dos preços. Se os preços de encerramento das últimas 3 linhas K forem superiores aos preços de abertura, é julgado como uma tendência ascendente; se os preços de encerramento das últimas 3 linhas K forem inferiores aos preços de abertura, é julgado como uma tendência descendente.

  2. Calcule a linha rápida, linha lenta e diferença MACD. O parâmetro da linha rápida é 12, o parâmetro da linha lenta é 26, e o parâmetro da linha de sinal é 9.

  3. O horário de negociação é definido para 09:00-09:15 todos os dias.

    • Ir longo quando a tendência de alta coincide com o cruzamento da diferença MACD acima de 0
    • Caso a tendência de baixa coincida com o cruzamento da diferença MACD abaixo de 0
  4. O take profit é definido em 0,3 pips, e o stop loss é definido em 100 pips.

  5. Fechar todas as posições durante as 21:00-21:15.

Vantagens da estratégia

  1. Utilização de uma combinação de indicadores de vários prazos para avaliar de forma abrangente a direção da tendência e melhorar a precisão das decisões.

  2. Otimizar o tempo de negociação para evitar períodos de alta volatilidade do mercado, reduzindo o risco desnecessário de stop loss.

  3. Estabelecer rácios razoáveis para obter lucro e parar a perda para maximizar o bloqueio do lucro e evitar a ampliação da perda.

  4. Em geral, a estratégia tem uma taxa de ganhos muito elevada e é adequada para negociações frequentes de curto prazo.

Riscos da Estratégia

  1. O horário de negociação é relativamente fixo, pode perder oportunidades de negociação se não puder entrar no mercado a tempo.

  2. O indicador MACD é propenso a sinais enganosos.

  3. Os parâmetros devem ser ajustados de acordo com diferentes produtos.

  4. O risco global é pequeno, mas posições excessivamente grandes sob alta alavancagem podem levar a perdas enormes.

Orientações para a otimização da estratégia

  1. Combinar com outros indicadores para determinar a tendência, evitando sinais enganosos do MACD. Por exemplo, combinar Bandas de Bollinger, RSI etc.

  2. Otimizar os rácios take profit/stop loss através do cálculo de parâmetros ideais a partir dos dados do backtest.

  3. Aumentar as variedades de comércio aplicáveis à estratégia, avaliar os efeitos do ajuste dos parâmetros em diferentes produtos.

  4. Introduzir algoritmos de aprendizagem automática para selecionar os parâmetros ideais de forma dinâmica com base em condições de mercado variáveis.

Conclusão

Em geral, esta estratégia é bem adequada para os traders novatos. A lógica é clara, o espaço de otimização é grande e os riscos são controláveis. Ao personalizar os tempos de abertura e definir rácios de perda de lucro razoáveis, altos retornos podem ser alcançados. Outras otimizações podem ser feitas para ajustar dinamicamente os parâmetros e se adaptar a ambientes de mercado mais complexos.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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/
// © exlux99

//@version=4
strategy("Very high win rate strategy", overlay=true)


//

fast_length =12
slow_length= 26
src = close
signal_length = 9
sma_source = false
sma_signal = false

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//ma

len=10
srca = input(close, title="Source")
out = hma(srca, len)

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)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, 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)
time_cond = true


timeinrange(res, sess) => time(res, sess) != 0

// = input('0900-0915', type=input.session, title="My Defined Hours")
myspecifictradingtimes = '0900-0915'
exittime = '2100-2115'

optionmacd=true


entrytime = time(timeframe.period, myspecifictradingtimes) != 0
exit = time(timeframe.period, exittime) != 0     

if(time_cond and optionmacd )
    if(close > open and close[1] > open[1] and close[2] > open[2] and entrytime  and crossover(hist,0))
        strategy.entry("long",1)
    if(close< open and close[1] < open[1] and close[2] < open[2] and entrytime and crossunder(hist,0))
        strategy.entry("short",0)      


tp = input(0.0003, title="tp")
//tp = 0.0003
sl = input(1.0 , title="sl")
//sl = 1.0
strategy.exit("closelong", "long" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closelong")
strategy.exit("closeshort", "short" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closeshort")


Mais.