Многофакторная стратегия импульса и разворота


Дата создания: 2023-10-23 15:11:20 Последнее изменение: 2023-10-23 15:11:20
Копировать: 0 Количество просмотров: 700
1
Подписаться
1617
Подписчики

Многофакторная стратегия импульса и разворота

Обзор

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

Принципиальный анализ

Эта стратегия состоит из двух подстратегий:

  1. 123 Стратегия переворота

    • Сверхпокупка с помощью 9-дневного стохастического индикатора
    • Если конечная цена повышается 2 дня подряд, и Stochastic ниже 50, то нужно сделать больше.
    • Если конечная цена падает 2 дня подряд, и Stochastic выше 50, дефолт
  2. Стратегия абсолютных ценностей CMO

    • Вычислить абсолютные значения CMO
    • Если абсолютная величина CMO превышает 70, то считается, что она находится в состоянии перекупа, и она делает позицию.
    • Если абсолютная величина CMO ниже 20, то считается, что она перепродает и делает больше.

Наконец, если два подсигнала стратегии совпадают, то подается сигнал сделки.

Эта стратегия использует преимущества динамического индикатора CMO и инверсионного индикатора Stochastic. CMO может лучше идентифицировать тенденции, а Stochastic может обнаружить краткосрочные возможности для реверсий.

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

Эта стратегия имеет следующие преимущества:

  1. Мультифакторная модель, объединяющая мощность и реверсию, адаптирующаяся к различным рыночным условиям

  2. CMO хорошо распознает тенденции, Stochastic точно оценивает переломы

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

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

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

  6. Правила простые, понятные, легко понятные, подходящие для алгоритмической торговли

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

Также существуют риски:

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

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

  3. Частота транзакций может быть слишком высокой, и расходы на транзакции должны быть учтены.

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

  5. Необходимость корректировки параметров для разных сортов, более высокие требования к оптимизации параметров

Ответ:

  1. Параметры подстратегии оптимизатора, снижающие вероятность ошибочного сигнала

  2. Установка стоп-лосса, контроль одиночных убытков

  3. Изменение условий открытия позиций, снижение частоты торгов

  4. Использование данных о тиках в реальном времени для уменьшения задержек

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

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

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

  1. Введение дополнительных факторов, таких как волатильность, величина и т. д., в систему многофакторной модели

  2. Построение механизма оптимизации динамических параметров, адаптация параметров к рыночным условиям

  3. Оптимизация логики открытия позиций, введение методов, таких как вероятность и индексная плавность

  4. Скрытие долгосрочных позиций в краткосрочной перспективе для достижения двойной цели

  5. Использование глубокого обучения для извлечения дополнительных характеристик и создания нелинейных правил торговли

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

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

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

Эта стратегия использует динамический показатель CMO и показатель Stochastic для реализации многофакторной модели, чтобы открыть больше возможностей для торговли на пересекающихся рынках. По сравнению с одним показателем, многофакторная комбинация может адаптироваться к более сложной рыночной среде. В то же время, параметры этой стратегии оптимизируются в большом пространстве, правила простые и подходят для разработки алгоритмов торговли. Но также необходимо обратить внимание на контроль риска, высокие требования к выбору параметров и оптимизации модели.

Исходный код стратегии
/*backtest
start: 2023-09-22 00:00:00
end: 2023-10-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 17/09/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
//    This indicator plots the absolute value of CMO. CMO was developed by Tushar 
//    Chande. A scientist, an inventor, and a respected trading system developer, 
//    Mr. Chande developed the CMO to capture what he calls "pure momentum". For 
//    more definitive information on the CMO and other indicators we recommend the 
//    book The New Technical Trader by Tushar Chande and Stanley Kroll.
//    The CMO is closely related to, yet unique from, other momentum oriented indicators 
//    such as Relative Strength Index, Stochastic, Rate-of-Change, etc. It is most closely 
//    related to Welles Wilder`s RSI, yet it differs in several ways:
//        - It uses data for both up days and down days in the numerator, thereby directly 
//          measuring momentum;
//        - The calculations are applied on unsmoothed data. Therefore, short-term extreme 
//          movements in price are not hidden. Once calculated, smoothing can be applied to 
//          the CMO, if desired;
//        - The scale is bounded between +100 and -100, thereby allowing you to clearly see 
//          changes in net momentum using the 0 level. The bounded scale also allows you to 
//          conveniently compare values across different securities.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

CMOabs(Length, TopBand, LowBand) =>
    pos = 0
    xMom = abs(close - close[1])
    xSMA_mom = sma(xMom, Length)
    xMomLength = close - close[Length]
    nRes = abs(100 * (xMomLength / (xSMA_mom * Length)))
    pos := iff(nRes > TopBand, -1,
    	     iff(nRes < LowBand, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & CMOabs", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthCMO = input(9, minval=1)
TopBand = input(70, minval=1)
LowBand = input(20, maxval=0)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posCMOabs = CMOabs(LengthCMO, TopBand, LowBand)
pos = iff(posReversal123 == 1 and posCMOabs == 1 , 1,
	   iff(posReversal123 == -1 and posCMOabs == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )