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


Дата создания: 2023-10-07 15:18:44 Последнее изменение: 2023-10-07 15:18:44
Копировать: 0 Количество просмотров: 641
1
Подписаться
1617
Подписчики

Обзор

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

Принципы

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

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

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

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

Риск

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

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

  • Оценка эффективности прибыли различных параметров среднелинейного цикла и выбор оптимальных параметров
  • Добавление других показателей фильтрации сигналов, таких как канальные показатели, K-линии и т. д.
  • Оптимизация стратегии стоп-стоп в сочетании с показателями волатильности
  • Автоматическая оптимизация параметров и правил торговли на основе алгоритмов машинного обучения
  • Добавление алгоритмических торговых модулей для автоматического размещения заказов

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

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

Исходный код стратегии
/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © KivancOzbilgic


//@version=4
strategy("pomila", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)