
Двойная стратегия количественного трейдинга MACD - это стратегия количественного трейдинга, реализуемая с использованием двух временных рамок MACD. Эта стратегия открывает позиции, когда круговой MACD-индикатор образует золотой форк, и закрывает позиции, когда солнечный MACD-индикатор образует мертвый форк.
Двойная стратегия количественного трейдинга MACD использует комбинацию недельных и дневных MACD-индикаторов для определения входных и выходных сигналов.
Во-первых, когда в неделю MACD-индикатор по MACD-линии проходит по сигнальной линии, создается сигнал покупать, в это время открывается позиция; затем в тот же день MACD-индикатор по MACD-линии проходит по сигнальной линии, в это время создается сигнал продавать.
Когда позиция пуста, если MACD-линия MACD-индиката вновь пересекает сигнальную линию, то снова открывается позиция. То есть золотой форк MACD-индиката вновь становится условием открытия позиции.
Следует отметить, что в случае закрытия позиции на мертвой точке MACD-индикатора на сутки, открытие позиции вновь разрешается только в том случае, если она находится в пределах торгового окна, где MACD-индикатор на неделе находится выше сигнальной линии.
Двойная стратегия количественной торговли MACD в сочетании с анализами двойных временных рамок позволяет эффективно отфильтровывать ложные сигналы и повышать качество сигналов. В частности, есть следующие преимущества:
Недельные временные рамки помогают определить направление основных тенденций и избежать обратной торговли.
Временные рамки определяют время входа и выхода, что позволяет своевременно уловить краткосрочные торговые возможности.
Механизм закрытия торгового окна позволяет избежать слишком частого открытия и ликвидации позиций из-за краткосрочных корректировок.
Параметры индикатора MACD регулируются и могут быть оптимизированы в зависимости от разных видов и рыночных условий.
Интегрированные функции остановки, остановки и подвижной остановки позволяют эффективно контролировать риск.
Существуют определенные риски, связанные с двумя стратегиями количественного трейдинга MACD, в основном:
MACD-индикаторы подвержены ложным сигналам и частому перекрестному обращению, что требует подтверждения в комбинации с другими индикаторами.
Основная тенденция в оценке временных рамок недель и месяцев может измениться, и необходимо своевременно остановить убытки.
Параметры требуют постоянной оптимизации и корректировки в зависимости от разных сортов и условий.
Нельзя чрезмерно полагаться на результаты обратной проверки, так как на диске могут быть различия.
Решение проблемы:
Используется в сочетании с другими параметрами для построения логически оптимизированной системы стратегий.
Устанавливайте разумные пределы стоп-лосса, чтобы избежать превышения максимально допустимых потерь.
Постоянно оптимизируйте параметры, чтобы найти оптимальную комбинацию.
Начиная с минимального капитала, проверяйте стабильность стратегии.
Однако, есть еще много возможностей для оптимизации стратегии количественного трейдинга с двумя MACD:
Можно ввести другие показатели, такие как линия буринга, KDJ, чтобы создать многопоказательную комбинационную стратегию и улучшить качество сигнала.
Вместе с показателями объема торгов можно избежать ложных прорывов, когда цены растут, но объем торгов недостаточен.
Можно использовать методы машинного обучения для автоматической оптимизации параметров и динамической корректировки параметров.
Дополнительные коррективы риска могут быть сделаны в зависимости от стратегии, например, добавление высокотехнологичных методов остановки убытков, таких как рентабельность.
Проверка совместимости стратегий и оптимизация корректировки, чтобы избежать проблем с совместимостью.
Двойная количественная торговая стратегия MACD объединяет анализ двух временных рамок для определения основных и второстепенных тенденций, чтобы использовать преимущества своих индикаторов. Существует большое пространство для оптимизации стратегии, и вполне вероятно, что эффективность стратегии будет улучшена путем введения других индикаторов и использования машинного обучения для оптимизации параметров.
/*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)