
Эта стратегия является по сути равнолинейной кросс-стратегией. Она выполняется путем вычисления движущихся средних цен и установления определенного длительного краткосрочного движущегося среднего значения, которое увеличивается, когда краткосрочные движущиеся средние пересекают долгосрочные движущиеся средние снизу; и становится пустым, когда краткосрочные движущиеся средние пересекают долгосрочные движущиеся средние снизу.
Основная идея стратегии скрещивания ценовых средних линий заключается в том, что движущиеся средние цены могут эффективно отражать тенденцию изменения цен. Стратегия создает торговый сигнал, используя движущиеся средние цены двух различных периодов, а также определенную логику торговли, чтобы оценить изменения в тенденции рынка.
Стратегия рассчитывает длинную среднюю линию и более короткую среднюю линию. Долгая линия определяет основную тенденцию, а короткая используется для захвата среднесрочных колебаний в процессе большой тенденции. Торговые сигналы стратегии в основном исходят из пересечения короткой линии с длинной: через длинную линию на короткой линии в качестве многосигналов, а через длинную линию под короткой линией в качестве пустых сигналов. Кроме того, стратегия проводит дальнейшую фильтрацию сигналов, чтобы избежать появления ложных сигналов.
В частности, в стратегии используются 7 различных типов движущихся средних, включая SMA, EMA, VWMA и т. Д. Пользователь может выбрать тип движущейся средней. Длина движущейся средней может быть настроена гибко. Кроме того, в стратегии предусмотрены определенные ограничения на торговые периоды и механизм управления позициями.
Основные преимущества ценовой средней линии в следующих аспектах:
Логика стратегии ясна, проста, легко понятна и реализуема, подходит для начинающих.
Стратегические принципы прочны, основываются на хорошо проверенных правилах линейного трейдинга и проходят проверку на рынке.
Параметры стратегии гибко регулируются, пользователи могут выбрать подходящие параметры в зависимости от их собственных суждений и предпочтений в отношении рынка.
Стратегия имеет определенный механизм контроля риска, который позволяет сократить время удержания убыточных позиций и предотвратить ненужные обратные позиции.
Стратегия включает в себя несколько типов средних, пользователь может выбрать тип скользящей средней, наиболее подходящий для его торгового сорта.
Стратегия поддерживает логику открытия торгов в определенные торговые периоды, чтобы избежать необычных колебаний на основных праздничных рынках.
Несмотря на преимущества ценовой средней линии, существуют определенные риски в реальной торговле, которые проявляются в следующих двух аспектах:
Из-за задержки большинства скользящих средних, перекрестные сигналы могут появляться поздно после завершения ценового переворота и быть легко застрявшими.
При неправильной настройке параметров перекрестные сигналы могут быть слишком частыми, что приводит к чрезмерной активности торговли, что приводит к более высоким затратам на торговлю.
В связи с вышеуказанными рисками можно контролировать и реагировать следующим образом:
Управление риском убытков за один раз, устанавливая умеренные пределы убытков.
Увеличение условий фильтрации, снижение частоты торгов, предотвращение чрезмерной торговли. Например, установление ценовых каналов или условий для колебания величины цен.
Оптимизация параметров для скользящих средних, выбор оптимального сочетания параметров для своего торгового сорта и цикла. Испытание стабильности стратегии в различных рыночных условиях.
Есть еще много возможностей для дальнейшей оптимизации этой стратегии ценового среднелинейного скрещивания, в основном в следующих аспектах:
Увеличение защитных механизмов в условиях чрезмерной активности. Например, приостановка торговли при резких колебаниях цен, чтобы избежать необычных периодов рынка.
Добавление большего количества условий фильтрации и объединения торговых сигналов, повышение качества и стабильности сигналов. Например, в сочетании с другими техническими показателями, которые идентифицируют более сильный тренд, кросс.
Динамическая система параметров: ключевые параметры, такие как длина скользящей средней и торговый переключатель, автоматически корректируются в зависимости от рыночных условий и особенностей разновидности, а не с использованием фиксированных значений.
Применение этого среднелинейного перекрестного сигнала в высокотехнологичных стратегиях, таких как комбинированный арбитраж с несколькими разновидностями. В сочетании с другой информацией, для глубокой оптимизации стратегии.
Эти рекомендации могут сделать стратегию более подходящей, более эффективной для торговли и лучше сочетать риск и отдачу.
В этой статье мы подробно расшифровываем и расшифровываем стратегию Noro’s CrossMA simple linear crossover. Мы анализируем ее стратегию, структуру принципов, основные преимущества и возможные направления улучшения. В целом стратегия логически ясна, проста в использовании, гибко регулируется параметрами и может быть адаптирована к различным торговым средам.
/*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")