
Многофакторная уравновешенная торговая стратегия - это количественная торговая стратегия, которая использует в своем составе сигналы различных технических индикаторов. Эта стратегия хитро сочетает в себе энергию показателей скорости изменения (ROC), относительной силы (RSI), индекса товарных каналов (CCI), индекса Уильяма (%R) и индекса среднего направления (ADX) для определения динамики рынка и создания торговых сигналов путем расчета комплексного индикатора колебаний.
Наибольшее преимущество этой стратегии заключается в том, что она позволяет объективно и систематически судить о рынке и искать оптимальные моменты входа и выхода из рынка. Когда волатильная индикаторная линия пересекает линию сверхпокупа 0,75, она создает сигнал покупки; когда волатильная индикаторная линия пересекает линию сверхпродажи 0,25, она создает сигнал продажи.
В центре стратегии торговли с многофакторным уравновешивающим колебателем находится расчет комплексного индикатора колебаний. Шаги по расчету этого индикатора следующие:
Вычислите значения для каждого отдельного технического показателя: включая показатель скорости изменения (ROC), показатель относительной силы (RSI), показатель товарного коридора (CCI), показатель Уильяма (%R) и средний индекс направления (ADX)
Стандартизация значений технических показателей в диапазоне 0-1 для сравнения
Используя мысль о взвешенном среднем, вычислите значение комплексного волатильного индикатора. Каждый технический индикатор имеет регулируемый вес, принимая по умолчанию ROC 2, RSI 0,5, CCI 2, % R 0,5, ADX 0,5. Умножьте значение каждого стандартизированного индикатора на соответствующий вес, суммируйте и делите на сумму весов, чтобы получить комплексный волатильный показатель в диапазоне 0-1
Соответствующие торговые сигналы создаются, когда это комбинированное колебание пересекает надлежащим образом установленные линии перекупа и линии перепродажи.
Как видно, эта стратегия гибко использует энергию нескольких технических показателей, чтобы систематически оценивать рынок и принимать торговые решения. Это позволяет избежать рыночного шума, вызванного одним техническим показателем, и поддерживает стабильность торговых решений в нескольких ситуациях.
Торговая стратегия с многофакторным уравновешивающим колебателем имеет следующие преимущества:
Предоставление объективных, систематических методов анализа рынка. Использование нескольких технических показателей позволяет избежать недостатков одного инструмента, а также генерировать практические торговые сигналы с помощью количественных методов.
Стратегии оптимизации входа и выхода. Точная оценка и стандартизированная обработка волатильных индикаторов обеспечивают количественную основу для оценки рынка.
Высота может быть настроена настраиваемость. Можно скорректировать вес и параметры индикаторов в соответствии с индивидуальным стилем торговли, чтобы адаптироваться к различным рыночным условиям.
В режиме реального времени сигналы предупреждения. Можно установить сигналы о покупке, сигналы о выходе, чтобы обеспечить своевременную информацию о последних ситуациях на рынке.
Строгое отсчет и оптимизация. До начала боевых действий, благодаря полному отсчету исторических данных, можно оценить и оптимизировать параметры стратегии, повышая эффективность боевых действий.
Несмотря на то, что у многофакторных уравновешенных трейдеров есть много преимуществ, в практическом применении они также имеют определенные риски, которые проявляются в следующем:
Риск оптимизации параметров. Если ненадлежащие значения и параметры будут установлены неправильно, это повлияет на эффективность диска. В этом случае необходимо найти оптимальные параметры с помощью большого количества обратных измерений.
Риск установки промежуточного периода перекупа. Различные обстоятельства могут быть использованы для определения перекупа и перепродажи.
Риск рассеяния показателя. Когда часть показателя рассеивается, это может повлиять на решение о совокупном показателе. В этом случае можно исключить этот показатель или снизить вес.
Ограничения количественных моделей. Любая количественная модель может не работать в определенных условиях. Операторы все же должны сохранять достаточную осведомленность о рисках.
Чтобы избежать риска, необходимо провести полное отсчет и оптимизацию параметров до реального времени, понять ограничения стратегии, отследить эффективность реального времени, гибко адаптировать параметры или настройки весов в соответствии с ситуацией.
Торговая стратегия многофакторного уравновешивателя может быть оптимизирована в следующих аспектах:
Продолжайте обогащать многофакторные модели. Можно рассмотреть возможность добавления большего количества различных типов технических показателей, чтобы повысить оценочную способность модели.
Попробуйте методы машинного обучения. Вы можете обучить такие высокотехнологичные модели, как нейронные сети, прогнозировать отдельные показатели и извлекать больше скрытых признаков.
Сочетание фундаментальных и макроэкономических аспектов. Добавление экономических данных, отчетов о результатах деятельности и других фундаментальных факторов для оценки состояния рынка.
Применение адаптивной корректировки. Динамическая корректировка весов и параметров индикатора в зависимости от изменения рыночной среды.
Внедрение механизмов сдерживания убытков. Установка разумных пределов сдерживания убытков, активное управление единичными потерями.
Интегрированное управление капиталом. Корректировка размеров позиций в зависимости от размера позиций, чтобы добиться количественного управления капиталом.
Стратегия торговли с многофакторным уравновешивающим шокером является очень хорошей количественной стратегией торговли. Она объединяет в себе суть нескольких технических показателей, чтобы судить о рынке с помощью строгих количественных методов. В то же время она обладает высокой гибкостью настройки, которую можно настроить на индивидуальный стиль.
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © Julien_Eche
//@version=5
strategy("Ultimate Balance Oscillator Strategy", overlay=true)
// Indicator Weights
weightROC = input.float(2, "Rate of Change (ROC) Weight", group="Weightings")
weightRSI = input.float(0.5, "Relative Strength Index (RSI) Weight", group="Weightings")
weightCCI = input.float(2, "Commodity Channel Index (CCI) Weight", group="Weightings")
weightWilliamsR = input.float(0.5, "Williams %R Weight", group="Weightings")
weightADX = input.float(0.5, "Average Directional Index (ADX) Weight", group="Weightings")
// ROC Settings
rocLength = input.int(20, "Length", minval=1, group="ROC")
// RSI Settings
rsiLength = input.int(14, "Length", minval=1, group="RSI")
// CCI Settings
cciLength = input.int(20, "Length", minval=1, group="CCI")
// Williams %R Settings
williamsRLength = input.int(14, "Length", minval=1, group="Williams %R")
// ADX Settings
adxLength = input.int(14, "ADX Length", minval=1, group="ADX")
adxDiLength = input.int(14, "DI Length", minval=1, group="ADX")
// Source
source_options = input.string("hlc3", "Source", options=["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"])
price_open = request.security(syminfo.tickerid, "D", open)
price_high = request.security(syminfo.tickerid, "D", high)
price_low = request.security(syminfo.tickerid, "D", low)
price_close = request.security(syminfo.tickerid, "D", close)
price_hl2 = request.security(syminfo.tickerid, "D", hl2)
price_hlc3 = request.security(syminfo.tickerid, "D", hlc3)
price_ohlc4 = request.security(syminfo.tickerid, "D", ohlc4)
get_source(source_option) =>
price = price_close
if source_option == "open"
price := price_open
else if source_option == "high"
price := price_high
else if source_option == "low"
price := price_low
else if source_option == "close"
price := price_close
else if source_option == "hl2"
price := price_hl2
else if source_option == "hlc3"
price := price_hlc3
else
price := price_ohlc4
price
src = get_source(source_options)
// Overbought/Oversold Levels
obLevel = input.float(0.75, "Overbought Level")
osLevel = input.float(0.25, "Oversold Level")
// Calculating the indicators
rocValue = ta.change(close, rocLength)
rsiValue = ta.rsi(close, rsiLength)
cciValue = (src - ta.sma(src, cciLength)) / (0.015 * ta.dev(src, cciLength))
williamsRValue = -100 * (ta.highest(high, williamsRLength) - close) / (ta.highest(high, williamsRLength) - ta.lowest(low, williamsRLength))
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
adxValue = adx(adxDiLength, adxLength)
// Normalizing the values
normalize(value, min, max) =>
(value - min) / (max - min)
normalizedROC = normalize(rocValue, ta.lowest(rocValue, rocLength), ta.highest(rocValue, rocLength))
normalizedRSI = normalize(rsiValue, 0, 100)
normalizedCCI = normalize(cciValue, ta.lowest(cciValue, cciLength), ta.highest(cciValue, cciLength))
normalizedWilliamsR = normalize(williamsRValue, ta.lowest(williamsRValue, williamsRLength), ta.highest(williamsRValue, williamsRLength))
normalizedADX = normalize(adxValue, 0, 50)
// Calculating the combined oscillator line
oscillatorLine = (normalizedROC * weightROC + normalizedRSI * weightRSI + normalizedCCI * weightCCI + normalizedWilliamsR * weightWilliamsR + normalizedADX * weightADX) / (weightROC + weightRSI + weightCCI + weightWilliamsR + weightADX)
// Strategy conditions
enterLong = ta.crossover(oscillatorLine, obLevel)
exitLong = ta.crossunder(oscillatorLine, osLevel)
// Strategy orders
if (enterLong)
strategy.entry("Buy", strategy.long)
if (exitLong)
strategy.close("Buy")
// Alert conditions
if (enterLong)
alert("Buy signal")
if (exitLong)
alert("Exit signal")