Стратегия обратного ценообразования, основанная на ценовом канале

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

img

Обзор

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

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

Основным показателем этой стратегии является центральная линия ценового канала. Она рассчитывается как средняя от самой высокой цены и самой низкой цены из последних 30 свечей. Когда низкий уровень выше центральной линии, он считается восходящим. Когда высокий уровень ниже центральной линии, он считается нисходящим.

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

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

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

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

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

Риски и решения

Основными рисками этой стратегии являются отсутствие точек переворота цен и ненужное ожидание сигналов.

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

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

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

  1. Оптимизировать такие параметры, как период ценового канала, количество канальных баров и т.д.
  2. Добавьте стратегию стоп-лосса, чтобы остановить потерю, когда потеря достигнет определенного процента.
  3. Сочетать объем торговли, чтобы вмешаться в силу фильтра, например, расслабить фильтры, когда объем торговли усиливается.
  4. Добавьте модель машинного обучения для оценки вероятности изменения тренда, заменив простые фильтры.

Заключение

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


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

//Noro
//2018

//@version=2
strategy(title = "Noro's PriceChannel for D1 v1.0", shorttitle = "PriceChannel D1", 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")
slowlen = input(30, defval = 30, minval = 2, maxval = 200, title = "PriceChannel Period")
pcbars = input(1, defval = 1, minval = 1, maxval = 20, title = "PriceChannel Bars")
usecol = input(true, "Use color-filter")
usebod = input(true, "Use body-filter")
needbg = input(false, defval = false, title = "Need trend 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")

src = close

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

//Trend
ub = low > center ? 1 : 0
db = high < center ? 1 : 0
trend = sma(ub, pcbars) == 1 ? 1 : sma(db, pcbars) == 1 ? -1 : trend[1]

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
up = trend == 1 and (close < open or usecol == false) and (body > abody / 5 or usebod == false)
dn = trend == -1 and (close > open or usecol == false) and (body > abody / 5 or usebod == false)

//Lines
plot(center, color = blue, linewidth = 3, transp = 0, title = "PriceChannel Center")

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

//Trading
if up
    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)))

if dn
    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)))
    
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    

Больше