Эта стратегия основана на золотом кресте и сигналах мертвого креста двойных скользящих средних линий ALMA, в сочетании с длинными и короткими сигналами индикатора MACD, для достижения автоматических длинных и коротких позиций. Стратегия подходит для временных рамок 4 часов и более, а тестовые данные BNB/USDT варьируются от 2017 года до настоящего времени, с процентной ставкой комиссии, установленной на уровне 0,03%.
Стратегия использует быстрые и медленные линии, построенные из ALMA для построения двойной скользящей средней. Длина быстрой линии составляет 20 и медленная линия - 40, причем оба принимают смещение 0,9 и стандартное отклонение 5. Когда быстрая линия пересекает медленную линию, генерируется длинный сигнал. Когда быстрая линия пересекает ниже медленной линии, генерируется короткий сигнал.
В то же время стратегия включает в себя сигнал гистограммы индикатора MACD. Только когда гистограмма MACD положительна (повышается), длинный сигнал действителен; только когда гистограмма MACD отрицательна (падает), короткий сигнал действителен.
Стратегия также устанавливает условия получения прибыли и остановки убытков.
Стратегия сочетает в себе суждение о тренде двойной скользящей средней и энергетическое суждение индикатора MACD, которое может эффективно фильтровать ложные сигналы и улучшать точность входа.
Данные обратного теста принимаются с 2017 года, охватывая несколько циклов конверсии быков и медведей. Стратегия по-прежнему хорошо работает в разные периоды. Это доказывает, что стратегия адаптируется как к линейным, так и к нелинейным характеристикам рынка.
Стратегия несет в себе следующие риски:
Решения:
Стратегия также может быть оптимизирована в следующих аспектах:
Стратегия успешно сочетает в себе суждение о тренде скользящих средних и вспомогательное суждение MACD и устанавливает разумные прибыли и остановки убытков, которые могут получить стабильную отдачу в различных рыночных условиях.
/*backtest start: 2023-11-04 00:00:00 end: 2023-12-04 00:00:00 period: 1h basePeriod: 15m 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/ // © exlux99 //@version=4 strategy(title = "Full Crypto Swing Strategy ALMA Cross", overlay = true, pyramiding=1,initial_capital = 1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03) //time condition fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2010, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2031, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate UseHAcandles = input(false, title="Use Heikin Ashi Candles in Algo Calculations") haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low //alma fast and slow src = haClose windowsize = input(title="Length Size Fast", type=input.integer, defval=20) windowsize2 = input(title="Length Size Slow", type=input.integer, defval=40) offset = input(title="Offset", type=input.float, defval=0.9, step=0.05) sigma = input(title="Sigma", type=input.float, defval=5) outfast=alma(src, windowsize, offset, sigma) outslow=alma(src, windowsize2, offset, sigma) //macd fast_length = input(title="Fast Length", type=input.integer, defval=6) slow_length = input(title="Slow Length", type=input.integer, defval=25) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) // Calculating fast_ma = ema(src, fast_length) slow_ma = ema(src, slow_length) macd = fast_ma - slow_ma signal = ema(macd, signal_length) hist = macd - signal long=crossover(outfast,outslow) and hist > hist[1] and time_cond short=crossunder(outfast,outslow) and hist < hist[1] and time_cond takeProfit_long=input(2.0, step=0.005) stopLoss_long=input(0.2, step=0.005) takeProfit_short=input(0.05, step=0.005) stopLoss_short=input(1.0, step=0.005) strategy.entry("long",1,when=long) strategy.entry("short",0,when=short) strategy.exit("short_tp/sl", "long", profit=close * takeProfit_long / syminfo.mintick, loss=close * stopLoss_long / syminfo.mintick, comment='LONG EXIT', alert_message = 'closeshort') strategy.exit("short_tp/sl", "short", profit=close * takeProfit_short / syminfo.mintick, loss=close * stopLoss_short / syminfo.mintick, comment='SHORT EXIT', alert_message = 'closeshort')