Стратегия «Белый ящик» робота ценового канала


Дата создания: 2024-02-28 17:51:14 Последнее изменение: 2024-02-28 17:51:14
Копировать: 0 Количество просмотров: 622
1
Подписаться
1617
Подписчики

Стратегия «Белый ящик» робота ценового канала

Обзор

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

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

Основная логика стратегии “белого ящика” для ценовых каналов:

  1. Вычислить наивысшую и самую низкую цену на линии K с помощью функций highest и lowest, определенных как верхняя и нижняя границы ценового канала
  2. Расчет средней цены ценового канала: ((высшая цена + низшая цена) / 2
  3. Открыть позицию, когда цена пересекает верхний предел ценового канала
  4. Открытие позиции, когда цена пересекает нижнюю границу ценового канала
  5. Прямой позиции, когда цена возвращается к средней цене ценового канала

Также есть параметры, которые можно настроить:

  • Длина ценового канала len: по умолчанию 50 K-линий
  • Тип открытия позиции: многоголовый, пустой головой может быть настроен отдельно
  • Размер открытой позиции: 100% по умолчанию
  • Стоп-убыток: можно выбрать использование средней цены ценового канала в качестве стоп-убытка
  • Время торговли: можно настроить торговлю только в пределах указанной даты

Изменение этих параметров позволяет лучше адаптировать стратегию к различным видам и рыночным условиям.

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

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

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

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

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

Также существуют некоторые риски, связанные с стратегией “белого ящика” для ценовых каналов:

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

Чтобы снизить эти риски, необходимо оптимизировать следующие аспекты:

  1. Автоматическая оптимизация параметров с помощью метода Walk Forward Analysis
  2. Включение буферной зоны в стоп-цену, чтобы избежать вероятности арбитража
  3. Повышение индексов трендового анализа, чтобы избежать торговли на рынке с горизонтальными колебаниями

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

Также есть место для дальнейшей оптимизации стратегии “белых ящиков” для ценовых каналов:

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

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

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

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

Исходный код стратегии
/*backtest
start: 2023-02-21 00:00:00
end: 2024-02-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro

//@version=4
strategy(title = "Robot WhiteBox Channel", shorttitle = "Robot WhiteBox Channel", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
needstop = input(true, defval = true, title = "Stop-loss")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
len = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
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")

//Price Channel
h = highest(high, len)
l = lowest(low, len)
center = (h + l) / 2

//Lines
pccol = showll ? color.black : na
slcol = showll ? color.red : na
plot(h, offset = 1, color = pccol)
plot(center, offset = 1, color = slcol)
plot(l, offset = 1, color = pccol)

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)

//Trading
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 h > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = h, when = strategy.position_size <= 0 and truetime)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = l, when = strategy.position_size >= 0 and truetime)
    strategy.entry("S Stop", strategy.long, 0, stop = center, when = strategy.position_size[1] <= 0 and needstop)
    strategy.entry("L Stop", strategy.short, 0, stop = center, when = strategy.position_size[1] >= 0 and needstop)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")