
Фьючерсная стратегия возврата в зону стоимости, основанная на правиле 80%, является количественной торговой системой, специально разработанной для проверки классической установки правила 80%. Основная идея стратегии заключается в том, чтобы захватить возможность возврата после того, как цена вошла в зону стоимости предыдущего торгового дня.
Стратегия основана на принципе регрессии средней стоимости по рыночным тенденциям, особенно уделяя внимание отношениям между ценами и зонами стоимости. Основная логика стратегии включает в себя:
Определение времени сделки: Стратегия настраивается на реальное 22-часовое фьючерсное окно ETH (с 5 вечера по тихоокеанскому времени до 3 вечера следующего дня) и поддерживает установку глобальных часовых поясов. Это гарантирует, что стратегия будет работать в правильной рыночной среде.
Расчет стоимостных зон: Система автоматически вычисляет высокие точки в ценном регионе ((VAH), низкие точки в ценном регионе ((VAL) и точки контроля цены ((POC):
Механизм подтверждения сигналаДля подтверждения входного сигнала цена должна вернуться в зону цены и оставаться в зоне цены не менее 45 минут (на 3-х K-линиях 15-минутной диаграммы). Это требование гарантирует подлинность намерения цены повернуть назад.
Срок действия фильтра:
Условия запуска:
Стратегия выходаОсновная цель заключается в том, чтобы выйти из сделки, когда цена достигнет POC, что соответствует основной идее возвращения к средней стоимости.
Базовая статистика: Стратегия основана на зонах ценности и правиле 80%, которые имеют прочную статистическую основу. Зона ценности представляет собой область, в которой происходит 68% ценовой активности, что соответствует стандартной погрешности нормального распределения.
Точное определение торгового окнаСтратегия: использование реального 22-часового фьючерсного окна для ETH, а не просто дневного интервала, что более точно отражает структуру рынка.
Гибкая поддержка часовых поясовНапример, если вы используете систему, которая работает в любом часовом поясе, то вы сможете использовать ее в любой точке мира, где вы находитесь.
Строгое подтверждение сигналаТребование, чтобы цена держала в зоне значения не менее 3 K-линий для подтверждения сигнала, значительно уменьшает вероятность ложного сигнала.
Поставьте четкие цели: Использование POC в качестве основной цели дает четкие преимущества, соответствующие типичным для рынка фьючерсов характеристикам регрессии средней стоимости.
Механизм двойной проверки: требует не только, чтобы цена вернулась в зону значения, но и требует отсчета границы ((VAL или VAH), что увеличивает надежность сигнала.
Ручное покрытие: Когда автоматическая логика недостаточна для реагирования на особые рыночные условия, стратегия позволяет трейдерам использовать уровни зоны стоимости, установленные вручную.
Функции дебютирования: предоставляет подробные диагностические ярлыки, которые помогают в разработке стратегий и тестировании в будущем.
Возвращение к среднему значению риска неудачиХотя правило 80% действует во многих случаях, на рынке могут возникнуть сильные тренды, которые не позволят цене вернуться к POC. Чтобы снизить этот риск, можно рассмотреть возможность добавления фильтра тренда или установки стоп-лосса.
Параметр ЧувствительностьКлючевым параметром является требование к подтверждению: 3 линии К ((45 минут). Если они слишком короткие, то могут привести к преждевременному поступлению, а если они слишком длинные, то могут упустить возможность. Рекомендуется тестировать различные параметры времени подтверждения в разных рыночных условиях.
Зависимость от рыночной среды: Эта стратегия лучше всего работает на рынках с колебаниями в диапазоне, но может работать плохо в условиях сильной тенденции или высокой волатильности. следует рассмотреть возможность добавления фильтра на рыночные условия.
Время рискованного выбора: эффективность стратегии может зависеть от выбранного торгового периода (Нью-Йорк, Лондон, Токио или все погода). Рекомендуется проанализировать историческую эффективность различных торговых периодов и выбрать оптимальный период.
Ограничения метода расчета ценных зон: Использование фиксированного диапазона 68% и упрощенного расчета POC может не точно отражать истинное распределение стоимости в некоторых рынках. Возможно, более точно будет использовать метод расчета стоимостных зон, основанный на количестве сделок.
Отсутствие механизмов сдерживанияПри отсутствии четкого механизма остановки убытков в текущей стратегии может привести к серьезным убыткам при экстремальных рыночных тенденциях. Рекомендуется внедрение остановки убытков на основе ATR или фиксированного процента.
Условия динамического подтвержденияПри использовании фиксированных 3-х K-линий в качестве условий подтверждения, можно рассмотреть возможность корректировки этого параметра в зависимости от волатильности рынка. В периоды высокой волатильности может потребоваться более длительный срок подтверждения, а в периоды низкой волатильности может быть сокращен.
Ценностные зоны на основе объемов сделок: Расчет текущих ценных зон является упрощенным методом, основанным на ценах. Можно перейти к анализу TPO (Time Price Opportunity) на основе количества сделок или к распределению объемов сделок (Volume Profile), что будет более точно отражать консенсусные ценные зоны участников рынка.
Подтверждение многократных временных рамокВ сочетании с более широкими временными рамками, можно отфильтровать обратные сигналы, и только 80% правил торговли могут повысить вероятность успеха стратегии.
Настройка адаптивных целейВ настоящее время стратегия фиксирует использование POC в качестве цели. Можно рассмотреть возможность установки динамических целей в соответствии с волатильностью рынка, например, установка более отдаленных целей (например, VAH или VAL) в высоко волатильных рынках.
Фильтр частоты колебаний: Добавление ATR или других волатильных показателей в качестве фильтрации, чтобы избежать торговли в условиях рынка с очень низкой волатильностью или очень высокой волатильностью.
Оптимизация временных интервалов: Проанализируйте эффективность стратегии в разных часовых поясах и торговых часах, чтобы найти оптимальную комбинацию торговых часов.
Интеллектуальные механизмы устранения убытковВнедрение интеллектуальной логики остановки, например, остановки на основе поддержки/сопротивления или отслеживания остановки на основе ценовых колебаний, для лучшего управления рисками.
Сигнальная мощность: Разработка системы оценки качества сигнала в сочетании с силой возобновления цены, подтверждением характеристик K-линий и другими рыночными факторами, для каждого сигнала присваивается оценка силы, используемая для определения размера позиции.
Фьючерсная стратегия поворота зоны стоимости, основанная на правиле 80%, - это тщательно разработанная количественная торговая система, предназначенная для захвата возможности поворота цены в зону стоимости. Она предоставляет трейдерам систематизированный способ применения классического правила торговли 80%, с помощью строгогого механизма подтверждения сигнала, четкого определения периода времени и четкой целевой настройки.
Основные преимущества стратегии заключаются в ее статистической основе, строгих требованиях к подтверждению сигналов и гибких вариантах конфигурации. Тем не менее, существуют также риски, такие как провал среднезначной регрессии, чувствительность параметров и зависимость от рыночной среды.
Эта система, основанная на правиле 80%, обеспечивает надежную отправную точку для трейдеров, которые ищут стратегию среднезначного возврата для использования в фьючерсных рынках, и может быть дополнительно настроена и оптимизирована в соответствии с личными предпочтениями в отношении риска и рыночными взглядами.
/*backtest
start: 2025-07-09 00:00:00
end: 2025-07-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_OKX","currency":"SOL_USDT","balance":200000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dscottmuller
// === Update July 15, 2025 ===
// • Converted to strategy for backtesting
// • POC-based exits for precision targeting
// • Full move markers for research tracking
// • Global time zone input (default: America/Los_Angeles)
//@version=5
strategy("80% Rule Backtest", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === General Inputs ===
useAllMarkets = input.bool(false, "Use 24-Hour Session (All Markets)")
sessionChoice = input.string("New York", "Market Session", options=["New York", "London", "Tokyo"])
showSessionBox = input.bool(false, "Highlight Selected Session")
enableSounds = input.bool(false, "Enable Audible Alerts")
extendLines = input.bool(true, "Extend Lines Right")
// === Advanced Session Settings ===
group = "Advanced Session Settings"
showAutoLevels = input.bool(true, "Show Auto-Calculated VAH/POC/VAL", group=group)
useManualLevels = input.bool(false, "Use Manual VAH/POC/VAL", group=group)
manualVAH = input.float(0.0, "Manual VAH", group=group)
manualVAL = input.float(0.0, "Manual VAL", group=group)
manualPOC = input.float(0.0, "Manual POC", group=group)
debugMode = input.bool(false, "Enable Debug Mode", group=group)
// === Time Zone Selection ===
sessionTZ = input.string("America/Los_Angeles", "ETH Session Timezone",
options=[
"America/Los_Angeles", // Default: Pacific Time
"America/New_York",
"America/Chicago",
"America/Denver",
"Europe/London",
"Europe/Paris",
"Asia/Tokyo",
"Australia/Sydney"
], group=group)
// === Market Session Filter ===
nySession = time(timeframe.period, "0930-1600", "America/New_York")
londonSession = time(timeframe.period, "0800-1630", "Europe/London")
tokyoSession = time(timeframe.period, "0900-1500", "Asia/Tokyo")
allSession = time(timeframe.period, "0000-0000")
inSession = useAllMarkets ? not na(allSession) : sessionChoice == "New York" ? not na(nySession) : sessionChoice == "London" ? not na(londonSession) : sessionChoice == "Tokyo" ? not na(tokyoSession) : false
bgcolor(showSessionBox and inSession ? color.new(color.blue, 90) : na)
// === ETH Session Window (22-Hour Futures) ===
ethStart = timestamp(sessionTZ, year, month, dayofmonth - 1, 17, 00)
ethEnd = timestamp(sessionTZ, year, month, dayofmonth, 15, 00)
inEthWindow = time("30") >= ethStart and time("30") <= ethEnd
ethHigh = inEthWindow ? high : na
ethLow = inEthWindow ? low : na
ethClose = inEthWindow ? close : na
extHigh = ta.highest(ethHigh, 100)
extLow = ta.lowest(ethLow, 100)
extClose = ta.valuewhen(not na(ethClose), ethClose, 0)
// === Value Area Calculations ===
vaRange = (extHigh - extLow) * 0.68
vah = extHigh - ((extHigh - extLow - vaRange) / 2)
val = extLow + ((extHigh - extLow - vaRange) / 2)
poc = (extHigh + extLow + extClose) / 3
finalVAH = useManualLevels ? manualVAH : vah
finalVAL = useManualLevels ? manualVAL : val
finalPOC = useManualLevels ? manualPOC : poc
// === Signal Logic ===
validLongDay = extClose < finalVAL
validShortDay = extClose > finalVAH
insideVA = close > finalVAL and close < finalVAH
reenteredFromBelow = validLongDay and close > finalVAL
reenteredFromAbove = validShortDay and close < finalVAH
var int barsInside = 0
barsInside := ta.change(time("D")) ? 0 : insideVA ? barsInside + 1 : 0
insideConfirmed = barsInside >= 3
retestVAL = validLongDay and low <= finalVAL
retestVAH = validShortDay and high >= finalVAH
longSignal = inSession and validLongDay and reenteredFromBelow and insideConfirmed and retestVAL
shortSignal = inSession and validShortDay and reenteredFromAbove and insideConfirmed and retestVAH
longBar = longSignal and not longSignal[1]
shortBar = shortSignal and not shortSignal[1]
// === Strategy Entries ===
if longBar
strategy.entry("Long", strategy.long, comment="80% Long Signal")
if shortBar
strategy.entry("Short", strategy.short, comment="80% Short Signal")
// === Strategy Exits at POC ===
strategy.exit("Long to POC", from_entry="Long", limit=finalPOC)
strategy.exit("Short to POC", from_entry="Short", limit=finalPOC)
// === Track Full Move (Visual Only) ===
longFullHit = longBar and high >= finalVAH
shortFullHit = shortBar and low <= finalVAL
plotshape(longFullHit, title="Full Move Long", location=location.abovebar, color=color.green, style=shape.triangleup, text="FULL")
plotshape(shortFullHit, title="Full Move Short", location=location.belowbar, color=color.red, style=shape.triangledown, text="FULL")
// === Debug Diagnostics ===
if debugMode and (longBar or shortBar)
debugText = (useManualLevels ? "Manual Mode" : "Auto Mode") + " | TZ: " + sessionTZ + " | 80% Triggered | barsInside: " + str.tostring(barsInside)
label.new(bar_index, close, debugText, xloc.bar_index, longBar ? yloc.belowbar : yloc.abovebar, style=label.style_label_left, textcolor=color.white, size=size.small, color=color.new(color.gray, 70))