
Внутренняя система торговли с обратным трендом по силе цены - это стратегия торговли на уровне дневной линии, основанная на показателе внутренней силы цены (IBS). В основе этой стратегии лежит выявление потенциальных рыночных поворотных точек и суждение о состоянии перекупа и перепродажи рынка путем мониторинга относительной позиции цены закрытия предыдущей линии в пределах ее высокого и низкого уровня.
В основе этой стратегии лежит расчет и применение показателя внутренней ценовой силы (IBS).
IBS = (前一日收盘价 - 前一日最低价) / (前一日最高价 - 前一日最低价)
IBS всегда колеблется от 0 до 1:
Правила торговли в этой стратегии следующие:
Условия для участия:
Условия участия:
Помимо этого, в стратегии также введен параметр “минимальный процент от расстояния между новыми входами”, который гарантирует, что новые позиции открываются только тогда, когда цена достаточно отступает, эффективно снижая риск отступления и оптимизируя управление капиталом.
Рыночная точность: использование показателя IBS позволяет точно зафиксировать состояние перекупа и перепродажи на рынке, обеспечивая объективную математическую основу для входа и выхода, уменьшая отклонения, вызванные субъективным суждением.
Механизм фильтрации трендов: с использованием EMA в качестве трендового фильтра, обеспечивается согласованность направления торговли с основными тенденциями, эффективно избегая риска обратной торговли. Стратегия может корректировать цикл EMA в зависимости от особенностей рынка или полностью отключить это условие.
Гибкое управление позициями: стратегия поддерживает пирамидальное наращивание позиций (до 2 раз) и вводит параметр “минимальный процент от расстояния до нового входа”, реализует более интеллектуальный механизм создания запасов, который может эффективно снизить среднюю стоимость хранения позиций при возврате цены.
Автоматический контроль риска: стратегия устанавливает максимальное ограничение времени удержания позиции и автоматически ликвидирует позиции после заданного максимального периода торговли, даже если рынок не вызвал обычный сигнал выхода, эффективно контролируя время риска для одной сделки.
Оптимизация параметров: параметры по умолчанию оптимизированы для основных рыночных индексов, таких как SPY и QQQ/NDQ, и пользователь может напрямую применить рекомендуемые настройки:
Всеобъемлющие торговые модели: поддержка режимов торговли только плюсом, только минусом или двусторонней торговли, адаптированные к различным рыночным условиям и стилям торговли.
Чувствительность параметров: входные и выходные пороги IBS оказывают большое влияние на эффективность стратегии, неправильная настройка параметров может привести к чрезмерной торговле или упущению важных торговых возможностей. Рекомендуется проведение полной проверки исторических данных и оптимизации параметров для конкретных торговых сортов перед применением на рынке.
Риск шокирующего рынка: в шокирующем рынке, где нет явных тенденций, сигналы IBS могут часто появляться, что приводит к чрезмерной торговле и ненужному увеличению стоимости торгов. Решение заключается в добавлении фильтрующих условий, таких как требование подтверждения нескольких последовательных сигналов IBS или в сочетании с другими показателями (например, ATR) для оценки волатильности рынка.
Задержка резких изменений тренда: когда рынок быстро меняет тренд, индикатор IBS, рассчитанный на основе данных за предыдущий день, может отставать, что приводит к нежелательному времени для входа или выхода. Рекомендуется соответствующее корректирование порога IBS или сокращение максимального времени удержания позиции в периоды высокой волатильности.
Управление рисками: по умолчанию используйте 50% средств счета для торговли, что может привести к чрезмерному риску при многократном пополнении. Пользователям рекомендуется корректировать размер позиции и параметры пополнения в соответствии с их способностью нести риск.
Ограничения технической реализации: стратегия основана на исполнении сделки по цене закрытия, в реальной операции могут возникнуть скольжения и ценовые различия. Чтобы снизить такой риск, можно рассмотреть вопрос о заказе за определенное время до закрытия или использовать лимитную цену вместо рыночной цены.
Динамические отклонения от отклонений: текущая стратегия использует фиксированные IBS входные и выходные отклонения, и можно рассмотреть возможность изменения этих отклонений в зависимости от динамики волатильности рынка. Например, в периоды высокой волатильности следует повысить входные отклонения и снизить выходные отклонения, чтобы уменьшить ложные сигналы; в периоды низкой волатильности можно использовать более радикальные настройки. Конкретное достижение может быть достигнуто путем привязки отклонений от IBS к ATR (средняя реальная волатильность) или исторической волатильности.
Удостоверение многочасового цикла: введение многочасовой аналитической структуры, требующей одновременного подтверждения краткосрочных и среднесрочных IBS сигналов для совершения сделки. Например, помимо IBS-сигнала на дневной линии, можно также рассчитать IBS-значения на круговой или 4-часовой линии, которые вводятся только в том случае, если несколько временных периодов показывают состояние перекупа или перепродажи, что значительно повышает качество сигнала.
Интеллектуальные стоп-механизмы: существующие стратегии, основанные исключительно на выходном сигнале IBS и контроле риска при максимальном времени удержания позиции, могут быть переведены в более интеллектуальные стоп-механизмы. Например, динамические стоп-механизмы на основе ATR, стоп-механизмы для отслеживания или стоп-механизмы на основе позиций поддержки/сопротивления, чтобы лучше защитить прибыль и контролировать риски по отдельным сделкам.
Самостоятельная адаптация к состоянию рынка: внедрение механизма идентификации состояния рынка, использование различных параметров параметров в различных рыночных условиях (традиционные и волатильные рынки). Можно идентифицировать состояние рынка с помощью ADX (индекс среднего направления) или других показателей интенсивности тренда, смягчение условий IBS в условиях сильной тенденции, применение более строгих IBS-терминалов в волатильных рынках.
Оптимизация машинного обучения: использование технологий машинного обучения для оптимизации и фильтрации сигналов IBS. Посредством обученной модели идентифицируется, какие сигналы IBS более вероятно, что приведут к прибыльным сделкам, и автоматически корректируется параметры в соответствии с особенностями рынка, чтобы обеспечить самостоятельную производительность стратегии. Этот метод может значительно повысить стабильность и адаптивность стратегии, особенно в условиях различных рыночных условий и видов торгов.
Внутренняя торговая система с обратным движением по цене является стратегией торговли на уровне дневного фона, которая сочетает в себе внутренний индикатор ценовой силы (IBS) и индексную подвижную среднюю (EMA). Эта стратегия оптимизирует торговые решения, идентифицируя потенциальные рыночные поворотные точки и следуя долгосрочным тенденциям, особенно подходит для торговли акциями и индексами США.
Стратегия оптимизирована для основных рыночных индексов, таких как SPY/SPX и NDQ/QQQ, и пользователи могут торговать непосредственно с помощью рекомендуемых настроек. Однако любая торговая стратегия сопряжена с рисками, включая чувствительность к параметрам, риски рыночных потрясений и отставание при резких изменениях тенденций.
Будущие направления оптимизации включают в себя динамическую корректировку отклонений, подтверждение многократных временных циклов, интеллектуальные механизмы остановки убытков, самостоятельную адаптацию к состоянию рынка и оптимизацию машинного обучения. Эти улучшения могут еще больше повысить адаптивность и устойчивость стратегий, позволяя им хорошо работать в различных рыночных условиях.
В качестве стратегии количественного трейдинга, внутренняя система торговли с обратным трендом по интенсивности цен предоставляет трейдерам основанный на правилах, объективный метод торговли, снижает влияние эмоциональных факторов на торговые решения и помогает достичь более согласованных и предсказуемых торговых результатов.
/*backtest
start: 2024-03-05 00:00:00
end: 2025-03-03 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//Implementation by AlgoTradeKit
//v.0.5
//The IBS Trading Strategy is a daily bars long-only trading system, based on the concept of Internal Bar Strength (IBS).
//The strategy aims to identify potential reversals by monitoring how the previous bar’s close positions itself within its high-low range.
//It is suitable for stock and US indices. The default parameters are optimized for SPY/SPX and NDQ/QQQ
//Setting for QQQ: 0.09, 0.985, 220, 0, 14
//Setting for SPY: 0.11, 0.995, 200, 0, 12
//@version=6
strategy("IBS (Internal Bar Strength) Trading Strategy for SPY and NDQ", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, pyramiding = 2, currency = currency.USD, process_orders_on_close=false)
// ***** INPUTS *****
// IBS thresholds
ibsEntryThreshold = input.float(0.09, title="IBS Entry Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
ibsExitThreshold = input.float(0.985, title="IBS Exit Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
// EMA period (set to 0 to disable the EMA condition)
emaPeriod = input.int(220, title="EMA Period (0 to disable)", minval=0, maxval=5000, step=1, tooltip="Exponential Moving Average Filter Period (0 to disable)")
// Minimum percentage drop required for a new entry (for dollar-cost averaging)
minEntryPct = input.float(0, title="Minimum Distance for New Entry (%)", step=0.05, minval=0.0, maxval=100, tooltip = "Distance in Price from Last Opened Position, in Percentage Terms (%)")
maxTradeDuration = input.int(title="Maximum Trade Duration (days)", defval=14, minval=1, step=1, maxval=1000, tooltip = "Exit at close if maximum trade duration is reached.")
// Persistent variable to record the bar index when the trade is entered.
var int entryBarIndex = na
// ***** EMA CALCULATION *****
// Calculate the EMA globally if the period is greater than 0, otherwise leave as na.
emaValue = emaPeriod > 0 ? ta.ema(close, emaPeriod) : na
// ***** IBS CALCULATION *****
// Calculate IBS using the previous bar’s values.
// Guard against division by zero: if previous high equals previous low, default IBS to 0.5.
prevHigh = high[1]
prevLow = low[1]
prevClose = close[1]
ibs = (prevHigh != prevLow) ? (prevClose - prevLow) / (prevHigh - prevLow) : 0.5
// ***** ENTRY AND EXIT CONDITIONS *****
// Define the EMA condition: if emaPeriod is 0, bypass the EMA check.
emaConditionLong = emaPeriod == 0 or (close > emaValue)
emaConditionShort = emaPeriod == 0 or (close < emaValue)
// Entry: IBS is below the entry threshold and the EMA condition holds.
enterLong = (ibs < ibsEntryThreshold) and emaConditionLong
enterShort = (ibs > ibsExitThreshold) and emaConditionShort
// Exit: IBS is above the exit threshold.
exitLong = ibs > ibsExitThreshold
exitShort = ibs < ibsEntryThreshold
// ***** DOLLAR-COST AVERAGING CONDITION IN PERCENTAGE *****
// Track the last entry price. Reset when there is no open position.
var float lastEntryPrice = na
if strategy.position_size == 0
lastEntryPrice := na
// If there is no previous entry, the condition is met.
// Otherwise, allow a new entry only if the current price is lower than the last entry price
// by at least the predefined percentage (converted to a fraction).
dcaCondition = na(lastEntryPrice) or ((close < lastEntryPrice) and (((lastEntryPrice - close) / lastEntryPrice) >= (minEntryPct / 100)))
dcaConditionShort = na(lastEntryPrice) or ((close > lastEntryPrice) and (((close - lastEntryPrice) / lastEntryPrice) >= (minEntryPct / 100)))
// ***** STRATEGY ORDERS *****
// Enter a long position only if both the entry condition and the DCA condition are met.
if enterLong and dcaCondition
strategy.entry("Long", strategy.long)
lastEntryPrice := close // update the last entry price
entryBarIndex := bar_index
if enterShort and dcaConditionShort
strategy.entry("Short", strategy.short)
lastEntryPrice := close // update the last entry price
entryBarIndex := bar_index
// Compute trade duration in days using the absolute difference
tradeDuration = not na(entryBarIndex) ? math.abs(bar_index - entryBarIndex) : 0
// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitLong or (tradeDuration >= maxTradeDuration)
strategy.close("Long")
// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitShort or (tradeDuration >= maxTradeDuration)
strategy.close("Short")
// ***** PLOTTING *****
// Plot IBS for reference, along with horizontal lines for the entry and exit thresholds.
//plot(ibs, title="IBS", color=color.blue, linewidth=2)
//hline(ibsEntryThreshold, title="IBS Entry Threshold", color=color.green)
//hline(ibsExitThreshold, title="IBS Exit Threshold", color=color.red)