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

Автор:Чао Чжан, Дата: 2024-02-28 17:51:14
Тэги:

img

Обзор

Стратегия "Белый ящик" - это простая механическая торговая стратегия, основанная на индикаторе ценового канала.

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

Основная логика стратегии ценового канала робот белый ящик заключается в:

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

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

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

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

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

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

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

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

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

Стратегия ценового канала робот белый ящик также имеет некоторые риски:

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

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

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

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

Существует возможность дальнейшей оптимизации стратегии "Белый ящик роботов ценового канала":

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

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

Резюме

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


/*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")

Больше