Быстрая стратегия перекрестной торговли QQE, основанная на фильтре трендов

Автор:Чао Чжан, Дата: 2024-01-25 11:34:58
Тэги:

img

Обзор

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

  • Сигнал RSI пересекает нуль (XZERO)
  • Сигнал RSI пересекает линию Fast RSIatr (XQQE)
  • Сигнал RSI, выходящий из порогового канала RSI (BUY/SELL)

Оповещения (купить/продать) могут быть отфильтрованы по скользящим средним:

  • Для предупреждения о покупке закрытие должно быть выше быстрого MA и быстрого MA (EMA8) > среднего MA (EMA20) > медленного MA (SMA50).
  • Для предупреждения о продаже закрытие должно быть ниже быстрого MA и быстрого MA (EMA8) < средний MA (EMA20) < медленный MA (SMA50).

и/или направленный фильтр:

  • Для предупреждения BUY закрытие должно быть выше медленного MA (SMA50) и направленный MA (EMA20) должен быть зеленым.
  • Для предупреждения о продаже закрытие должно быть ниже медленного MA (SMA50) и направленного MA (EMA20) должно быть красным.

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

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

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

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

В частности, в стратегии используются следующие показатели и сигналы:

Индикатор быстрого QQEИндикатор состоит из трех линий: средняя линия - экспоненциальная скользящая средняя величина RSI, верхняя линия - средняя линия + быстрый ATR * фактор, а нижняя линия - средняя линия - быстрый ATR * фактор. Когда RSI выходит выше верхней линии, это сигнал продажи. Когда RSI выходит ниже нижней линии, это сигнал покупки.

Пересечение нулевой линии: Он генерирует сигналы, когда средняя линия RSI пересекает нулевую линию. Вверх перекресток - это сигнал покупки, а вниз перекресток - сигнал продажи. Эти сигналы указывают на прелюдию изменений тренда.

Прорыв канала: он генерирует сигналы, когда средняя линия RSI входит в установленный пороговый канал. Перерыв верхнего канала - это сигнал продажи, а перерыв нижнего канала - сигнал покупки. Это более сильные трендовые сигналы.

Комбинация скользящих средних: Используйте комбинацию быстрых (8 периодов), средних (20 периодов) и медленных (50 периодов) скользящих средних. Когда три линии расположены так: быстрые > средние > медленные, это тенденция к росту. Когда расположены как быстрые < средние < медленные, это тенденция к снижению. Комбинация используется для определения общего направления тренда.

Фильтр направления тренда: Сигнал покупки генерируется только тогда, когда цена закрытия выше медленной скользящей средней, а средняя скользящая средняя (20 периодов) выше (высшая цена периода > самая низкая цена). Сигнал продажи генерируется только тогда, когда цена закрытия ниже медленной скользящей средней, а средняя скользящая средняя (20 периодов) ниже. Это может отфильтровать некоторые обратные фальшивые сигналы.

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

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

Преимущества стратегии

  • Использует быстрый и чувствительный QQE индикатор для быстрого захвата сигналов обратного движения
  • Применяет несколько скользящих средних для определения направления большого цикла и избегает торговли против тенденций
  • Включает несколько перекрестных сигналов, которые могут использоваться в сочетании для увеличения возможностей получения прибыли
  • Регулируемые параметры, которые можно оптимизировать для различных продуктов и временных рамок
  • Использует собственные сигналы прорыва канала вместо отдельных каналов, избегая зависимости от параметров
  • Может очень хорошо улавливать краткосрочные движения поворота в условиях больших циклов тренда
  • Простые и понятные понятия, легко понятные и реализуемые

Риски стратегии

Существуют также некоторые потенциальные риски этой стратегии:

  • Быстрые индикаторы, как правило, производят ложные сигналы, которые не могут быть полностью отфильтрованы скользящими средними, существует риск отслеживания неправильного направления.
  • Когда происходит крупное изменение тенденции цикла, образуются обратные торговые сигналы, которые создают риски.
  • Не учитываются факторы управления денежными средствами, существуют риски чрезмерной торговли и потерь
  • Нет стоп-лосса, риски увеличения потерь велики.
  • Риск соответствия данных обратных испытаний, фактическая производительность еще предстоит проверить

Противодействия и решения включают:

  • Корректируйте скользящие средние параметры, используйте больше длины цикла для определения тенденций
  • Добавьте другие индикаторы, такие как MACD, предвзятость и т. Д. для фильтрации комбинаций
  • Добавление стратегий стоп-лосса для контроля размера потерь на одной сделке
  • Тестирование на реальные деньги, оптимизация параметров

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

Есть возможности для дальнейшей оптимизации этой стратегии:

  1. Оптимизировать параметры быстрой и медленной линии индикатора QQE для поиска оптимальной комбинации параметров
  2. Проверьте больше комбинаций скользящих средних для поиска оптимальной производительности фильтрации
  3. Добавить другие индикаторы, такие как MACD для вспомогательной фильтрации сигнала
  4. Применение стратегий управления деньгами для оптимизации размеров позиций
  5. Установка стратегии стоп-лосса для контроля риска снижения по сделке
  6. Оптимизировать параметры на основе различных продуктов
  7. Определить тенденцию на более длительных сроках, чтобы избежать заблуждения от краткосрочных перемен

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

Заключение

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

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


/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//
// Title:   [STRATEGY][UL]QQE Cross v1.1
// Author:  JustUncleL
// Date:    22-Oct-2016
// Version: v1.1
//
// Description:
//  A trend following trading Strategy that uses fast QQE crosses with Moving Averages
//  for trend direction filtering. QQE or Qualitative Quantitative Estimation is based 
//  on the relative strength index, but uses a smoothing technique as an additional 
//  transformation. Three crosses can be selected (all selected by default): 
//    - RSI signal crossing ZERO (XZERO)
//    - RSI signal crossing Fast RSIatr line (XQQE)
//    - RSI signal exiting the RSI Threshhold Channel (BUY/SELL)
//  The (BUY/SELL) alerts can be optionally filtered by the Moving averages:
//    - For BUY alert the Close must be above the fast MA and 
//        fast MA (EMA8) > medium MA (EMA20) > slow MA (SMA50).
//    - For SELL alert the Close must be below the fast MA and
//        fast MA (EMA8) < medium MA (EMA20) < slow MA (SMA50).
//  and/or directional filter:
//    - For BUY alert the Close must be above the slow MA (SMA50) and the
//      directional MA (EMA20) must be green.
//    - For SELL alert the Close must be below the slow MA (SMA50) and the
//      directional MA (EMA20) must be red.
//. The XZERO and XQQE are not included in the filtering, they are used to indicate
//  pending BUY/SELL alerts, particularly the XZERO. 
//
//  This Strategy should work on any currency pair and most chart timeframes.
//  *** USE AT YOUR OWN RISK ***
//  
// 
//
// Mofidifications:
//  1.1 - Added Target Profit option, cleaned up the risk management code.
//        Changed Trade Close to EMA20 direction change instead of opposite BUY/SELL
//        signal, which will be earlier, this means stop loss setting should not be
//        required when an AutoTrader is available.
//        Modified code to prevent potential repaint issues.
//  1.0 - original
//
// References:
//  Some Code borrowed from:
//  - "Scalp Jockey - MTF MA Cross Visual Strategizer by JayRogers"
//  - "QQE MT4 by glaz"
//  - "Strategy Code Example by JayRogers"  
//  Inspiration from:
//  - http://www.forexstrategiesresources.com/binary-options-strategies-ii/189-aurora-binary-trading/
//  - http://www.forexstrategiesresources.com/metatrader-4-trading-systems-v/652-qqe-smoothed-trading/
//  - http://dewinforex.com/forex-indicators/qqe-indicator-not-quite-grail-but-accurately-defines-trend-and-flat.html
//

strategy(title='[STRATEGY][UL]QQE Cross v1.1', pyramiding=0, overlay=true )


// - INPUTS START
// Fast MA - type, source, length
type1   = input(defval="EMA", title="Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len1    = input(defval=8, title="Fast - Length", minval=1)
// Medium Fast MA - type, source, length
type2   = input(defval="EMA", title="Medium Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len2    = input(defval=20, title="Medium Fast - Length", minval=1)
// Slow MA - type, source, length
type3   = input(defval="SMA", title="Slow MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, LSMA, ZEMA ( case sensitive )")
len3    = input(defval=50, title="Slow Length", minval=1)
//
// QQE rsi Length, Smoothing, fast ATR factor, source
RSILen  = input(6,title='RSI Length')
SF      = input(3,title='RSI Smoothing Factor')
QQE     = input(2.618,title='Fast QQE Factor')
threshhold = input(10, title="RSI Threshhold")
//
sQQEx   = input(false,title="Show QQE Signal crosses")
sQQEz   = input(false,title="Show QQE Zero crosses")
//
filter  = input(false,title="Use Moving Average Filter")
dfilter = input(true, title="Use Trend Directional Filter" )
RSIsrc  = input(close,title="Source")
srcclose= RSIsrc

// - INPUTS END

// - FUNCTIONS

// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v3 = wma(src, len)                                                  // Weighted
    v4 = vwma(src, len)                                                 // Volume Weighted
    v5 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len    // Smoothed
    v6 = 2 * v2 - ema(v2, len)                                          // Double Exponential
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)               // Triple Exponential
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))   // Hull
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)                                              // Zero Lag Exponential
    // return variant, defaults to SMA if input invalid.
    type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="ZEMA"?v10 : v1

// - FUNCTIONS END

// - Fast ATR QQE
//
Wilders_Period = RSILen * 2 - 1
//
Rsi = rsi(RSIsrc,RSILen)
RSIndex = ema(Rsi, SF)
AtrRsi = abs(RSIndex[1] - RSIndex)
MaAtrRsi = ema(AtrRsi, Wilders_Period)
DeltaFastAtrRsi = ema(MaAtrRsi,Wilders_Period) * QQE
//
newshortband=  RSIndex + DeltaFastAtrRsi
newlongband= RSIndex - DeltaFastAtrRsi
longband=RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1],newlongband) : newlongband
shortband=RSIndex[1] < shortband[1] and  RSIndex < shortband[1] ? min(shortband[1],newshortband) : newshortband
trend=cross(RSIndex, shortband[1])? 1 : cross(longband[1], RSIndex) ? -1 : nz(trend[1],1)
FastAtrRsiTL = trend==1 ? longband : shortband


// - SERIES VARIABLES
// MA's
ma_fast    = variant(type1, srcclose, len1)
ma_medium  = variant(type2, srcclose, len2)
ma_slow    = variant(type3, srcclose, len3)
// Get Direction From Medium Moving Average
direction = rising(ma_medium,3) ? 1 : falling(ma_medium,3) ? -1 : 0
//
// Find all the QQE Crosses
QQExshort = sQQEx and crossover(FastAtrRsiTL, RSIndex)
QQExlong  = sQQEx and crossunder(FastAtrRsiTL, RSIndex)
// Zero cross
QQEzlong = sQQEz and crossover(RSIndex,50)
QQEzshort  = sQQEz and crossunder(RSIndex,50)
//  
// Thresh Hold channel Crosses give the BUY/SELL alerts.
QQEclong = RSIndex>(50+threshhold) ? na(QQEclong[1]) ? 1 : QQEclong[1]+1 : 0
QQEcshort = RSIndex<(50-threshhold) ? na(QQEcshort[1]) ? 1 : QQEcshort[1]+1 : 0

//
// Check Filtering.
QQEflong = (not filter or (srcclose>ma_fast and ma_medium>ma_slow and ma_fast>ma_medium)) and 
  (not dfilter or (direction>0 and srcclose>ma_slow))
QQEfshort = (not filter or (srcclose<ma_fast and ma_medium<ma_slow and ma_fast<ma_medium)) and
  (not dfilter or (direction<0 and srcclose<ma_slow))
//
// Get final BUY / SELL alert determination
buy = QQEclong>0 and QQEflong ? na(buy[1]) ? 1 : buy[1]+1 : 0
sell= QQEcshort>0 and QQEfshort ? na(sell[1]) ? 1 : sell[1]+1 : 0

// - SERIES VARIABLES END

// - PLOTTING
// Ma's
plot(ma_fast, title="MA Fast", color=olive, linewidth=2, transp=20)
plot(ma_medium, title="MA Medium Fast", color=direction<0?red:green, linewidth=3, transp=0)
plot(ma_slow, title="MA Slow", color=blue, linewidth=2, transp=20)
// QQE crosses
plotshape(QQExlong and buy!=1, title="QQE Cross Over", style=shape.triangleup, location=location.belowbar, text="XQQE", color=blue, transp=20, size=size.tiny)
plotshape(QQExshort and sell!=1, title="QQE Cross Under", style=shape.triangledown, location=location.abovebar, text="XQQE", color=black, transp=20, size=size.tiny)
// Signal crosses zero line
plotshape(QQEzlong and buy!=1 and not QQExlong, title="QQE Zero Cross Over", style=shape.triangleup, location=location.belowbar, text="XZERO", color=aqua, transp=20, size=size.tiny)
plotshape(QQEzshort and sell!=1 and not QQExshort, title="QQE Zero Cross Under", style=shape.triangledown, location=location.abovebar, text="XZERO", color=fuchsia, transp=20, size=size.tiny)

// - PLOTTING END

// Create alert for cross, shunt back 1 if source is not 'open', this should prevent repaint issue.
//shunt = RSIsrc == open ? 0 : 1
shunt = 0
c_alert = (buy[shunt]==1 or sell[shunt]==1)
//alertcondition(c_alert, title="QQECROSS Alert", message="QQECROSS Alert")
// show only when alert condition is met and bar closed.
plotshape(c_alert,title= "Alert Indicator Closed", location=location.bottom, color=sell[shunt]==1?red:green, transp=0, style=shape.circle)


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry(id = "Buy", long = true, when = buy[shunt]==1 )// use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = direction[shunt]!=direction[shunt+1])// ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry(id = "Sell", long = false, when = sell[shunt]==1)
strategy.close(id = "Sell", when = direction[shunt]!=direction[shunt+1])

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

//eof

Больше