Esta é uma estratégia de negociação quantitativa composta baseada no indicador MACD. Ele combina múltiplos indicadores como MACD e KDJ para gerar sinais de negociação através da combinação de indicadores.
O indicador central desta estratégia é o MACD. O MACD significa Moving Average Convergence Divergence, que é um indicador de tendência. Ele consiste em uma média móvel rápida (EMA) e uma média móvel lenta (EMA). Os parâmetros padrão são 12 para a linha rápida e 26 para a linha lenta. A estratégia calcula a diferença entre as duas linhas EMA, chamada DIF. Em seguida, uma EMA de 9 dias é calculada no DIF para obter o indicador DEA. Quando o DIF cruza acima do DEA, um sinal de compra é gerado. Quando cruza abaixo, um sinal de venda é gerado.
A estratégia também incorpora o indicador KDJ. O indicador KDJ inclui o valor K, o valor D e o valor J. Entre eles, o valor K refere-se ao valor aleatório, o valor D é a média móvel do valor K e o valor J refere-se ao valor determinístico. O indicador KDJ reflete os níveis de sobrecompra e sobrevenda no mercado. Quando o valor J é maior que 100, representa condições de sobrecompra. Quando menor que 10, representa condições de sobrevenda. A estratégia combina o indicador KDJ para evitar gerar sinais errados em pontos de virada do mercado.
A estratégia combina múltiplos indicadores, como MACD e KDJ, que podem efetivamente filtrar o ruído do mercado e identificar direções de tendência. O indicador MACD pode capturar mudanças de preço de curto prazo em tempo hábil, enquanto o indicador KDJ pode confirmar tendências de médio e longo prazo. A combinação dos dois pode equilibrar a busca de agilidade e estabilidade.
Além disso, a estratégia incorpora um selector de intervalos de tempo, o que proporciona uma maior flexibilidade na avaliação do desempenho da estratégia.
Quando o mercado flutua por um período prolongado, o MACD terá vários sinais falsos. Neste ponto, podemos ajustar adequadamente os parâmetros das linhas EMA para filtrar algum ruído.
Podemos testar vários grupos de parâmetros e selecionar uma combinação de parâmetros mais estável.
A selecção inadequada do prazo de backtest irá sobreestimar ou subestimar a rentabilidade da estratégia.
A estratégia pode ser otimizada nos seguintes aspectos:
Quando o preço desencadear a linha de stop loss, ele forçará uma saída da posição para fins de stop loss.
Incorporar mais filtros de indicadores, combinando indicadores como RSI e Bandas de Bollinger para melhorar a precisão do sinal.
Otimizar os parâmetros do indicador.
Usar técnicas de aprendizagem de máquina para otimizar automaticamente. Usar redes neurais para treinamento de parâmetros e otimização.
Esta é uma estratégia quantitativa típica que segue principalmente a tendência, complementada por controle de sobrecompra e sobrevenda. Combina as vantagens de vários indicadores e equilibra efetivamente a estabilidade e sensibilidade. Através de otimização e ajuste contínuos, a aplicabilidade da estratégia pode ser expandida para obter lucros constantes a longo prazo.
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="New Renaissance", shorttitle="New Renaissance", overlay=true,initial_capital=10000) source = close fastlength=input(12, minval=1) slowlength=input(26,minval=1) signallength=input(9,minval=1) // === Defining the MACD oscillator fastMA=ema(source,fastlength) slowMA=ema(source,slowlength) MACD=fastMA-slowMA signal=sma(MACD,signallength) delta=MACD-signal // === Buy and Sell Signals === buy=crossover(MACD, signal) sell=crossunder(MACD, signal) // === INPUT BACKTEST RANGE === fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2018, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 12, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 31, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2020, title = "Thru Year", type = input.integer, minval = 1970) // === INPUT SHOW PLOT === showDate = input(defval = true, title = "Show Date Range", type = input.bool) // === FUNCTION EXAMPLE === start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // === EXECUTION === strategy.entry("L", strategy.long, when = window() and buy) // enter long when "within window of time" AND crossover strategy.close("L", when = window() and sell) // exit long when "within window of time" AND crossunder