Стратегия переходной зоны


Дата создания: 2023-12-29 17:03:27 Последнее изменение: 2023-12-29 17:03:27
Копировать: 1 Количество просмотров: 846
1
Подписаться
1621
Подписчики

Стратегия переходной зоны

Обзор

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

Стратегический принцип

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

В частности, стратегия постоянно отслеживает максимальные и минимальные цены на конечной N-корневой K-линии (с регулируемым параметром N), где:

  • Минимальная цена = Минимальная точка на прошедшей N-корневой линии K
  • Максимальная цена = максимальная точка в прошлом N корневой линии K

Таким образом, создается диапазон колебаний цен.

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

Кроме того, в стратегии добавлены цветовые фильтры и фигуры. Цветовые фильтры фильтруют сигналы на основе цвета K-линий; фигуры фильтруют сигналы на основе размера K-линий. Это позволяет отфильтровать некоторые фальшивые сигналы.

Стратегические преимущества

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

  1. Поймать ценовые диапазоны, определить переломные моменты тренда, сделать более точный дисконт
  2. Цветовые и физические фильтры, фильтрующие ложные сигналы
  3. Логика стратегии проста и понятна, легко понять и скорректировать параметры
  4. Более настраиваемые параметры для оптимизации стратегии

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

Однако эта стратегия также несет в себе некоторые риски:

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

Эти риски могут быть уменьшены путем корректировки параметров диапазона, оптимизации условий фильтрации сигнала и т. Д.

Направление оптимизации

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

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

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Transient Zones Strategy v1.0", shorttitle = "TZ str 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 = "Capital, %")

usecol = input(true, defval = true, title = "Use Color-Filter")
usebod = input(true, defval = true, title = "Use Body-Filter")

h_left = input(title = "H left", defval = 10)
h_right = -1
sample_period = input(title = "Sample bars for % TZ",  defval = 5000)
show_ptz = input(title = "Show PTZ", type = bool, defval = true)
show_channel = input(title = "Show channel", type = bool, defval = true)

fromyear = input(2018, defval = 2018, 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")

//By Jurij w/ TZ percent occurrence by SPYderCrusher

//barCount = nz(barCount[1]) + 1
//check history and realtime PTZ
h_left_low = lowest(h_left)
h_left_high = highest(h_left)
newlow = low <= h_left_low
newhigh = high >= h_left_high
plotshape(newlow and show_ptz, style=shape.triangledown, location=location.belowbar, color=red)
plotshape(newhigh and show_ptz, style=shape.triangleup, location=location.abovebar, color=green)
channel_high = plot(show_channel ? h_left_low : 0, color=silver)
channel_low = plot (show_channel ? h_left_high : 0, color=silver)

//check true TZ back in history
central_bar_low = low[h_right + 1]
central_bar_high = high[h_right + 1]
full_zone_low = lowest(h_left + h_right + 1)
full_zone_high = highest(h_left + h_right + 1)
central_bar_is_highest = central_bar_high >= full_zone_high
central_bar_is_lowest = central_bar_low <= full_zone_low
plotarrow(central_bar_is_highest ? -1 : 0, offset=-h_right-1)
plotarrow(central_bar_is_lowest ? 1 : 0, offset=-h_right-1)

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = central_bar_is_lowest and body and (bar == -1 or usecol == false)
dn1 = central_bar_is_highest and body and (bar == 1 or usecol == false)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

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

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

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