
A estratégia de negociação quantitativa dupla MACD é uma estratégia de negociação quantitativa que utiliza dois quadros de tempo MACD. A estratégia de negociação quantitativa.
A estratégia de negociação quantitativa de MACD dupla usa uma combinação de indicadores MACD semanais e MACD diários para julgar os sinais de entrada e saída.
Primeiro, quando o MACD da semana atravessa a linha de sinal, o MACD da semana produz um sinal de compra, e abre uma posição maior. Em seguida, quando o MACD do MACD do dia atravessa a linha de sinal, o MACD do dia produz um sinal de venda, e fecha a posição.
Quando a posição está vazia, se a linha MACD do indicador MACD do dia cruzar novamente a linha de sinal, a posição será reaberta. Ou seja, o garfo do indicador MACD do dia torna-se a condição para a reabertura da posição.
Note-se que a forca morta do MACD diário será liquidada, mas a reabertura será permitida apenas dentro da janela de negociação do MACD semanal, onde a linha MACD é superior à linha de sinal.
A estratégia de negociação quantitativa dupla MACD combina a análise de dois quadros de tempo para filtrar efetivamente os falsos sinais e melhorar a qualidade dos sinais. Em particular, há as seguintes vantagens principais:
Os quadros horários semanais ajudam a determinar as principais direções de tendência e a evitar a negociação de contrapartida.
O marco horário de um dia é usado para determinar o momento de entrada e saída, permitindo a captura de oportunidades de negociação de curto prazo.
O mecanismo de fechamento da janela de negociação permite evitar a abertura e liquidação excessivamente frequentes de posições devido a ajustes de curto prazo.
Os parâmetros do indicador MACD são ajustáveis e podem ser otimizados para diferentes variedades e condições de mercado.
A integração de funções de suspensão, travamento e travamento móvel permite o controle eficaz do risco.
A estratégia de negociação de quantidade dupla MACD também apresenta alguns riscos, incluindo:
Os indicadores MACD são propensos a falsos sinais e frequentes cruzamentos, e precisam ser confirmados por combinações de outros indicadores.
A principal tendência para o julgamento de quadros horários semanais e mensais pode virar de direção e precisará de uma paralisação oportuna.
Os parâmetros precisam ser constantemente otimizados e ajustados de acordo com as diferentes variedades e condições.
Não se pode depender exageradamente dos resultados da ressonância magnética, o disco rígido pode ser diferente da ressonância magnética.
Resolução:
Usado em combinação com outros indicadores, para construir um sistema de estratégias de otimização lógica.
Estabeleça um limite razoável para evitar perdas superiores ao máximo suportável.
Otimizar constantemente os parâmetros, procurando a melhor combinação de parâmetros.
Comece com o mínimo de capital real e verifique a estabilidade da estratégia.
A estratégia de negociação quantitativa de MACD duplo tem espaço para uma maior otimização:
Pode-se introduzir outros indicadores, como linhas de Brin e KDJ, para construir estratégias de combinação de vários indicadores e melhorar a qualidade do sinal.
A combinação de indicadores de volume de transação pode evitar falsas rupturas de preços mais elevados, mas com volume de transação insuficiente.
Pode-se utilizar métodos de aprendizagem de máquina para otimizar automaticamente os parâmetros, permitindo o ajuste dinâmico dos parâmetros.
Pode-se fazer ajustes adicionais de risco para a estratégia, como a adição de métodos avançados de stop loss, como a taxa de ganho-perda.
Teste de adequação da estratégia e ajuste de otimização, evitando problemas de sobre-adequação.
A estratégia de negociação quantitativa dupla MACD integra a análise de dois quadros de tempo para determinar as tendências principais e secundárias, a fim de aproveitar a vantagem de seus respectivos indicadores. Há muito espaço para otimização da estratégia, e é provável que a estratégia seja ainda mais eficaz através da introdução de outros indicadores e do uso de aprendizado de máquina para otimização de parâmetros. A verificação em campo é um passo essencial e é uma base importante para aperfeiçoar ainda mais a estratégia.
/*backtest
start: 2023-01-29 00:00:00
end: 2024-01-11 05:20:00
period: 1d
basePeriod: 1h
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/
// © maxits
// Long Position: Weekly Macd line crosses above Signal line
// [Trading Window Macd Line > Signal Line] (Weekly)
// Close Position: Daily Macd Line crosses above Daily Signal line.
// Re Entry Condition: Macd line crosses above Signal line only if [Trading Window MacdLine > Sgnal Line] (Weekly)
//@version=4
strategy("Dual MACD Strategy",
shorttitle="Dual Macd Tester",
overlay=false,
initial_capital=1000,
default_qty_value=20,
default_qty_type=strategy.percent_of_equity,
commission_value=0.1,
pyramiding=0)
// Define user inputs
i_time = input(defval = timestamp("01 May 2018 13:30 +0000"), title = "Start Time", type = input.time) // Starting time for Backtesting
f_time = input(defval = timestamp("9 Sep 2021 13:30 +0000"), title = "Finish Time", type = input.time) // Finishing time for Backtesting
sep1 = input(false, title="------ Profit & Loss ------")
enable_TP = input(true, title="Enable Just a Profit Level?")
enable_SL = input(false, title="Enable Just a S.Loss Level?")
enable_TS = input(true, title=" Enable Only Trailing Stop")
long_TP_Input = input(30.0, title='Take Profit %', type=input.float, minval=0)/100
long_SL_Input = input(1.0, title='Stop Loss %', type=input.float, minval=0)/100
long_TS_Input = input(5.0, title='Trailing Stop %', type=input.float, minval=0)/100
cl_low_Input = input(low, title="Trailing Stop Source")
long_TP = strategy.position_avg_price * (1 + long_TP_Input)
long_SL = strategy.position_avg_price * (1 - long_SL_Input)
long_TS = cl_low_Input * (1 - long_TS_Input)
sep2 = input(false, title="------ Macd Properties ------")
d_res = input(title="Short Term TimeFrame", type=input.resolution, defval="D") // Daily Time Frame
w_res = input(title="Long Term TimeFrame", type=input.resolution, defval="W") // Weekly Time Frame
src = input(close, title="Source") // Indicator Price Source
fast_len = input(title="Fast Length", type=input.integer, defval=12) // Fast MA Length
slow_len = input(title="Slow Length", type=input.integer, defval=26) // Slow MA Length
sign_len = input(title="Sign Length", type=input.integer, defval=9) // Sign MA Length
d_w = input(title="Daily or Weekly?", type=input.bool, defval=true) // Plot Daily or Weekly MACD
// Color Plot for Macd
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
// BG Color
bg_color = color.rgb(127, 232, 34, 75)
// Daily Macd
[d_macdLine, d_singleLine, d_histLine] = security(syminfo.tickerid, d_res, macd(src, fast_len, slow_len, sign_len)) // Funcion Security para poder usar correcta resolución
plot(d_w ? d_macdLine : na, color=color.blue)
plot(d_w ? d_singleLine : na, color=color.orange)
plot(d_w ? d_histLine : na, style=plot.style_columns,
color=(d_histLine>=0 ? (d_histLine[1] < d_histLine ? col_grow_above : col_fall_above) :
(d_histLine[1] < d_histLine ? col_grow_below : col_fall_below)))
// Weekly Macd
[w_macdLine, w_singleLine, w_histLine] = security(syminfo.tickerid, w_res, macd(src, fast_len, slow_len, sign_len)) // Funcion Security para poder usar correcta resolución
plot(d_w ? na : w_macdLine, color=color.blue)
plot(d_w ? na : w_singleLine, color=color.orange)
plot(d_w ? na : w_histLine, style=plot.style_columns,
color=(w_histLine>=0 ? (w_histLine[1] < w_histLine ? col_grow_above : col_fall_above) :
(w_histLine[1] < w_histLine ? col_grow_below : col_fall_below)))
///////////////////////////////// Entry Conditions
inTrade = strategy.position_size != 0 // Posición abierta
notInTrade = strategy.position_size == 0 // Posición Cerrada
start_time = true
trading_window = w_macdLine > w_singleLine // Weekly Macd Signal enables a trading window
bgcolor(trading_window ? bg_color : na)
buy_cond = crossover (w_macdLine, w_singleLine)
sell_cond = crossunder(d_macdLine, d_singleLine)
re_entry_cond = crossover (d_macdLine, d_singleLine) and trading_window
// Entry Exit Conditions
trailing_stop = 0.0 // Code for calculating Long Positions Trailing Stop Loss
trailing_stop := if (strategy.position_size != 0)
stopValue = long_TS
max(trailing_stop[1], stopValue)
else
0
if (buy_cond and notInTrade and start_time)
strategy.entry(id="First Entry", long=strategy.long, comment="First Long")
if (sell_cond and inTrade)
strategy.close(id="First Entry", comment="Close First Long")
if (re_entry_cond and notInTrade and start_time)
strategy.entry(id="Further Entry", long=strategy.long, comment="Further Entry")
if (sell_cond and inTrade)
strategy.close(id="Further Entry", comment="Close First Long")
if enable_TP
if (enable_TS and not enable_SL)
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP, stop = trailing_stop)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP, stop = trailing_stop)
else
if (enable_SL and not enable_TS)
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP, stop = long_SL)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP, stop = long_SL)
else
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP)
else
if not enable_TP
if (enable_TS and not enable_SL)
strategy.exit("Long TP & TS FiEn", "First Entry", stop = trailing_stop)
strategy.exit("Long TP & TS FuEn", "Further Entry", stop = trailing_stop)
else
if (enable_SL and not enable_TS)
strategy.exit("Long TP & TS FiEn", "First Entry", stop = long_SL)
strategy.exit("Long TP & TS FuEn", "Further Entry", stop = long_SL)
plot(enable_TP ? long_TP : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(enable_SL ? long_SL : na, title="SL Level", color=color.red, style=plot.style_linebr, linewidth=2)
plot(enable_TS and trailing_stop ? trailing_stop : na, title="TS Level", color=color.red, style=plot.style_linebr, linewidth=2)