Стратегия следования за трендом с двойным сигналом


Дата создания: 2023-11-02 17:02:06 Последнее изменение: 2023-11-02 17:02:06
Копировать: 0 Количество просмотров: 588
1
Подписаться
1617
Подписчики

Стратегия следования за трендом с двойным сигналом

Обзор

Стратегия позволяет идентифицировать и отслеживать тенденции, используя в комбинации два показателя: двойной EMA и потрясающий осциллятор. В ней EMA быстро определяет направление недавних тенденций, а фильтр потрясающего осциллятора дает возможность ложного прорыва.

Стратегический принцип

Эта стратегия основана на фильтрации сигналов с использованием двух технических показателей, таких как двойная ЭМА и Ошеломляющий осциллятор, и имеет следующую логику:

  1. Вычислять 2-циклические и 20-циклические ЭМА, когда 2-циклическая ЭМА сверху вверх превышает 20-циклическую ЭМА, рассматривать как тенденцию к росту; когда 2-циклическая ЭМА сверху вниз превышает 20-циклическую ЭМА, рассматривать как тенденцию к снижению.

  2. Вычислите Awesome Oscillator, который получается путем уменьшения скоростного движущегося среднего за медленное движущееся среднее, затем уменьшите скоростное движущееся среднее за MACD и получите MACD. MACD рассматривается как сигнал покупки, когда красный превращается в синий, и как сигнал продажи, когда синий превращается в красный.

  3. Окончательный сигнал на покупку генерируется только тогда, когда EMA показывает тенденцию к росту, а AO одновременно показывает сигнал на покупку; и только тогда, когда EMA показывает тенденцию к снижению, а AO одновременно показывает сигнал на продажу.

  4. С помощью этого механизма фильтрации двойных сигналов можно эффективно уменьшить фальшивые прорывы и отслеживать среднее направление тренда.

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

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

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

  2. Реагирующая чувствительность Очень быстрая, позволяет своевременно зафиксировать краткосрочные изменения тренда. 2-циклическая EMA очень чувствительна к прорывам и может быстро определить, изменилась ли тенденция в ближайшее время.

  3. Awesome Oscillator снова отфильтровывает MACD, чтобы эффективно идентифицировать ложные прорывы в тренде и избежать ненужных обратных операций.

  4. Стратегическое направление четко определено, чтобы отслеживать среднесрочные тенденции. EMA определяет направление базовой тенденции, AO дополнительно фильтрует, чтобы обеспечить соответствие сделок с направлением большой тенденции, чтобы постоянно улавливать тенденции среднесрочной тенденции.

  5. Выбор параметров стратегии является обоснованным, 2-циклическая и 20-циклическая EMA улавливают изменения цен в разных циклах, 5-циклические и 34-циклические параметры AO оптимизированы, чтобы лучше идентифицировать характерные черты в краткосрочной перспективе.

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

Однако эта стратегия также несет в себе некоторые риски:

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

  2. AO в некоторых случаях может отставать от EMA, что приводит к разнице во времени появления сигнала, а AO параметры могут быть соответствующим образом оптимизированы, чтобы они быстрее реагировали на прорыв.

  3. Параметры EMA и AO, учитывающие краткосрочные и среднесрочные характеристики, устанавливаются с высокими требованиями к качеству данных и вычислительной мощности, которые необходимо скорректировать в соответствии с характеристиками разных сортов.

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

  5. Стратегия не учитывает макроциклические тенденции и ключевые поддерживающие сопротивления, и должна включать в себя дополнительные факторы, гарантирующие правильное направление торговли.

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

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

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

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

  3. Оптимизация комбинации параметров EMA и AO для повышения эффективности их сочетания. Например, автоматическое поиск оптимальной пары параметров с использованием генетических алгоритмов класса.

  4. Повышение механизма Exit Stop Loss. Временное остановка убытков, чтобы контролировать убытки, когда цена пробивает последнюю Swing High/Low.

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

  6. Постепенная коррекция параметров для улучшения эффективности показателей на реальном диске. Проверка прочности параметров, получение более стабильной комбинации параметров.

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

Общая идея этой стратегии ясна, чтобы определить направление большого тренда по EMA, а комбинация сигналов фильтрации AO использует два показателя для двойной проверки. Можно эффективно идентифицировать тенденцию, следить за среднесрочной ситуацией. Но также существуют определенные риски и недостатки, требующие дальнейшей оптимизации тестов для повышения стабильности.

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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA) =>
    pos = 0.0
    xSMA1_hl2 = ta.sma(hl2, nLengthFast)
    xSMA2_hl2 = ta.sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = ta.sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = ta.wma(nRes, nLengthWMA)
    xResMA = ta.sma(nRes, nLengthMA)
    xResEMA = ta.ema(nRes, nLengthEMA)
    xSignalSeries = bShowWMA ? xResWMA :
                     bShowMA ? xResMA : 
                      bShowEMA ? xResEMA : na
    pos :=  xSignalSeries[2] < 0 and xSignalSeries[1] > 0? 1:
    	     xSignalSeries[2] > 0 and xSignalSeries[1] < 0 ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & Bill  Awesome Oscillator (AC)', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Awesome Oscillator (AC) ═════●'
nLengthSlow = input.int(34, minval=1, title="Length Slow", group=I2)
nLengthFast = input.int(5, minval=1, title="Length Fast", group=I2)
nLengthMA = input.int(15, minval=1, title="MA", group=I2)
nLengthEMA = input.int(15, minval=1, title="EMA", group=I2)
nLengthWMA = input.int(15, minval=1, title="WMA", group=I2)
bShowWMA = input.bool( defval=true, title="trading WMA", group=I2)
bShowMA = input.bool( defval=false, title="trading MA", group=I2)
bShowEMA = input.bool( defval=false, title="trading EMA", group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosAC = AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA)
iff_1 = posEMA20 == -1 and prePosAC == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosAC == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
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)