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


Дата создания: 2023-09-21 20:45:38 Последнее изменение: 2023-09-21 20:45:38
Копировать: 3 Количество просмотров: 1241
1
Подписаться
1617
Подписчики

Обзор

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

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

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

Например, на 15-минутном графике вычислить 20-ю и 50-ю даты:

  • 20-я линия рассчитана на основе текущей 15-минутной линии K
  • 50-я линия рассчитана на основе K-линии

Когда 15-минутная 20-дневная линия пересекает 50-дневную линию, делайте больше; когда 15-минутная 20-дневная линия пересекает 50-дневную линию, делайте пустоту.

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

На перекрестных точках сигналов также могут быть показаны точечные знаки для напоминания о сделке.

Стратегические преимущества

  • Анализ временных рамок показывает более значительные тенденции
  • Высокоциклическая линия более стабильна, избегая избыточного количества ложных сигналов
  • Низкоциклические линии более чувствительны и быстро улавливают изменения трендов
  • Настраиваемый многогрупповой равнолинейный цикл для комбинирования
  • Точечные торговые подсказки

Стратегический риск

  • Многовременное синтезирование увеличивает сложность стратегии
  • Риск ложных сигналов по низким циклическим линиям
  • Система сбалансированности в целом отстает и может пропустить лучшие точки входа.
  • Фильтрация с использованием однородной системы имеет ограниченный эффект.
  • Необходимо оптимизировать комбинацию циклических параметров, разные сорта не обязательно одинаковы

Риски можно снизить следующими способами:

  • сохранение более длинных высоких средних циклических линий, чтобы обеспечить правильное понимание основных тенденций

  • добавление других технических показателей для дальнейшей фильтрации сигналов

  • оптимизировать среднелинейный цикл параметров до оптимального сочетания

  • надлежащее смягчение условий входа, например, добавление формы K-линии

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

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

  1. Тестирование большего количества комбинаций равнолинейных циклов, оптимизация параметров

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

  1. Добавление второго подтверждения при скрещивании

Например, чтобы проверить MACD движение при скрещивании

  1. Оптимизация методов погашения убытков и предотвращение их преждевременного погашения

Решение о выходе может быть принято на основании вспомогательных доказательств, представленных на PostForm123

  1. Фильтрация на короткие и длинные циклы

Более строгие условия фильтрации для коротких циклов, более мягкие условия для длинных циклов

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

Рыночные характеристики различных периодов времени могут быть оптимизированы

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

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

Исходный код стратегии
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 7d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

//Run script on a long interval gives better result for e.g. 1 Day
//Plots The Majority of Moving Averages
//Defaults to Current Chart Time Frame --- But Can Be Changed to Higher Or Lower Time Frames
//2nd MA Capability with Show Crosses Feature
//study(title="CM_Ultimate_MA_MTF", shorttitle="CM_Ultimate_MA_MTF", overlay=true)
strategy("Stratergy CM_Ultimate_MA_MTF", shorttitle = "Stratergy CM_Ultimate_MA_MTF", overlay = true) 
//,default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//inputs
src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above",  defval="D")
len = input(20, title="Moving Average Length - LookBack Period")
atype = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc = input(true,title="Change Color Based On Direction?")
smoothe = input(2, minval=1, maxval=10, title="Color Smoothing - 1 = No Smoothing")
doma2 = input(false, title="Optional 2nd Moving Average")
len2 = input(50, title="Moving Average Length - Optional 2nd MA")
atype2 = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc2 = input(true,title="Change Color Based On Direction 2nd MA?")
warn = input(false, title="***You Can Turn On The Show Dots Parameter Below Without Plotting 2nd MA to See Crosses***")
warn2 = input(false, title="***If Using Cross Feature W/O Plotting 2ndMA - Make Sure 2ndMA Parameters are Set Correctly***")
sd = input(false, title="Show Dots on Cross of Both MA's")


res = useCurrentRes ? timeframe.period : resCustom
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : tema
//2nd Ma - hull ma definition
hullma2 = wma(2*wma(src, len2/2)-wma(src, len2), round(sqrt(len2)))
//2nd MA TEMA definition
sema1 = ema(src, len2)
sema2 = ema(sema1, len2)
sema3 = ema(sema2, len2)
stema = 3 * (sema1 - sema2) + sema3

avg2 = atype2 == 1 ? sma(src,len2) : atype2 == 2 ? ema(src,len2) : atype2 == 3 ? wma(src,len2) : atype2 == 4 ? hullma2 : atype2 == 5 ? vwma(src, len2) : atype2 == 6 ? rma(src,len2) : tema

out = avg 
out_two = avg2

out1 = security(syminfo.tickerid, res, out)
out2 = security(syminfo.tickerid, res, out_two)

ma_up = out1 >= out1[smoothe]
ma_down = out1 < out1[smoothe]

col = cc ? ma_up ? lime : ma_down ? red : aqua : aqua
col2 = cc2 ? ma_up ? lime : ma_down ? red : aqua : aqua

circleYPosition = out2
chk=col==red?1:0

if (not na(chk))
    if (chk[1]==1 and chk==0)
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    else
        strategy.exit("RsiLE")

    if (chk[1]==0 and chk==1)
        strategy.entry("RsiSE", strategy.short, comment="RsiLE")
    else
        strategy.exit("RsiSE")
        
plot(out1, title="Multi-Timeframe Moving Avg", style=line, linewidth=4, color = col)
plot(doma2 and out2 ? out2 : na, title="2nd Multi-TimeFrame Moving Average", style=circles, linewidth=4, color=col2)
plot(sd and cross(out1, out2) ? circleYPosition : na,style=cross, linewidth=5, color=yellow)