Эта стратегия приспосабливает квадратическую кривую к высоким/низким точкам баров, чтобы генерировать торговые сигналы, когда цена пробивается через установленные линии.
Ключевыми компонентами и правилами являются:
Приспособление кривой в высоких/низких точках с использованием квадратной регрессии.
Купить сигнал, когда ближайший перерыв выше верхней полосы.
Продай сигнал, когда ближайший разрыв ниже нижней полосы.
N периодов проверки для предотвращения ложных сбоев.
Нет фиксированных правил выхода, оптимизируйте выходы с помощью обратного тестирования.
Стратегия пытается определить ключевые цены математически и торговать прорывами, типичной системой прорыва.
По сравнению с другими системами прорыва основными преимуществами являются:
Математическое соответствие более объективно, чем субъективное суждение.
Новый подход, объединяющий технический анализ и статистические модели.
Многопериодная проверка позволяет избежать ложных сбоев.
Обратное тестирование может оптимизировать выход и период ожидания.
Легко внедряется с гибкими настройками.
Модель обновляется автоматически без ручного вмешательства.
Может проверять прочность параметров на продукты и временные рамки.
Возможность дальнейшей оптимизации с помощью машинного обучения.
В целом новый подход с исследовательской ценностью.
Однако риски заключаются:
Производительность монтажа зависит от настройки параметров, риска перенастройки.
Установленные линии задерживаются, не могут полностью избежать потерь.
Нет подтверждения объема, риск попасть в ловушку.
Статистический арбитраж является проблемой для стойкой альфы.
Ограниченный период обратного тестирования, необходимо проверить прочность.
Приспособимость к различным рынкам требует проверки.
Фиксированный размер не имеет динамической настройки.
Нужна строгая оценка соотношения вознаграждения/риска.
На основе анализа улучшения могут включать:
Проверка надежности параметров в различных рыночных режимах.
Добавьте индикаторы подтверждения объема.
Оптимизировать логику входа/выхода для сигналов более высокого качества.
Построение динамических моделей размеров позиций.
Включайте остановки для ограничения потерь.
Оптимизировать стратегии управления рисками.
Подтверждение обратного теста.
Оценить стабильность на многих рынках.
Используйте машинное обучение для оптимизации модели.
В целом, эта стратегия имеет некоторую инновационную ценность и экспериментальную ценность. Но долгосрочная жизнеспособность статистического арбитража остается недоказанной. Комплексное тестирование в выборке на надежность, риск / вознаграждение является ключом к предотвращению перенапряжения и поддержанию адаптивности.
/*backtest start: 2023-08-23 00:00:00 end: 2023-09-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // strategy(title = " Strategy Quadratic Semaphore ", shorttitle = "SQS", overlay = true, precision = 8, calc_on_order_fills = true, calc_on_every_tick = true, backtest_fill_limits_assumption = 0, default_qty_type = strategy.fixed, default_qty_value = 2, initial_capital = 10000, pyramiding=5, currency = currency.USD, linktoseries = true) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool) FromMonth = input(defval = 1, title = "Month", minval = 1) FromDay = input(defval = 1, title = "Day", minval = 1) FromYear = input(defval = 2019, title = "Year", minval = 2014) backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool) ToMonth = input(defval = 31, title = "Month", minval = 1) ToDay = input(defval = 12, title = "Day", minval = 1) ToYear = input(defval = 9999, title = "Year", minval = 2014) Config = input(title = "══════════════ Config ══════════════", defval = true, type = input.bool) p = input(6) length = input(30) // backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59)) // // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // x1 = bar_index x2 = sqrt(x1) y = high // S11 = sum(x2,length) - sqrt(sum(x1,length)) / length S12 = sum(x1*x2,length) - (sum(x1,length) * sum(x2,length)) / length S22 = sum(sqrt(x2),length) - sqrt(sum(x2,length)) / length Sy1 = sum (y*x1,length) - (sum(y,length) * sum(x1,length)) / length Sy2 = sum (y*x2,length) - (sum(y,length) * sum(x2,length)) / length // max1 = sma(x1,length) max2 = sma(x2,length) may = sma(y,length) b2 = ((Sy1 * S22) - (Sy2*S12))/(S22*S11 - sqrt(S12)) b3 = ((Sy2 * S11) - (Sy1 * S12))/(S22 * S11 - sqrt(S12)) b1 = may - b2*max1 - b3*max2 qr = b1 + b2*x1 + b3*x2 // yl = low // Sy1l = sum(yl*x1,length) - (sum(yl,length) * sum(x1,length)) / length Sy2l = sum(yl*x2,length) - (sum(yl,length) * sum(x2,length)) / length // mayl = sma(yl,length) b2l = ((Sy1l * S22) - (Sy2l*S12))/(S22*S11 - sqrt(S12)) b3l = ((Sy2l * S11) - (Sy1l * S12))/(S22 * S11 - sqrt(S12)) b1l = mayl - b2l*max1 - b3l*max2 qrl = b1l + b2l*x1 + b3l*x2 // period = round(p/2)+1 hh = qr[period] ll = qrl[period] countH = 0 countL = 0 buy=0 sell=0 // for i = 1 to period-1 if qr[i]<hh countH:=countH+1 if qrl[i]>ll countL:=countL+1 for i = period+1 to p+1 if qr[i]<hh countH:=countH+1 if qrl[i]>ll countL:=countL+1 if countH==p pivotH = high[period] buy := 1 if countL==p pivotL = low[period] sell := 1 // plotshape(buy == 1 , text='💣', style=shape.arrowup, location=location.belowbar, color=#32CD32, textcolor=color.white, offset=0, transp=0,size=size.auto) plotshape(sell == 1 , text='🔨', style=shape.arrowdown, location=location.abovebar, color=#FF0000, textcolor=color.white, offset=0, transp=0,size=size.auto) // if (backTestPeriod()) strategy.entry("long", true, 1, when = buy == 1) strategy.entry("short", false, 1, when = sell == 1)