Стратегия разворота фьючерсной зоны стоимости, основанная на правиле 80%

ETH VOL POC VAH VAL TPO
Дата создания: 2025-07-17 15:50:07 Последнее изменение: 2025-07-17 15:50:07
Копировать: 0 Количество просмотров: 226
2
Подписаться
319
Подписчики

Стратегия разворота фьючерсной зоны стоимости, основанная на правиле 80% Стратегия разворота фьючерсной зоны стоимости, основанная на правиле 80%

Обзор

Фьючерсная стратегия возврата в зону стоимости, основанная на правиле 80%, является количественной торговой системой, специально разработанной для проверки классической установки правила 80%. Основная идея стратегии заключается в том, чтобы захватить возможность возврата после того, как цена вошла в зону стоимости предыдущего торгового дня.

Стратегический принцип

Стратегия основана на принципе регрессии средней стоимости по рыночным тенденциям, особенно уделяя внимание отношениям между ценами и зонами стоимости. Основная логика стратегии включает в себя:

  1. Определение времени сделки: Стратегия настраивается на реальное 22-часовое фьючерсное окно ETH (с 5 вечера по тихоокеанскому времени до 3 вечера следующего дня) и поддерживает установку глобальных часовых поясов. Это гарантирует, что стратегия будет работать в правильной рыночной среде.

  2. Расчет стоимостных зон: Система автоматически вычисляет высокие точки в ценном регионе ((VAH), низкие точки в ценном регионе ((VAL) и точки контроля цены ((POC):

    • Ранжирование зоны значений определяется как 68% от общей разницы между высокой и низкой точкой за сутки (диапазон стандартного отклонения)
    • VAH и VAL рассчитываются с помощью высоких и низких точек и диапазона ценных зон
    • POC рассчитывается как ((высокая цена + низкая цена + цена закрытия) / 3
  3. Механизм подтверждения сигналаДля подтверждения входного сигнала цена должна вернуться в зону цены и оставаться в зоне цены не менее 45 минут (на 3-х K-линиях 15-минутной диаграммы). Это требование гарантирует подлинность намерения цены повернуть назад.

  4. Срок действия фильтра:

    • Действует в течение нескольких дней: цена закрытия дня ниже VAL
    • Действующий свободный день: цена закрытия дня выше, чем VAH
  5. Условия запуска:

    • Многоголовый сигнал: в течение нескольких дней цены возвращаются в зону цены снизу, сохраняют 3 K-линии в зоне и отсчитывают VAL
    • Порожный сигнал: в день, когда действует свободное время, цена возвращается в зону цены сверху, сохраняя в зоне 3 K-линии и отсчитывая VAH
  6. Стратегия выходаОсновная цель заключается в том, чтобы выйти из сделки, когда цена достигнет POC, что соответствует основной идее возвращения к средней стоимости.

Стратегические преимущества

  1. Базовая статистика: Стратегия основана на зонах ценности и правиле 80%, которые имеют прочную статистическую основу. Зона ценности представляет собой область, в которой происходит 68% ценовой активности, что соответствует стандартной погрешности нормального распределения.

  2. Точное определение торгового окнаСтратегия: использование реального 22-часового фьючерсного окна для ETH, а не просто дневного интервала, что более точно отражает структуру рынка.

  3. Гибкая поддержка часовых поясовНапример, если вы используете систему, которая работает в любом часовом поясе, то вы сможете использовать ее в любой точке мира, где вы находитесь.

  4. Строгое подтверждение сигналаТребование, чтобы цена держала в зоне значения не менее 3 K-линий для подтверждения сигнала, значительно уменьшает вероятность ложного сигнала.

  5. Поставьте четкие цели: Использование POC в качестве основной цели дает четкие преимущества, соответствующие типичным для рынка фьючерсов характеристикам регрессии средней стоимости.

  6. Механизм двойной проверки: требует не только, чтобы цена вернулась в зону значения, но и требует отсчета границы ((VAL или VAH), что увеличивает надежность сигнала.

  7. Ручное покрытие: Когда автоматическая логика недостаточна для реагирования на особые рыночные условия, стратегия позволяет трейдерам использовать уровни зоны стоимости, установленные вручную.

  8. Функции дебютирования: предоставляет подробные диагностические ярлыки, которые помогают в разработке стратегий и тестировании в будущем.

Стратегический риск

  1. Возвращение к среднему значению риска неудачиХотя правило 80% действует во многих случаях, на рынке могут возникнуть сильные тренды, которые не позволят цене вернуться к POC. Чтобы снизить этот риск, можно рассмотреть возможность добавления фильтра тренда или установки стоп-лосса.

  2. Параметр ЧувствительностьКлючевым параметром является требование к подтверждению: 3 линии К ((45 минут). Если они слишком короткие, то могут привести к преждевременному поступлению, а если они слишком длинные, то могут упустить возможность. Рекомендуется тестировать различные параметры времени подтверждения в разных рыночных условиях.

  3. Зависимость от рыночной среды: Эта стратегия лучше всего работает на рынках с колебаниями в диапазоне, но может работать плохо в условиях сильной тенденции или высокой волатильности. следует рассмотреть возможность добавления фильтра на рыночные условия.

  4. Время рискованного выбора: эффективность стратегии может зависеть от выбранного торгового периода (Нью-Йорк, Лондон, Токио или все погода). Рекомендуется проанализировать историческую эффективность различных торговых периодов и выбрать оптимальный период.

  5. Ограничения метода расчета ценных зон: Использование фиксированного диапазона 68% и упрощенного расчета POC может не точно отражать истинное распределение стоимости в некоторых рынках. Возможно, более точно будет использовать метод расчета стоимостных зон, основанный на количестве сделок.

  6. Отсутствие механизмов сдерживанияПри отсутствии четкого механизма остановки убытков в текущей стратегии может привести к серьезным убыткам при экстремальных рыночных тенденциях. Рекомендуется внедрение остановки убытков на основе ATR или фиксированного процента.

Направление оптимизации стратегии

  1. Условия динамического подтвержденияПри использовании фиксированных 3-х K-линий в качестве условий подтверждения, можно рассмотреть возможность корректировки этого параметра в зависимости от волатильности рынка. В периоды высокой волатильности может потребоваться более длительный срок подтверждения, а в периоды низкой волатильности может быть сокращен.

  2. Ценностные зоны на основе объемов сделок: Расчет текущих ценных зон является упрощенным методом, основанным на ценах. Можно перейти к анализу TPO (Time Price Opportunity) на основе количества сделок или к распределению объемов сделок (Volume Profile), что будет более точно отражать консенсусные ценные зоны участников рынка.

  3. Подтверждение многократных временных рамокВ сочетании с более широкими временными рамками, можно отфильтровать обратные сигналы, и только 80% правил торговли могут повысить вероятность успеха стратегии.

  4. Настройка адаптивных целейВ настоящее время стратегия фиксирует использование POC в качестве цели. Можно рассмотреть возможность установки динамических целей в соответствии с волатильностью рынка, например, установка более отдаленных целей (например, VAH или VAL) в высоко волатильных рынках.

  5. Фильтр частоты колебаний: Добавление ATR или других волатильных показателей в качестве фильтрации, чтобы избежать торговли в условиях рынка с очень низкой волатильностью или очень высокой волатильностью.

  6. Оптимизация временных интервалов: Проанализируйте эффективность стратегии в разных часовых поясах и торговых часах, чтобы найти оптимальную комбинацию торговых часов.

  7. Интеллектуальные механизмы устранения убытковВнедрение интеллектуальной логики остановки, например, остановки на основе поддержки/сопротивления или отслеживания остановки на основе ценовых колебаний, для лучшего управления рисками.

  8. Сигнальная мощность: Разработка системы оценки качества сигнала в сочетании с силой возобновления цены, подтверждением характеристик 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))