Стратегия следования за трендом на основе трех скользящих средних


Дата создания: 2024-02-02 17:30:09 Последнее изменение: 2024-02-02 17:30:09
Копировать: 1 Количество просмотров: 567
1
Подписаться
1617
Подписчики

Стратегия следования за трендом на основе трех скользящих средних

Обзор

Эта стратегия, называемая “Ласковая молнии”, является стратегией слежения за тенденцией, основанной на трех движущихся средних. Она определяет ценовые тенденции, рассчитывая перекрестки быстрого, среднего и медленного линий, и устанавливает целевую цену и стоп-цену с помощью ATR.

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

Стратегия использует следующие три скользящие средние:

  1. 13-дневная взвешенная скользящая средняя, используемая для определения краткосрочных тенденций
  2. 55-дневная скользящая средняя индекса, используемая для оценки среднесрочных тенденций
  3. 110-дневная простая скользящая средняя, используемая для определения долгосрочных тенденций

При прохождении средней линии на скорой линии и медленной линии на средней линии, рассматривается как многотенденция; при прохождении средней линии под скорой линией и медленной линии под средней линией, рассматривается как пустая тенденция.

Для того, чтобы отфильтровать некоторые “шумные” сделки, в стратегии есть несколько дополнительных условий:

  1. Первые пять нижних точек K-линии находятся над средней линией.
  2. Первые две K-линии имеют низкие точки, которые опускаются ниже средней линии.
  3. Цена закрытия первой K-линии выше средней

При выполнении этих условий появляется сигнал о покупке или продаже. Позиция может быть открыта только после того, как она будет закрыта или ликвидирована.

Целевая цена и стоп-стоп устанавливаются в зависимости от значения ATR.

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

Эта стратегия имеет следующие преимущества:

  1. Использование трех комбинаций подвижных средних для определения тенденции позволяет избежать ошибок в определении вероятности по одному показателю.
  2. Установка нескольких вспомогательных условий фильтрации шума может улучшить качество сигнала.
  3. Динамическая остановка ATR помогает контролировать единичные убытки.

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

Также существуют следующие риски:

  1. Комбинации скользящих средних могут подавать ошибочный сигнал и требуют полной обратной связи.
  2. Неправильная настройка ATR может привести к слишком мягкому или жесткому остановке.
  3. В результате, цены на продукты питания, которые не могут эффективно отфильтровывать внезапные события, колеблются.

Для управления рисками рекомендуется соответствующая корректировка параметров скользящих средних, оптимизация ATR-множителей и установка максимального времени удержания позиции, чтобы избежать чрезмерных одиночных потерь.

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

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

  1. Проверьте скользящие средние разных длин или типов.
  2. Параметры оптимизации вспомогательных условий.
  3. Попробуйте другие индикаторы прогнозирования трендов, такие как MACD, DMI и т.д.
  4. Объединенные показатели, такие как количество сделок, разница в цене и другие фильтруют сигналы.

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

В целом, эта стратегия является стабильной стратегией слежения за трендом. Она в основном опирается на движущиеся средние для определения направления тенденции, а также имеет определенную группу технических показателей, которые могут отфильтровывать часть шума. Хотя все еще есть место для дальнейшей оптимизации, общий риск является управляемым и подходит для инвестирования в слежение за длинной средней линией.

Исходный код стратегии
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 2h
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/
// © greenmask9

//@version=4
strategy("Dazzling Bolts", overlay=true)
//max_bars_back=3000

// 13 SMMA
len = input(10, minval=1, title="SMMA Period")
src = input(close, title="Source")
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len

// 55 EMA
emalength = input(55, title="EMA Period")
ema = ema(close, emalength)

// 100 SMA
smalength = input(110, title="SMA Period")
sma = sma(close, smalength)

emaforce = input(title="Force trend with medium EMA", type=input.bool, defval=true)
offsetemavalue = input(defval = 6)

bullbounce = smma>ema and ema>sma and low[5]>ema and low[2]<ema and close[1]>ema and (ema[offsetemavalue]>sma or (not emaforce))
bearbounce = smma<ema and ema<sma and high[5]<ema and high[2]>ema and close[1]<ema and (ema[offsetemavalue]<sma or (not emaforce))
plotshape(bullbounce,  title= "Purple", location=location.belowbar, color=#ff33cc, transp=0, style=shape.triangleup, size=size.tiny, text="Bolts")
plotshape(bearbounce,  title= "Purple", location=location.abovebar, color=#ff33cc, transp=0, style=shape.triangledown, size=size.tiny, text="Bolts")
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
longs = input(title="Test longs", type=input.bool, defval=true)
shorts = input(title="Test shorts", type=input.bool, defval=true)
atrlength = input(title="ATR length", defval=12)
atrm = input(title="ATR muliplier",type=input.float, defval=2)
atr = atr(atrlength)

target = close + atr*atrm
antitarget = close - (atr*atrm)

//limits and stop do not move, no need to count bars from since

bullbuy = bullbounce and longs and strategy.opentrades==0
bb = barssince(bullbuy)
bearsell = bearbounce and shorts and strategy.opentrades==0
bs = barssince(bearsell)

if (bullbuy)
    strategy.entry("Boltsup", strategy.long, ordersize)
    strategy.exit ("Bolts.close", from_entry="Boltsup", limit=target, stop=antitarget)
if (crossover(smma, sma))
    strategy.close("Boltsup", qty_percent = 100, comment = "Bolts.crossover")

if (bearsell)
    strategy.entry("Boltsdown", strategy.short, ordersize)
    strategy.exit("Bolts.close", from_entry="Boltsdown", limit=antitarget, stop=target)
if (crossunder(smma, sma))
    strategy.close("Boltsdown", qty_percent = 100, comment = "Bolts.crossover")

// if (bb<5)
//     bulltarget = line.new(bar_index[bb], target[bb], bar_index[0], target[bb], color=color.blue, width=2)
//     bullclose = line.new(bar_index[bb], close[bb], bar_index[0], close[bb], color=color.blue, width=2)
//     bullstop = line.new(bar_index[bb], antitarget[bb], bar_index[0], antitarget[bb], color=color.blue, width=2)
// if (bs<5)
//     bulltarget = line.new(bar_index[bs], antitarget[bs], bar_index[0], antitarget[bs], color=color.purple, width=2)
//     bullclose = line.new(bar_index[bs], close[bs], bar_index[0], close[bs], color=color.purple, width=2)
//     bullstop = line.new(bar_index[bs], target[bs], bar_index[0], target[bs], color=color.purple, width=2)