Стратегия адаптивного регуляризованного скользящего среднего межрыночного арбитража

Автор:Чао Чжан, Дата: 2023-11-16 16:20:11
Тэги:

img

Обзор

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

Принцип стратегии

Стратегия сначала определяет функцию scaleMinimax для стандартизации временных рядов до определенного диапазона. Затем она определяет адаптивную регуляризованную скользящую среднюю функцию rema для расчета сглаженной линии сигнала sig. Расчет линии сигнала:

  1. Определите скользящее окно, длина по умолчанию 5 дней.

  2. Значение SIG для каждого дня представляет собой средневзвешенное значение предыдущего значения SIG и текущей цены закрытия.

  3. Добавьте параметр λ в качестве регуляризатора, чтобы сделать переход сиг более плавным.

После получения линии сигнала стратегия определяет длинный/короткий на основе золотого/мертвого креста линии сигнала и цены.

  1. Когда SIG превышает цену, делайте длинный.

  2. Когда SIG переходит ниже цены, делайте короткий.

Кроме того, стратегия добавляет гладкий фактор и показать_линию в качестве регулируемых параметров для повышения гибкости.

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

По сравнению с традиционными стратегиями скользящей средней, эта стратегия имеет следующие преимущества:

  1. Механизм адаптивного взвешивания может быстрее реагировать на изменения цен.

  2. Добавленный регуляризатор делает сигнальную линию более гладкой, избегая неправильных сигналов от резких колебаний цен.

  3. Межрыночный арбитраж может извлекать выгоду из разницы цен между рынками.

  4. Гибкие регулируемые параметры могут быть оптимизированы в соответствии с условиями рынка.

Риски и решения

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

  1. Вероятность ошибочных сигналов от двойных перекресток выше. Решение состоит в правильном регулировании гладкого параметра, чтобы избежать колебаний линии сигнала.

  2. Арбитраж между рынками требует, чтобы на двух рынках была корреляция цен и последовательные тенденции.

  3. Оптимизация параметров требует достаточного количества исторических данных для обратного тестирования.

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

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

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

  2. При генерации сигналов можно вводить больше индикаторов для создания более стабильных торговых сигналов.

  3. При контроле рисков стоп-лосс может быть установлен для ограничения потерь на одну сделку.

  4. В межрыночном арбитраже он может быть распространен на более высоко коррелирующие торговые активы.

Резюме

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


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Crossover82%", overlay=true)

//
// Functions
//
scaleMinimax(X, p, min, max) => 
    hi = highest(X, p), lo = lowest(X, p)
    (max - min) * (X - lo)/(hi - lo) + min

rema(ts, p) => // regularized ma
    rm = 0.0, lambda = .5, a = 2 / (p + 1)
    rm := (nz(rm[1]) + a * (ts - nz(rm[1])) + lambda * (2 * nz(rm[1]) - nz(rm[2]))) / (lambda + 1)
    rm
    
//
// Inputs
//
X = input(close, title="Data source")
smooth = input(2, title="REMA smooth factor")
show_line = input(true, title="Show signal line")

//
// Main
//
p = 5
sig = rema(scaleMinimax(pow(X*p,-X) - 0.1, 100, lowest(X, 100), highest(X, 100)), smooth)

plot(show_line ? sig : na, linewidth=1)
plot(cross(sig, X) ? ohlc4 : na, style=circles, linewidth=8, color=blue, transp=50)

longCondition = crossover(sig, X)
if (longCondition)
    strategy.entry("LE", strategy.long)

shortCondition = crossunder(sig, X)
if (shortCondition)
    strategy.entry("SE", strategy.short)



Больше