
La estrategia de comercio cuantitativo de doble MACD es una estrategia de comercio cuantitativo que utiliza el indicador MACD de dos marcos de tiempo. La estrategia abre más posiciones cuando el indicador MACD de la línea de circunferencia forma un tenedor de oro, y cierra las posiciones cuando el indicador MACD de la línea de sol se forma un tenedor de oro muerto.
La estrategia de comercio cuantitativo de MACD doble utiliza una combinación de indicadores MACD semanales y MACD diarios para juzgar las señales de entrada y salida.
En primer lugar, cuando el MACD de la semana en la línea MACD cruza la línea de señal, se genera una señal de compra, en ese momento se abre una posición más; y luego el MACD del día en la línea MACD en la línea MACD cruza la línea de señal y genera una señal de venta, en ese momento la posición está cerrada.
Cuando la posición está vacía, si la línea MACD del indicador MACD de Japón atraviesa nuevamente la línea de señal, se vuelve a abrir la posición. Es decir, el tenedor del indicador MACD de Japón se convierte en la condición para abrir la posición nuevamente.
Hay que tener en cuenta que el MACD diario se cancela antes de que el MACD semanal se cancele, pero se debe abrir una posición dentro de la ventana de negociación de la línea de la MACD semanal que está por encima de la línea de la señal.
La estrategia de comercio cuantitativo de doble MACD combina el análisis de doble marco de tiempo para filtrar eficazmente las señales falsas y mejorar la calidad de las señales. En concreto, tiene las siguientes ventajas:
El marco horario semanal ayuda a determinar las principales tendencias y evitar el comercio en contra.
El marco de tiempo diurno determina el momento de entrada y salida, lo que permite capturar oportunidades de comercio a corto plazo.
El mecanismo de bloqueo de la ventana de negociación evita que las posiciones se cierren con demasiada frecuencia debido a ajustes a corto plazo.
Los parámetros del indicador MACD son ajustables y se pueden optimizar en función de diferentes variedades y entornos de mercado.
La integración de las funciones de parada, deterioro y deterioro móvil permite controlar el riesgo de manera efectiva.
Las estrategias de comercio cuantitativo de doble MACD también presentan ciertos riesgos, que incluyen:
Los indicadores MACD son propensos a falsas señales y frecuentes cruces, que requieren la combinación de otros indicadores para su confirmación.
La tendencia principal en la evaluación del marco horario semanal-mensal podría cambiar y sería necesario detenerla en el momento oportuno.
Los parámetros necesitan ser optimizados y ajustados constantemente según las diferentes variedades y condiciones.
No se debe depender demasiado de los resultados de la revisión, ya que el disco duro puede diferir de la revisión.
Resolución de las mismas:
Utilizado en combinación con otros indicadores para construir un sistema de estrategias de optimización lógica.
Establezca un margen de pérdidas razonable para evitar más pérdidas que el máximo soportable.
Optimizar constantemente los parámetros para encontrar la mejor combinación de ellos.
Comienza con el mínimo capital real y verifica la estabilidad de la estrategia.
La estrategia de comercio cuantitativo de doble MACD tiene espacio para ser optimizada aún más:
Se pueden introducir otros indicadores, como líneas de Brin, KDJ, para construir estrategias de combinación de múltiples indicadores y mejorar la calidad de la señal.
Se puede combinar con indicadores de volumen de transacciones para evitar falsas rupturas que aumentan los precios pero no alcanzan el volumen de transacciones.
Se pueden utilizar métodos de aprendizaje automático para optimizar los parámetros y realizar ajustes dinámicos de los mismos.
Se pueden hacer más ajustes de riesgo para la estrategia, como la adición de métodos de alto nivel de pérdidas como el P/L.
Pruebas de ajuste y optimización de la estrategia para evitar problemas de ajuste excesivo.
Las estrategias de comercio cuantitativo de doble MACD integran análisis de doble marco de tiempo para determinar tendencias dominantes y secundarias para aprovechar las ventajas de sus respectivos indicadores. El espacio para la optimización de la estrategia es amplio, y se espera que la introducción de otros indicadores y el uso de aprendizaje automático para la optimización de parámetros y otros métodos mejoren aún más la eficacia de la estrategia. La verificación en vivo es un paso indispensable y una base importante para perfeccionar aún más la estrategia.
/*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)