Стратегия быстрого перекрестного трейдинга QQE, основанная на фильтре тренда, - это стратегия трейдинга, которая использует быстрые перекрестки QQE с скользящими средними для фильтрации направления тренда. QQE или качественная количественная оценка основана на индексе относительной силы, но использует технику сглаживания в качестве дополнительной трансформации.
Оповещения (купить/продать) могут быть отфильтрованы по скользящим средним:
и/или направленный фильтр:
XZERO и XQQE не включены в фильтрацию, они используются для обозначения ожидаемых предупреждений о покупке/продаже, особенно XZERO.
Эта стратегия должна работать на любой валютной паре и большинстве графических временных рамок.
Основная идея этой стратегии состоит в том, чтобы использовать направленный перекресток быстрого индикатора QQE в качестве торговых сигналов и фильтровать шумные торговые сигналы посредством комбинации скользящих средних для определения направления тренда.
В частности, в стратегии используются следующие показатели и сигналы:
Индикатор быстрого QQEИндикатор состоит из трех линий: средняя линия - экспоненциальная скользящая средняя величина RSI, верхняя линия - средняя линия + быстрый ATR * фактор, а нижняя линия - средняя линия - быстрый ATR * фактор. Когда RSI выходит выше верхней линии, это сигнал продажи. Когда RSI выходит ниже нижней линии, это сигнал покупки.
Пересечение нулевой линии: Он генерирует сигналы, когда средняя линия RSI пересекает нулевую линию. Вверх перекресток - это сигнал покупки, а вниз перекресток - сигнал продажи. Эти сигналы указывают на прелюдию изменений тренда.
Прорыв канала: он генерирует сигналы, когда средняя линия RSI входит в установленный пороговый канал. Перерыв верхнего канала - это сигнал продажи, а перерыв нижнего канала - сигнал покупки. Это более сильные трендовые сигналы.
Комбинация скользящих средних: Используйте комбинацию быстрых (8 периодов), средних (20 периодов) и медленных (50 периодов) скользящих средних. Когда три линии расположены так: быстрые > средние > медленные, это тенденция к росту. Когда расположены как быстрые < средние < медленные, это тенденция к снижению. Комбинация используется для определения общего направления тренда.
Фильтр направления тренда: Сигнал покупки генерируется только тогда, когда цена закрытия выше медленной скользящей средней, а средняя скользящая средняя (20 периодов) выше (высшая цена периода > самая низкая цена). Сигнал продажи генерируется только тогда, когда цена закрытия ниже медленной скользящей средней, а средняя скользящая средняя (20 периодов) ниже. Это может отфильтровать некоторые обратные фальшивые сигналы.
Сочетая использование перекрестных сигналов от быстрого индикатора QQE и фильтрацию тренда из скользящих средних, он фиксирует краткосрочные точки переворота на основных тенденциях временных рамок, чтобы сформировать относительно полную торговую систему.
Подводя итог, это стратегия, которая отслеживает среднесрочные и долгосрочные тенденции, использует быстрые индикаторы для фиксации времени краткосрочных реверсий для входа / выхода и использует фильтрацию скользящей средней, чтобы уменьшить риск торговли против направления и, таким образом, максимизировать доходность.
Существуют также некоторые потенциальные риски этой стратегии:
Противодействия и решения включают:
Есть возможности для дальнейшей оптимизации этой стратегии:
С оптимизацией параметров, объединением большего количества индикаторов и с помощью осуществимых методов управления деньгами и рисками эффективность этой стратегии может быть улучшена для реальной торговли.
В целом, быстрая стратегия 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