Эта стратегия использует двойную кривую, соответствующую высоким и низким точкам K-линии, для формирования торгового сигнала. Когда фактическая цена прорывает соответствующую кривую, она создает сигнал покупки и продажи. Эта стратегия пытается использовать математическую модель для идентификации ключевых поддержки и сопротивления, чтобы совершить прорывную торговлю.
Основные компоненты и правила стратегии:
Высота и низкость совпадают: используйте наименьшее двоичное умножение вторичной кривой, чтобы совпадать с высотой и низкостью K-линии.
Сигнал покупки: Сигнал покупки возникает, когда цена закрытия K-линии пробивает верхнюю кривую.
Сигнал продажи: Сигнал продажи возникает, когда K-линия закрывается, когда цена пробивает нижнюю кривую.
N-циклическая проверка: требует, чтобы прорыв действовал в течение N циклов, чтобы избежать ложного прорыва.
Сигналы о равновесии: отсутствие четкого сигнала о равновесии, время удержания позиции определяется оптимизацией обратной связи.
Эта стратегия пытается идентифицировать ключевые цены с помощью математических моделей и вступать в игру при прорыве, что является типичной системой прорыва.
Основные преимущества этой стратегии по сравнению с другими прорывными системами:
Подобные методы используют математические модели, которые позволяют сделать более объективные суждения.
В ней объединены торговые технологии и статистические модели, новые методы.
Внедрение многоциклической проверки, фильтрация ложных прорывов.
Оптимизация обратной связи позволяет найти оптимальное время удержания позиции.
Это не очень сложно, но можно легко изменить.
Модели обновляются автоматически без какого-либо обслуживания.
Можно проверить параметры крепкости различных сортов и циклов.
Внедрение машинного обучения для дальнейшей оптимизации и верификации.
В целом, нововведение высокого уровня, достойное изучения.
Однако эта стратегия несет в себе следующие риски:
В зависимости от выбранных параметров эффект соответствия может быть переоптимизированным.
Задержка в соответствии с кривой не позволяет полностью избежать потерь.
Не учитывая объемы сделок, существует риск, что они могут быть скопированы.
Статистический арбитраж затрудняет долгосрочную стабильность сверхприбыли.
Необходимо проверить устойчивость модели.
Приспособность к разнообразной среде еще предстоит проверить.
Фиксированная позиция не может быть динамически изменена.
Строго оценить доходность.
Согласно анализу, данная стратегия может быть улучшена в следующих аспектах:
Тестирование прочности параметров в различных рыночных условиях.
Включение показателя проверки объема транзакций.
Оптимизация логики выхода и выхода, улучшение качества сигнала.
Создание динамической модели управления позициями.
Введение стратегии стоп-лосса для ограничения убытков.
Оптимизация стратегии управления капиталом.
Проверка прокрутки окна.
Оценка стабильности прибыли различных сортов.
Оптимизация модели с помощью машинного обучения.
В целом, эта стратегия обладает определенной инновационной и экспериментальной ценностью. Однако долгосрочная стабильная прибыль Statistical Arbitrage все еще находится под испытанием. В ходе ретроспектив необходимо провести полный обзор стабильности стратегии, риска и доходности, предотвратить перенастройку и сохранить адаптивность стратегии в изменчивых рынках.
/*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)