Стратегия открытия и закрытия ценового канала

Автор:Чао Чжан, Дата: 2023-12-06 16:44:32
Тэги:

img

Обзор

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

Принцип стратегии

Эта стратегия использует индикатор ценового канала для расчета среднего значения самых высоких и самых низких цен в разных циклах для формирования середины канала. На основе середины длинные и короткие линии устанавливаются через параметр сдвига. В частности, формула расчета длинной линии: середина + (середина × параметр длинной линии %); формула расчета короткой линии: середина + (середина × параметр короткой линии%).

Когда цена ниже длинной линии, открывайте длинные позиции с лимитовыми ордерами; когда цена выше короткой линии, открывайте короткие позиции с лимитовыми ордерами.

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

Стратегия имеет следующие преимущества:

  1. Использование индикатора ценового канала позволяет эффективно фиксировать ценовые тенденции и ключевые уровни поддержки/сопротивления.
  2. Открытие позиций на выбытие может уменьшить убытки от ложных выбытий.
  3. Метод стоп-лосса прямо использует среднюю линию ценового канала в качестве стандарта для предотвращения чрезмерных потерь от стоп-погонок.

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

Стратегия также сопряжена с некоторыми рисками:

  1. Неправильное настройка параметров ценового канала может пропустить активные тенденции или вызвать слишком много ложных прорывов.
  2. Методы открытия прорыва несут определенную степень расходов на скольжение.
  3. Невозможно вовремя остановить потерю во время быстрого снижения цен.

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

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

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

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

Заключение

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


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

//Noro
//2018

//@version=3
strategy(title = "Noro's PCMA Strategy v1.0", shorttitle = "PCMA 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
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")

//Price Channel
h = highest(high, per)
l = lowest(low, per)
c = (h + l) / 2
ll = c + ((c / 100) * longlevel)
sl = c + ((c / 100) * shortlevel)

//Lines
shortcolor = needshort ? red : na
longcolor = needlong ? lime : na
plot(sl, linewidth = 2, color = shortcolor, title = "Short line")
plot(c, linewidth = 2, color = blue, title = "SMA line")
plot(ll, linewidth = 2, color = longcolor, title = "Long line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0 and needlong
    strategy.entry("L", strategy.long, lot, limit = ll, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size == 0 and needshort
    strategy.entry("S", strategy.short, lot, limit = sl, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size > 0 
    strategy.entry("Close", strategy.short, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size < 0 
    strategy.entry("Close", strategy.long, 0, limit = c, 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()

Больше