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

Автор:Чао Чжан, Дата: 2023-10-27 16:07:16
Тэги:

img

Эта стратегия динамически выбирает различные типы скользящих средних по нескольким временным рамкам для генерации торговых сигналов.

Логика стратегии

Стратегия позволяет выбирать из SMA, EMA, TEMA, WMA и HMA скользящих средних, с настраиваемой длиной периода. Различные типы скользящих средних будут графизироваться динамически на основе выбора.

В частности, стратегия сначала определяет период обратного тестирования на основе входных параметров.

  • Простая скользящая средняя SMA
  • Экспоненциальная скользящая средняя EMA
  • TEMA Тройная экспоненциальная скользящая средняя
  • Весовая скользящая средняя
  • Движущаяся средняя HMA Hull

Соответствующая скользящая средняя будет отображаться на основе выбора. Она будет длинной, когда цена закрытия выше скользящей средней, и короткой, когда ниже.

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

Преимущества

  • Комбинирует несколько скользящих средних для большей надежности
  • Персонализируемые периоды подходят для различных временных рамок торговли
  • Динамическое переключение средних позволяет гибко оптимизировать
  • Простой и интуитивно понятный тренд, подходящий для начинающих

Риски

  • Отставание от скользящих средних может пропустить поворотные моменты тренда
  • Сверхприспособленность с фиксированными параметрами, вероятная низкая производительность в режиме реального времени
  • Агрессивные длинные/короткие сигналы влияют на эффективность использования капитала

Риски могут быть уменьшены:

  • Добавление других показателей для более точного определения записей
  • Оптимизация параметров реальной торговли для различных рыночных режимов
  • Оптимизация размеров позиций на основе размера счета и управления рисками

Возможности для расширения

Стратегия может быть улучшена в нескольких аспектах:

  1. Добавить другие фильтры для более стабильных сигналов

    Например, показатели объема для предотвращения ложных прорывов без подтверждения объема.

  2. Оптимизировать логику входа и выхода

    Установите ценовые каналы и прекратите потери, чтобы уменьшить ненужные потери.

  3. Периоды динамической скользящей средней

    Использовать более длительные периоды в период сильных тенденций и более короткие периоды во время консолидации.

  4. Улучшить управление деньгами

    Корректировка размеров позиций на основе вывода средств и получения прибыли.

Заключение

Стратегия сочетает в себе различные скользящие средние за разные временные рамки, чтобы генерировать относительно стабильные трендовые эффекты.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("MA_strategy ", shorttitle="MA_strategy", overlay=true, initial_capital=100000)

qty = input(100000000, "Buy quantity")

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")

testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)

testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


ma1 = input( "SMA",title="Select MA", options=["SMA", "EMA","TEMA", "WMA","HMA"])


len1 = input(7, minval=1, title="Period")

s=sma(close,len1)

e=ema(close,len1)


xEMA1 = ema(close, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
t = 3 * xEMA1 - 3 * xEMA2 + xEMA3


f_hma(_src, _length)=>
    _return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))

h = f_hma(close, len1)

w = wma(close, len1)

ma = ma1 == "SMA"?s:ma1=="EMA"?e:ma1=="WMA"?w:ma1=="HMA"?h:ma1=="TEMA"?t:na

buy= close>ma
sell= close<ma

alertcondition(buy, title='buy', message='buy')
alertcondition(sell, title='sell', message='sell')

ordersize=floor(strategy.equity/close)

if testPeriod()
    strategy.entry("long",strategy.long,ordersize,when=buy)
    strategy.close("long", when = sell )


    
  









Больше