
Высокочасовая весовая скользящая средняя зона прорыва количественной торговли - это торговая система, основанная на ценовых прорывах в диапазоне, которая сочетает в себе высокие весовые скользящие средние ((WMA) и процентные диапазоны для построения торговой зоны. Эта стратегия генерирует входные сигналы, идентифицируя, когда цена прорывается вверх или вниз, и применяет пакеты прибыли и стоп-убытков для управления риском.
Основным принципом этой стратегии является использование весовых скользящих средних высоких временных рамок для построения диапазона ценовой активности. Конкретные шаги по реализации следующие:
Стратегия использует визуальные элементы, такие как изменение цвета фона, пользовательские диаграммы и знаки входа/выхода, что позволяет трейдерам интуитивно идентифицировать торговые промежутки и текущее состояние рынка. Кроме того, стратегия также показывает процентное изменение текущих позиций и применяет коэффициент умножения (по умолчанию 20) для выделения изменения цены.
При углубленном анализе кода этой стратегии мы обнаруживаем следующие значительные преимущества:
Фильтр высотыС помощью использования более высоких весовых скользящих средних на более высоких временных рамках, стратегия может эффективно отсеивать краткосрочный рыночный шум, улавливать более значимые ценовые движения и уменьшать ложные сигналы.
Динамические торговые зоныСтратегия, основанная на динамическом строительстве торговых зон на основе средней цены и процентной доли, способна адаптироваться к различным рыночным условиям и волатильности, избегая ограничений фиксированных уровней поддержки/сопротивления.
Четкие правила входа и выходаСтратегия: обеспечивает четкие входные сигналы ((прорыв вверх/вниз по рельсам) и правила выхода ((порядочные остановки и остановки), исключает субъективность в торговых решениях.
Интеграция управления рискомВстроенный стоп-лост и блок-стоп механизм помогает защитить капитал и блокировать прибыль, является полноценной торговой системой.
Визуальные отзывыСтратегия предлагает множество визуальных элементов, включая цвета фонового фона в торговых зонах, ярлыки с изменениями в процентах и знаки входа/выхода, чтобы помочь трейдерам быстро оценить состояние рынка.
Гибкие параметры: пользователь может настроить несколько параметров в зависимости от личных предпочтений и различных рыночных условий, включая временные рамки, циклы скользящих средних, проценты коэффициентов, уровень стоп/стоп-убытков и визуальные элементы.
Координация многовременных рамок: Стратегия сочетает в себе высокое качество сигнала временных рамок и точность исполнения текущих временных рамок, что позволяет осуществлять координацию в нескольких временных рамах.
Несмотря на многочисленные преимущества этой стратегии, существуют следующие потенциальные риски:
Прорыв ложного сигналаДля снижения этого риска можно рассмотреть возможность добавления механизмов подтверждения, например, требуя, чтобы цена оставалась на протяжении некоторого времени после прорыва или подтверждалась в сочетании с другими показателями.
Не подходит для рынка с высокой волатильностьюВ этом случае можно увеличить пробелы или переключиться на более высокие временные рамки.
Недостаточно гибкий фиксированный процент остановки/остановки: Волатильность рынка меняется со временем, фиксированный процент стоп-стоп может быть не всегда оптимальным. Можно рассмотреть возможность динамического корректирования уровня стоп-стоп на основе волатильности показателей (например, ATR).
Параметр Чувствительность: Показатели стратегии могут быть очень чувствительны к параметрам, таким как WMA-циклы, интервальные коэффициенты и стоп/стоп-проценты. Необходимо проводить полное историческое отслеживание и оптимизацию параметров.
Оптимизация риска: чрезмерное сопоставление конкретных исторических данных может привести к плохим будущим показателям. Рекомендуется проводить обратную проверку на нескольких рынках и в течение определенного периода времени, сохраняя параметры относительно стабильными.
Приспособность к изменению рыночных тенденций: эта стратегия не будет корректировать свой диапазон в соответствии с новыми рыночными тенденциями после прорыва в диапазоне, что может привести к ошибочным сигналам в сильно трендовых рынках. Можно рассмотреть возможность добавления фильтра тренда или диапазона динамической корректировки.
Основываясь на глубоком анализе кода, эта стратегия может быть оптимизирована в следующих направлениях:
Добавление механизма подтверждения взломаДля уменьшения вероятности ложного прорыва можно добавить дополнительные условия подтверждения, такие как требование закрытия цены после прорыва, подтверждение объема сделки или использование других технических показателей (например, RSI, MACD) для перекрестной подтверждения.
Динамические параметры остановки: замена фиксированного стопроцентного стоп-листа на динамический стоп-лист, основанный на волатильности рынка, например, использование ATR (средний реальный диапазон) для установки уровня стоп-листа, чтобы стратегия лучше адаптировалась к различным рыночным условиям.
Добавить фильтр трендовДобавление компонентов для распознавания тенденций, таких как долгосрочные движущиеся средние или индикаторы ADX, для корректировки торгового поведения на рынках с сильной тенденцией, например, только больше в восходящей тенденции и только меньше в нисходящей.
Оптимизация времени поступленияПримечание: существующая стратегия включает в себя немедленное вхождение в рынок, когда цена только что пересекает границу между зонами, и может рассматривать возможность ожидания обратного вызова или подтверждения определенной формы, чтобы улучшить качество времени входа.
Добавление модуля управления деньгами: более сложные расчеты размеров позиций, динамическая корректировка размеров позиций на основе размеров счетов, рыночной волатильности и текущего риска торговли, а не использование фиксированных позиций.
Добавить фильтр состояния рынка: идентифицировать состояние рынка (например, тенденции, колебания или высокие колебания) и корректировать параметры стратегии или приостановить торговлю в зависимости от различных состояний рынка.
Реализация адаптивных параметров- позволяет автоматически корректировать ключевые параметры, такие как интервальные коэффициенты, WMA-циклы и т. д., в зависимости от исторической волатильности или других рыночных характеристик, повышая адаптивность стратегии;
Интеграция сигналов многовременных рамокНе только использование высоких временных рамок WMA для построения диапазонов, но и анализ ценового поведения и показателей на несколько временных рамок, позволяя более полный анализ рынка и принятие торговых решений.
Высокочасовая стратегия по количественному прорыву в пределах весовых скользящих средних диапазонов является хорошо структурированной торговой системой, которая построена для захвата возможностей для прорыва цены путем сочетания высоких временных рамок с весовыми скользящими средними и динамическими диапазонами. Преимущества стратегии заключаются в ее высоких возможностях фильтрации часовых рамок, четких торговых правилах, встроенных механизмах управления рисками и богатой визуальной обратной связи. Однако она также сталкивается с такими проблемами, как прорыв ложных сигналов, чувствительность к параметрам и адаптивность рынка.
Оптимизация направлений реализации рекомендаций, таких как добавление механизмов подтверждения прорыва, динамических установок для остановки убытков, фильтрации тенденций и параметров самостоятельной адаптации, может дополнительно повысить устойчивость и прибыльность стратегии. Самое важное, чтобы полностью реализовать потенциал стратегии, трейдеру следует полностью понять принципы стратегии и провести достаточную историческую ретроспекцию, чтобы скорректировать параметры в соответствии с конкретными рынками и личными предпочтениями в отношении риска.
Эта стратегия, основанная на прорыве в диапазоне, подходит для среднесрочных и долгосрочных трейдеров, особенно для тех, кто стремится захватить важные ценовые прорывы, сохраняя контроль над риском. С постоянной оптимизацией и настройкой эта стратегия может стать мощным оружием в инструментарии трейдера.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-05-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy('ZONE FLOW', overlay=true)
// Input parameters
src = close
src1 = open
src2 = low
src3 = high
Min = input(60, title='Minimum Period')
len = timeframe.isintraday and timeframe.multiplier >= 1 ? Min / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7
c1 = ta.wma(src, len)
o1 = ta.wma(src1, len)
l1 = ta.wma(src2, len)
h1 = ta.wma(src3, len)
HTF = input.timeframe('M', title='Higher Time Frame')
ti = ta.change(time(HTF)) != 0
c = fixnan(ti ? c1 : na)
o = fixnan(ti ? o1 : na)
h = fixnan(ti ? h1 : na)
l = fixnan(ti ? l1 : na)
// Calculating mid-point
m = (h + l) / 2
// Calculating ratio lines
ratio = input.float(0.1, title='% ratio', minval=0.001, maxval=10)
r1 = m * ratio
u = m + r1
d = m - r1
// Take profit settings
takeProfitPercentage1 = input.float(10.0, title='Take Profit 1 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity1 = input.float(50.0, title='Take Profit 1 Quantity (%)', minval=0.1, maxval=100.0) / 100
takeProfitPercentage2 = input.float(20.0, title='Take Profit 2 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity2 = input.float(50.0, title='Take Profit 2 Quantity (%)', minval=0.1, maxval=100.0) / 100
// Stop loss settings
stopLossPercentage = input.float(5.0, title='Stop Loss (%)', minval=0.1, maxval=100.0) / 100
// Number of bars to extend lines
extensionBars = input.int(5, title='Number of Bars to Extend Lines', minval=1)
// Number of bars to offset the percentage label
percentOffsetBars = input.int(25, title='Number of Bars to Offset Percentage Label', minval=1)
// Input for multiplying the percentage change
multiplierFactor = input.int(20, title='Multiplier for Percentage Change', minval=1)
// Input for background colors
bgColor1 = input(color.new(color.blue, 90), title='Background Color 1')
bgColor2 = input(color.new(color.orange, 90), title='Background Color 2')
// Plot high, low, and ratio lines
ppo = plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_stepline)
ppc = plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_stepline)
plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_circles, linewidth=2)
plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_circles, linewidth=2)
// Fill the background between ratio lines with two different colors
fill(ppo, ppc, color=bgColor1)
// Calculate mid-point for background color switching
midPoint = (u + d) / 2
bgColorSwitch = close >= midPoint ? bgColor1 : bgColor2
fill(ppo, ppc, color=bgColorSwitch, transp=90)
// Initialize variables for lines and labels
var line tp1Line = na
var line tp2Line = na
var line stopLossLine = na
var line entryLine = na
var label tp1Label = na
var label tp2Label = na
var label stopLossLabel = na
var label entryLabel = na
var label percentLabel = na
// Variable to store the entry bar index
var int entryBarIndexLong = na
var int entryBarIndexShort = na
// Function to delete old labels and lines
deleteOldLinesAndLabels() =>
if not na(tp1Line)
line.delete(tp1Line)
if not na(tp2Line)
line.delete(tp2Line)
if not na(stopLossLine)
line.delete(stopLossLine)
if not na(entryLine)
line.delete(entryLine)
if not na(tp1Label)
label.delete(tp1Label)
if not na(tp2Label)
label.delete(tp2Label)
if not na(stopLossLabel)
label.delete(stopLossLabel)
if not na(entryLabel)
label.delete(entryLabel)
if not na(percentLabel)
label.delete(percentLabel)
// Strategy logic
longCondition = ta.crossover(close, u)
shortCondition = ta.crossunder(close, d)
if longCondition
strategy.entry('Long', strategy.long)
entryBarIndexLong := bar_index
entryBarIndexLong
if shortCondition
strategy.entry('Short', strategy.short)
entryBarIndexShort := bar_index
entryBarIndexShort
// Calculate take profit and stop loss levels for long positions
if strategy.position_size > 0 // Check if there's an open long position
takeProfitLevelLong1 = strategy.position_avg_price * (1 + takeProfitPercentage1)
takeProfitLevelLong2 = strategy.position_avg_price * (1 + takeProfitPercentage2)
stopLossLevelLong = strategy.position_avg_price * (1 - stopLossPercentage)
entryPrice = strategy.position_avg_price
// Delete existing lines and labels if they exist
deleteOldLinesAndLabels()
// Exit a portion of the position at each take profit level
strategy.exit('TP1', 'Long', limit=takeProfitLevelLong1, qty=strategy.position_size * takeProfitQuantity1)
strategy.exit('TP2', 'Long', limit=takeProfitLevelLong2, qty=strategy.position_size * takeProfitQuantity2)
strategy.exit('Stop Loss', 'Long', stop=stopLossLevelLong)
// Display percentage change from entry price
percentChange = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
percentMultiplied = percentChange * multiplierFactor
percentColor = percentChange >= 0 ? color.green : color.red
// Update label position to follow price line with larger text size
percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
percentLabel
if strategy.position_size < 0 // Check if there's an open short position
takeProfitLevelShort1 = strategy.position_avg_price * (1 - takeProfitPercentage1)
takeProfitLevelShort2 = strategy.position_avg_price * (1 - takeProfitPercentage2)
stopLossLevelShort = strategy.position_avg_price * (1 + stopLossPercentage)
entryPrice = strategy.position_avg_price
// Delete existing lines and labels if they exist
deleteOldLinesAndLabels()
// Exit a portion of the position at each take profit level
strategy.exit('TP1', 'Short', limit=takeProfitLevelShort1, qty=strategy.position_size * takeProfitQuantity1)
strategy.exit('TP2', 'Short', limit=takeProfitLevelShort2, qty=strategy.position_size * takeProfitQuantity2)
strategy.exit('Stop Loss', 'Short', stop=stopLossLevelShort)
// Display percentage change from entry price
percentChange = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
percentMultiplied = percentChange * multiplierFactor
percentColor = percentChange >= 0 ? color.green : color.red
// Update label position to follow price line with larger text size
percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
percentLabel
// Add buy and sell signals with shapes
plotshape(series=longCondition, title='Buy Signal', location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text='.')
plotshape(series=shortCondition, title='Sell Signal', location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text='.')
// Remove old labels when they go out of scope
if bar_index % 50 == 0
deleteOldLinesAndLabels()
// Define colors for candles based on background color
candleColorBull = bgColorSwitch // Use background color for bullish candles
candleColorBear = bgColorSwitch // Use background color for bearish candles
borderColorBull = color.black // Border color for bullish candles
borderColorBear = color.black // Border color for bearish candles
// Plot candles with custom colors
plotcandle(open, high, low, close, color=close >= open ? candleColorBull : candleColorBear, bordercolor=close >= open ? borderColorBull : borderColorBear, wickcolor=color.gray)