Стратегия отслеживания тенденций с двумя сигналами

Автор:Чао Чжан, Дата: 2023-11-02 17:02:06
Тэги:

img

Обзор

Эта стратегия сочетает в себе двойные индикаторы EMA и Awesome Oscillator для выявления и отслеживания тенденций. EMA быстро оценивает направление краткосрочного тренда, в то время как Awesome Oscillator отфильтровывает ложные прорывы и предоставляет сроки входа.

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

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

  1. Вычислить 2-периодическую и 20-периодическую EMA. Когда 2-периодическая EMA нарушает 20-периодическую EMA вверх, это сигнализирует о восходящем тренде. Когда 2-периодическая EMA нарушает 20-периодическую EMA вниз, это сигнализирует о нисходящем тренде.

  2. Вычислите Awesome Oscillator, который представляет собой гистограмму MACD, сглаженную быстрой EMA минус медленной EMA. Когда гистограмма AO меняется с красного на синий, это сигнал покупки. Когда она меняется с синего на красный, это сигнал продажи.

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

  4. Благодаря этому механизму двойной фильтрации сигналов можно уменьшить ложные прорывы и отследить среднесрочные тенденции.

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

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

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

  2. Чрезвычайно быстрая чувствительность к реакции быстро улавливает краткосрочные переломы. 2-периодная EMA очень чувствительна к прорывам и может быстро определить, изменились ли последние тенденции.

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

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

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

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

Существуют также некоторые риски:

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

  2. Параметры AO могут быть оптимизированы для более быстрого ответа.

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

  4. Частая торговля приводит к более высоким комиссионным и расходам на скольжение.

  5. Стратегия не учитывает долгосрочные тенденции и ключевые уровни поддержки/сопротивления.

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

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

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

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

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

  4. Выход, когда цена превышает недавний 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)

Больше