Стратегия торговли движущейся средней тенденцией

Автор:Чао Чжан, Дата: 2021-09-21 20:34:43
Тэги:

Обзор

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

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

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

Когда быстрый MA пересекает медленный MA, это сигнализирует о восходящем тренде на рынке, и стратегия будет длинной на открытии следующей панели.

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

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

Правило выхода простое и прямое - закрыть позицию, когда ударится стоп-лосс.

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

  • Система двойного MA позволяет эффективно отслеживать тенденции
  • Быстрый MA быстро реагирует на изменения тренда
  • Медленный MA определяет общее направление
  • Параметр bars отфильтровывает некоторые ложные прорывы
  • Экстремальные охранники избегают спорадических ложных сигналов вокруг критических точек
  • Перемещение стоп-лосса управляет рисками

Риски

  • Системы двойного MA, как правило, теряют во время перемены тренда
  • Движение стоп-лосса может быть преждевременно остановлено
  • Фильтр bars может пропустить некоторые действительные сигналы
  • Сверхценные охранники иногда пропускают хорошие записи
  • Стратегия лучше работает на сильно развивающихся рынках

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

  • Оптимизация параметра bars
  • Добавление других фильтров, таких как MACD
  • Корректировка уровней стоп-лосса для предотвращения преждевременного стоп-офта
  • Рассмотрение повторного въезда

Руководство по оптимизации

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

  1. Настройка параметров MA

Испытать больше комбинаций MA, чтобы найти оптимальные параметры для текущего рынка, например, 10-периодный быстрый MA и 50-периодный медленный MA.

  1. Добавление других показателей

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

  1. Оптимизация записей

Текущая простая запись двойного MA может быть улучшена:

  • Введите длинный только в том случае, если MACDDIFF также пересекается выше 0, когда быстрая MA пересекается выше медленной MA
  • Введите длинный только в том случае, если KDJ дает золотой крестик, когда быстрый MA пересекает медленный MA.
  1. Оптимизация остановок

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

  1. Добавление повторных записей

Разрешить повторный вход после остановки, чтобы избежать пропущенных тенденций.

Резюме

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


/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.3", shorttitle = "Trend MAs str 2.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

src = close

//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)

//Signals
up1 = trend == 1 and (low < center2 or usefastsma == false) and redbars == 1
dn1 = trend == -1 and (high > center2 or usefastsma == false) and greenbars == 1
up2 = high < center and high < center2 and bar == -1 and needex
dn2 = low > center and low > center2 and bar == 1 and needex
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0

//Lines
plot(center2, color = red, linewidth = 3, transp = 0, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Trading
stoplong = up1 == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn1 == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

if up1 or up2 or up3
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.exit("Stop Long", "Long", stop = stoplong)

if dn1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.exit("Stop Short", "Short", stop = stopshort)
    
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    

Больше