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

Автор:Чао Чжан, Дата: 2023-11-15 15:36:39
Тэги:

img

Обзор

Эта стратегия сочетает в себе 123 обратный шаблон и легкость движения (EOM) для торговли в поворотных точках. 123 обратный шаблон генерирует сигналы, когда цена формирует определенные модели в течение 3 дней подряд. Стратегия EOM использует изменения цены и объема для измерения рыночной динамики. Комбинация обеих стратегий учитывает технические модели, а также импульс, улучшая точность торговых сигналов.

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

Стратегия состоит из двух компонентов:

  1. 123 Образец обратного движения
  • Используйте Stoch для определения уровня перекупленности и перепродажи
  • Пройдите короткий, когда цена падает в течение 2 дней подряд, а быстрая линия Stoch выше медленной линии
  • Идите длинный, когда цена растет в течение 2 дней подряд и Stoch быстрая линия ниже медленной линии
  1. Легкость передвижения
  • Вычислить середину диапазона предыдущего дня
  • Расчет изменения средней точки по сравнению с предыдущим днем
  • Вычислить соотношение движения и объема средней точки
  • Коэффициент выше порогового показателя указывает на рост, ниже порогового показателя - снижение

Стратегия длится, когда сигналы EOM и 123 выстраиваются на длинной стороне, и становится короткой, когда сигналы выстраиваются на короткой стороне.

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

Преимущества этой стратегии:

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

  2. 123 образец ловит поворотные точки, EOM измеряет импульс тренда, два дополняют друг друга

  3. Stoch избегает сбоев во время консолидации

  4. Простой и легкий в применении

  5. Настраиваемые параметры для различных рыночных условий

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

Риски, которые следует учитывать:

  1. Чрезмерная зависимость от параметров, неправильные настройки могут привести к переоценке или отсутствию сделок

  2. Многие фильтры могут генерировать слишком мало сигналов

  3. EOM чувствителен к волатильности, может генерировать ложные сигналы

  4. Живая производительность слабее, чем обратный тест, необходимо контролировать размещение положения

  5. Подходит только для тенденционных фондов, а не для рыночных диапазонов

Направления к улучшению

Стратегия может быть улучшена путем:

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

  2. Добавление стоп-лосса для контроля потери от одной сделки

  3. Добавление фильтра тренда для предотвращения контратендных сделок

  4. Включение размеров позиций на основе волатильности

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

Заключение

Эта стратегия объединяет ценовые модели и импульс для высокой практической ценности. Но необходимо управлять частотой торговли, контролем потерь и рисками противоположной тенденции. Дальнейшее улучшение параметров, остановки потерь, фильтрации тренда может повысить стабильность и прибыльность. Логика ясна и проста в реализации для квантовых трейдеров.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 14/04/2020
// 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 gauges the magnitude of price and volume movement. 
// The indicator returns both positive and negative values where a 
// positive value means the market has moved up from yesterday's value 
// and a negative value means the market has moved down. A large positive 
// or large negative value indicates a large move in price and/or lighter 
// volume. A small positive or small negative value indicates a small move 
// in price and/or heavier volume.
// A positive or negative numeric value. A positive value means the market 
// has moved up from yesterday's value, whereas, a negative value means the 
// market has moved down. 
//
// 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

EOM(BuyZone, SellZone) =>
    pos = 0
    xHigh = high
    xLow = low
    xVolume = volume
    xHalfRange = (xHigh - xLow) * 0.5
    xMidpointMove = mom(xHalfRange, 1)
    xBoxRatio = iff((xHigh - xLow) != 0, xVolume / (xHigh - xLow), 0)
    nRes = iff(xBoxRatio != 0, 1000000 * ((xMidpointMove - xMidpointMove[1]) / xBoxRatio), 0)
    pos := iff(nRes > BuyZone, 1,
             iff(nRes < SellZone, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Ease of Movement (EOM)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
BuyZone = input(4000, minval=1)
SellZone = input(-4000)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posEOM = EOM(BuyZone, SellZone)
pos = iff(posReversal123 == 1 and posEOM == 1 , 1,
	   iff(posReversal123 == -1 and posEOM == -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 )

Больше