
Эта стратегия использует индикатор движущихся средних ((MACD) для построения многооборотного сигнала, для совершения реверсивной торговли в условиях хорошей тенденции, для получения прибыли путем динамической установки выездной позиции.
Эта стратегия основана на показателях MACD, таких как многосигнальный золотое сечение, пустое сечение и мертвое сечение. В частности, при переходе MACD-линии вверх по сигнальной линии происходит многосигнальный золотое сечение, а при переходе MACD-линии вверх по сигнальной линии происходит пустое сечение.
При появлении сигнала золотого форка, если цена закрытия выше средней линии EMA, делается больше; при появлении сигнала мертвого форка, если цена закрытия ниже средней линии EMA, делается пусто. Это может гарантировать обратную торговлю при большом тренде.
После входа, стратегия использует стоп-пост и стоп-пост для динамического стоп-стоп-поста. В частности, несколько стоп-постов установлены в качестве входных цен(1-максимальная убыль); остановка позиции устанавливается как цена входа(1+TARGET_STOP_RATIO*Максимальная убыль) ⋅ пустой параметр обратный ⋅ где максимальная убыль динамически рассчитывается, указывая на процент падения от ценового отсчета swing low; TARGET_STOP_RATIO считает по умолчанию 2, указывая на убыточность 2 ⋅
Преимущество такой настройки заключается в том, что она позволяет динамически корректировать коэффициент убытков и стоп-пост в зависимости от рыночных колебаний. Быстрое остановка на выезде при значительных колебаниях и отслеживание стоп-поста при небольших колебаниях.
Используя индикатор MACD для построения многополосного сигнала, можно эффективно определить, когда цена изменится.
В сочетании с средней линией EMA используйте фильтр, чтобы выбрать верхний тренд и избежать обратной торговли.
Динамическая система управления, которая позволяет в режиме реального времени регулировать коэффициент прибыли и убытков, а также контролировать риски для достижения высокой прибыли.
С учетом рыночных колебаний, быстрые выходные сокращают время запуска рынка, что лучше подходит для занятых инвесторов.
MACD часто вызывает ложные сигналы на рынках с горизонтальной сборкой. Решение заключается в добавлении равной линии в качестве фильтра, чтобы избежать обратной торговли.
В экстремально сильно волатильных рынках, DYNAMIC STOP может привести к слишком мягким остановкам, но в большинстве сценариев работает лучше. В случае экстремальных ситуаций, можно рассмотреть фиксированную прибыльность.
Пространство для получения прибыли ограничено, и для достижения прибыли необходимо часто торговать. Это требует от инвестора определенной психологической выносливости и времени. Если у вас нет свободного времени, вы можете рассмотреть возможность адаптироваться к высоким циклам.
В зависимости от особенностей конкретной породы, корректировать параметры MACD, оптимизировать эффективность торговли золотыми винтами.
Поиск лучших фильтров, используя различные скользящие средние как индикаторы для определения тенденций.
Тестирование методов расчета максимального падения, оптимизация стратегии стоп-стоп.
Добавление других критериев, таких как изменение объема торгов, волатильность и т.д., повышает качество сигнала.
Попытки алгоритмов машинного обучения, чтобы выработать больше характеристик, создать динамическую многофакторную модель, чтобы достичь более интеллектуальных стоп-стоп.
Эта стратегия в целом имеет сильную практическую полезность. С использованием MACD в качестве основного торгового сигнала, добавление трендового суждения и динамического контроля за выходом из поля двух вспомогательных модулей может значительно повысить эффективность торговли MACD. Стоп-стоп-лосс является ключевым направлением оптимизации стратегии, в этой области было проведено множество инноваций, которые заслуживают дальнейшего изучения и применения.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00: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/
// © maxencetajet
//@version=5
strategy("MACD Strategy", overlay=true, initial_capital=1000, slippage=25)
src = input(title="Source", defval=close)
target_stop_ratio = input.float(title='Risk/Reward', defval=2, minval=0.5, maxval=100)
risk = input.float(2, title="Risk per Trade %")
riskt = risk / 100 + 1
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("5 July 2022"),
title="End Date", group="Backtest Time Period",
tooltip="This end date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
inTradeWindow = true
emaV = input.int(200, title="Length", group="EMA")
swingHighV = input.int(7, title="Swing High", group="number of past candles")
swingLowV = input.int(7, title="Swing Low", group="number of past candles")
ema = ta.ema(src, emaV)
fast_length = input(title="Fast Length", defval=12, group="MACD")
slow_length = input(title="Slow Length", defval=26, group="MACD")
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
longcondition = close > ema and ta.crossover(macd, signal) and macd < 0
shortcondition = close < ema and ta.crossunder(macd, signal) and macd > 0
float risk_long = na
float risk_short = na
float stopLoss = na
float takeProfit = na
float entry_price = na
risk_long := risk_long[1]
risk_short := risk_short[1]
swingHigh = ta.highest(high, swingHighV)
swingLow = ta.lowest(low, swingLowV)
lotB = (strategy.equity*riskt-strategy.equity)/(close - swingLow)
lotS = (strategy.equity*riskt-strategy.equity)/(swingHigh - close)
if strategy.position_size == 0 and longcondition and inTradeWindow
risk_long := (close - swingLow) / close
strategy.entry("long", strategy.long, qty=lotB)
if strategy.position_size == 0 and shortcondition and inTradeWindow
risk_short := (swingHigh - close) / close
strategy.entry("short", strategy.short, qty=lotS)
if strategy.position_size > 0
stopLoss := strategy.position_avg_price * (1 - risk_long)
takeProfit := strategy.position_avg_price * (1 + target_stop_ratio * risk_long)
entry_price := strategy.position_avg_price
strategy.exit("long exit", "long", stop = stopLoss, limit = takeProfit)
if strategy.position_size < 0
stopLoss := strategy.position_avg_price * (1 + risk_short)
takeProfit := strategy.position_avg_price * (1 - target_stop_ratio * risk_short)
entry_price := strategy.position_avg_price
strategy.exit("short exit", "short", stop = stopLoss, limit = takeProfit)
plot(ema, color=color.white, linewidth=2, title="EMA")
p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
p_tp = plot(takeProfit, color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr, title='takeProfit')
fill(p_sl, p_ep, color.new(color.red, transp=85))
fill(p_tp, p_ep, color.new(color.green, transp=85))