Estratégia de previsão do caminho futuro da MacD

Autora:ChaoZhang, Data: 2023-12-13 17:21:44
Tags:

img

Resumo

A ideia central desta estratégia é prever as tendências de preços, analisando a tendência futura do indicador MacD. A estratégia aproveita ao máximo os sinais de negociação gerados pelos cruzamentos das médias móveis rápidas e lentas que compõem o indicador MacD.

Princípio da estratégia

  1. Calcular a diferença (valor histórico) do indicador MacD para determinar a subida e a descida da linha MacD e da linha de sinal.
  2. Utilize o valor futuro do indicador MacD dentro de um período de tempo de 4 horas, definindo opções de compra para julgar a tendência futura do indicador MacD e prever as tendências dos preços.
  3. O preço de venda é o preço de venda de um produto ou serviço que se encontra na posição de mercado, ou seja, o preço de venda de um produto ou serviço.
  4. A estratégia combina os estilos de negociação de tendência e inversão de tendência, capturando tendências e também aproveitando pontos de reversão de tendência.

Análise das vantagens

  1. A vantagem de utilizar o indicador MacD para avaliar as tendências do mercado é que pode filtrar eficazmente as consolidações e capturar as tendências de longo prazo.
  2. Com a ajuda das previsões das tendências futuras do indicador MacD, os pontos de viragem dos preços podem ser identificados precocemente para melhorar a capacidade prospectiva da estratégia.
  3. A integração de ambos os estilos de negociação de tendência e inversão de tendência permite a reversão oportuna da posição durante o rastreamento de tendências para obter maiores retornos.
  4. Os parâmetros de estratégia ajustáveis permitem aos utilizadores otimizar com base em diferentes prazos e ambientes de mercado para melhorar a estabilidade da estratégia.

Análise de riscos

  1. Confiar nas previsões da tendência futura do indicador MacD pode levar a operações fracassadas se as previsões forem imprecisas.
  2. A configuração inadequada do intervalo de stop loss também afetará o desempenho da estratégia.
  3. O atraso do indicador MacD pode fazer com que se percam oportunidades de reversões rápidas dos preços.
  4. É necessário monitorizar o impacto dos custos de transacção.

Orientações de otimização

  1. Incorporar outros indicadores de previsão para reduzir a dependência de um único indicador MacD e melhorar a precisão da previsão, como o exame das alterações no volume de negociação.
  2. Adicionar algoritmos de aprendizagem de máquina, treinar modelos para prever tendências futuras do indicador MacD.
  3. Otimizar as configurações dos parâmetros para encontrar as melhores combinações de parâmetros.
  4. Diferentes ambientes de mercado se adequam a diferentes configurações de parâmetros, um sistema adaptativo pode ser adicionado para otimizar automaticamente os parâmetros.

Conclusão

Ao mesmo tempo em que dá pleno uso à vantagem do indicador MacD de determinar tendências, esta estratégia também incorpora previsões das tendências futuras do indicador. Com base na captura de tendências, também captura pontos críticos. Em comparação com a simples perseguição de tendências, esta estratégia tem maior previsão e potencial de lucro.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe
strategy(title="MacD (Future Known or Unknown) Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//OPTIONAL:: Allow only entries in the long or short position
allowOnlyLong = input(title="Allow position ONLY in LONG",type=input.bool, defval=false)
allowOnlyShort = input(title="Allow position ONLY in SHORT",type=input.bool, defval=false)


strategy.risk.allow_entry_in(allowOnlyLong ? strategy.direction.long : allowOnlyShort ? strategy.direction.short : strategy.direction.all) // There will be no short entries, only exits from long.

// Create MacD inputs
fastLen = input(title="MacD Fast Length", type=input.integer, defval=12)
slowLen = input(title="MacD Slow Length", type=input.integer, defval=26)
sigLen  = input(title="MacD Signal Length", type=input.integer, defval=9)

// Get MACD values
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)
hist = macdLine - signalLine

useFuture = input(title="Use The Future?",type=input.bool,defval=true)

macDState(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_on)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

macDStateNonFuture(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_off)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"
// === INPUT BACKTEST RANGE END ===

//Get FUTURE or NON FUTURE data
macDState240=useFuture ? macDState("240") : macDStateNonFuture("240") //1 is green up, 2 if green down, 3 is red, 4 is red up

//Fill in the GAPS
if(macDState240==0)
    macDState240:=macDState240[1]

//Plot Positions
plot(close,color= macDState240==1 ? color.green : macDState240==2 ? color.purple : macDState240==3 ? color.red : color.yellow,linewidth=4,style=plot.style_histogram,transp=50)

if(useFuture)
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)
else
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))//If we are in a red macD trending downwards MacD or in a MacD getting out of Red going upward.
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)//If the state is going upwards from red but we are predicting back to red...
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)//If we are predicting the uptrend to end soon.


Mais.