Стратегия ценовых средних перемещений

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

img

Обзор

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

Принципы

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

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

В частности, стратегия использует 7 различных типов скользящих средних, включая SMA, EMA, VWMA и т. Д. Пользователи могут выбрать тип скользящей средней. Длина скользящей средней также может быть гибко установлена. Кроме того, стратегия также предусматривает ограничения на определенные периоды времени торговли и механизмы управления позициями.

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

Основными преимуществами кросс-стратегии скользящей средней цены являются следующие:

  1. Логика стратегии ясна и проста, легко понять и реализовать, подходит для обучения новичков.

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

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

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

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

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

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

Хотя пересекающаяся стратегия движущегося среднего имеет много преимуществ, в фактической торговле все еще существуют некоторые риски, которые в основном отражаются на следующих двух аспектах:

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

  2. В случае неправильной настройки параметров перекрестные сигналы могут быть слишком частыми, что приводит к слишком высокой активности торговли и более высоким затратам на торговлю.

В ответ на вышеуказанные риски методы контроля и противодействия осуществляются следующими способами:

  1. Контролировать риск однократной потери путем установки соответствующего диапазона стоп-потери.

  2. Уменьшить частоту торговли и предотвратить чрезмерную торговлю, добавив условия фильтрации.

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

Оптимизация

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

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

  2. Увеличить количество условий фильтрации и комбинированных торговых сигналов для улучшения качества и стабильности сигнала.

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

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

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

Заключение

Эта статья представляет собой подробный анализ кода и интерпретацию простой стратегии пересечения скользящей средней - Noros CrossMA. Мы анализируем ее стратегическую идею, основную структуру, основные преимущества и возможные направления улучшения. В целом, эта стратегия имеет четкую логику и проста и практична. Гибкая корректировка параметров может адаптироваться к многим торговым средам. Мы также анализируем существующие проблемы и риски в стратегии и даем целевые советы. Считается, что благодаря этим всеобъемлющим анализам и обсуждениям трейдеры могут лучше понять такие типы стратегий и помочь им непрерывно оптимизировать реальные торговые системы.


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

//Noro
//2019

//@version=4
strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type")
src = input(close, defval = close, title = "MA Source")
len = input(30, defval = 30, minval = 1, title = "MA length")
off = input(00, defval = 00, minval = 0, title = "MA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
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")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = 0.0
kama := nz(kama[1]) + nsmooth * (src - nz(kama[1]))

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

sma_1 = sma(src, len)
ema_1 = ema(src, len)
vwma_1 = vwma(src, len)
ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0
ma = ma2[off]

macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend == 1 and trend[1] == -1
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if trend == -1 and trend[1] == 1
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if size > 0 and needshort == false and trend == -1
    strategy.close_all()
if size < 0 and needlong == false and trend == 1
    strategy.close_all()
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Больше