Двойная скользящая средняя, ​​количественная стратегия «Золотой крест» и «Мертвый крест»


Дата создания: 2023-12-05 10:24:34 Последнее изменение: 2023-12-05 10:24:34
Копировать: 0 Количество просмотров: 704
1
Подписаться
1619
Подписчики

Двойная скользящая средняя, ​​количественная стратегия «Золотой крест» и «Мертвый крест»

Обзор

Эта стратегия основана на сигнале золотой форки с двумя движущимися средними значениями ALMA, в сочетании с сигналом с большим количеством пустоты в MACD-индикаторе, для автоматического выполнения дополнительного пустоты. Стратегия применима к 4-часовому и более длительному периоду времени, тестовые данные BNB/USDT, период времени с 2017 года по настоящее время, установка комиссии на 0,03% .

Стратегический принцип

Стратегия построения двойных скользящих средних с использованием скоростной и медленной линий ALMA. Длина скоростной линии составляет 20, длина медленной линии - 40, при этом отклонение составляет 0,9 при стандартной погрешности 5. При прохождении скоростной линии через медленную линию генерируется многосигнал, а при прохождении скоростной линии через медленную линию - пустота.

В то же время, стратегия в сочетании с индикатором MACD сигнализирует о прямоугольной карте. Полноценный сигнал действует только тогда, когда прямоугольная карта MACD положительна (повышается); только тогда, когда прямоугольная карта MACD отрицательна (снижается).

Стратегия одновременно устанавливает условия стоп-стоп. Дополнительный стоп - 2 раза, стоп - 0,2 раза; открытый стоп - 0,05 раза, стоп - 1 раза.

Анализ преимуществ

Эта стратегия, в сочетании с трендовым суждением двойных движущихся средних и энергетическим суждением MACD, может эффективно отфильтровывать ложные сигналы и повышать точность входа в рынок. Установка стоп-лосса рациональна, максимально блокирует прибыль и предотвращает крупные потери.

С 2017 года, включая многочисленные бычьи и медленные переходы, стратегия продолжает хорошо работать в условиях межциклических условий. Это свидетельствует о том, что стратегия адаптирована к линейным и нелинейным характеристикам рынка.

Анализ рисков

В этой стратегии есть следующие риски:

  1. Двойная скользящая средняя сама по себе задерживается и может упустить короткую линию.
  2. Стратегия не будет генерировать сигнал, если диаграмма MACD равна нулю
  3. Стоп-стоп-процентная доля заранее установлена и может отклоняться от реальной ситуации.

Решение проблемы:

  1. Сокращение циклов скользящих средних и повышение чувствительности к коротким линиям
  2. Оптимизация параметров MACD для более частых колебаний прямоугольника
  3. Динамическая настройка тормозной остановки

Направление оптимизации

Эта стратегия также может быть оптимизирована в следующих аспектах:

  1. Попробуйте различные типы скользящих средних, чтобы получить лучший эффект.
  2. Оптимизация параметров движущихся средних и MACD для различных сортов и периодов
  3. Добавление дополнительных условий, таких как изменение объема торгов, фильтрация сигналов
  4. Регулирование Stop Loss Ratio в реальном времени для повышения адаптивности стратегии

Подвести итог

Успешное сочетание этой стратегии с трендовым суждением движущихся средних и вспомогательным суждением 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')