← В PRISM

Новые индикаторы и стратегии

Исследовательские исходники готовы. Требование «часто и прибыльно» не выполнено: ни один вариант не прошёл отбор. Автоторговля этими правилами не включена.

Созданы два индикатора и стратегия для тестера TradingView: объёмная средняя и полосы ATR, относительный объём, направленность движения и стоимость сделки относительно волатильности. Pine-файлы не скомпилированы в TradingView и не прошли независимую сверку с Python; сигналы выключены по умолчанию. Не считать их готовым торговым продуктом.

Исходники для изучения

PRISM-Volume-Context.pine

Скачать Pine-файл ↓
Посмотреть исходный код
//@version=6
indicator("PRISM Volume Context · RESEARCH", overlay=true, max_labels_count=100)
// Research artifact. Profitability is NOT validated. No OKX order connection.
// Signal calculations target the five-minute OHLCV chart. Closed bars only.
string mode = input.string("Hybrid", "Research mechanism", options=["Climax", "Reclaim", "Hybrid"])
bool showSignals = input.bool(false, "Show experimental entry plans", tooltip="Historical screening failed. These are research plans, not trade recommendations.")
float costFraction = input.float(0.19, "Round-trip cost reserve %", minval=0, step=0.01) / 100
if timeframe.in_seconds() != 300
    runtime.error("PRISM Volume Context requires a 5-minute chart. The research rules are not calibrated for other timeframes.")

float atr = ta.atr(14)
float volumeSum = math.sum(volume, 24)
float weighted = volumeSum > 0 ? math.sum(hlc3 * volume, 24) / volumeSum : na
float priorVolume = ta.sma(volume[1], 20)
float relativeVolume = priorVolume > 0 ? volume / priorVolume : na
float variation = math.sum(math.abs(ta.change(close)), 48)
float efficiency = variation > 0 ? math.abs(close - close[48]) / variation : 0
float weightedSlope = atr > 0 ? (weighted - weighted[6]) / atr : na
float priorHigh12 = ta.highest(high[1], 12)
float priorLow12 = ta.lowest(low[1], 12)
float priorHigh3 = ta.highest(high[1], 3)
float priorLow3 = ta.lowest(low[1], 3)
float low6 = ta.lowest(low, 6)
float high6 = ta.highest(high, 6)

f_setup(int side, bool climax) =>
    float wick = side == 1 ? math.min(open, close) - low : high - math.max(open, close)
    bool sweep = side == 1 ? low < priorLow12 and close > priorLow12 : high > priorHigh12 and close < priorHigh12
    bool rejected = relativeVolume >= 2 and high - low >= 1.5 * atr and wick >= 0.45 * (high - low) and efficiency <= 0.35 and math.abs(weightedSlope) <= 0.8 and sweep
    float boundary = side == 1 ? priorHigh3 : priorLow3
    bool reclaimed = relativeVolume >= 1.5 and side * (close[1] - weighted[1]) <= 0 and side * (close - weighted) > 0 and side * weightedSlope >= 0.1 and efficiency >= 0.2 and side * (close - boundary) > 0 and high - low <= 2.5 * atr
    float stop = climax ? (side == 1 ? low - 0.2 * atr : high + 0.2 * atr) : (side == 1 ? low6 - 0.15 * atr : high6 + 0.15 * atr)
    float target = climax ? weighted : close + 2 * (close - stop)
    float risk = side * (close - stop)
    float reward = side * (target - close)
    float cost = close * costFraction
    bool geometry = risk >= 0.75 * atr and risk <= 3 * atr and target > 0 and (reward - cost) / (risk + cost) >= 1.2
    bool valid = bar_index >= 60 and barstate.isconfirmed and not na(weightedSlope) and not na(relativeVolume) and geometry and (climax ? rejected : reclaimed)
    [valid, stop, target]

[cl, cls, clt] = f_setup(1, true)
[cs, css, cst] = f_setup(-1, true)
[rl, rls, rlt] = f_setup(1, false)
[rs, rss, rst] = f_setup(-1, false)
bool longClimax = mode != "Reclaim" and cl
bool shortClimax = mode != "Reclaim" and cs
bool longReclaim = mode != "Climax" and rl
bool shortReclaim = mode != "Climax" and rs
// Fixed tie order matches Python: climax before reclaim, long before short.
int direction = longClimax ? 1 : shortClimax ? -1 : longReclaim ? 1 : shortReclaim ? -1 : 0
float stopPlan = longClimax ? cls : shortClimax ? css : longReclaim ? rls : shortReclaim ? rss : na
float targetPlan = longClimax ? clt : shortClimax ? cst : longReclaim ? rlt : shortReclaim ? rst : na
bool signalLong = showSignals and direction == 1
bool signalShort = showSignals and direction == -1

color accent = #5DD9BD
plot(weighted, "Rolling volume-weighted typical price (24)", color=accent, linewidth=2)
upper = plot(weighted + 1.5 * atr, "Upper volatility band", color=color.new(accent, 65))
lower = plot(weighted - 1.5 * atr, "Lower volatility band", color=color.new(accent, 65))
fill(upper, lower, color=color.new(accent, 95))
plot(efficiency, "Efficiency48", display=display.data_window)
plot(relativeVolume, "Relative volume20", display=display.data_window)
plot(weightedSlope, "Weighted-price slope / ATR", display=display.data_window)
plotshape(signalLong, title="Research long", text="PLAN L", style=shape.triangleup, location=location.belowbar, color=#5DD9BD, textcolor=#5DD9BD, size=size.small)
plotshape(signalShort, title="Research short", text="PLAN S", style=shape.triangledown, location=location.abovebar, color=#F28BA8, textcolor=#F28BA8, size=size.small)
var float shownStop = na
var float shownTarget = na
var int planBar = na
if signalLong or signalShort
    shownStop := stopPlan
    shownTarget := targetPlan
    planBar := bar_index
bool recentPlan = showSignals and not na(planBar) and bar_index - planBar < 24
plot(recentPlan ? shownStop : na, "Latest plan stop — not an execution", color=#F28BA8, style=plot.style_linebr)
plot(recentPlan ? shownTarget : na, "Latest plan full target — not an execution", color=accent, style=plot.style_linebr)
var table panel = table.new(position.top_right, 2, 5, bgcolor=#101722, border_width=1)
if barstate.islast
    table.cell(panel, 0, 0, "PRISM · RESEARCH", text_color=accent)
    table.cell(panel, 1, 0, "NOT VALIDATED", text_color=#F28BA8)
    table.cell(panel, 0, 1, "Efficiency", text_color=color.white)
    table.cell(panel, 1, 1, str.tostring(efficiency, "#.00"), text_color=color.white)
    table.cell(panel, 0, 2, "Relative volume", text_color=color.white)
    table.cell(panel, 1, 2, str.tostring(relativeVolume, "#.00") + "x", text_color=color.white)
    table.cell(panel, 0, 3, "Cost reserve", text_color=color.white)
    table.cell(panel, 1, 3, str.tostring(costFraction * 100, "#.00") + "%", text_color=color.white)
    table.cell(panel, 0, 4, "Mechanism", text_color=color.white)
    table.cell(panel, 1, 4, mode, text_color=color.white)
alertcondition(signalLong, "Research LONG", "PRISM research long plan on closed 5m bar. Not a validated trading strategy.")
alertcondition(signalShort, "Research SHORT", "PRISM research short plan on closed 5m bar. Not a validated trading strategy.")

PRISM-Regime-and-Cost.pine

Скачать Pine-файл ↓
Посмотреть исходный код
//@version=6
indicator("PRISM Regime & Cost · RESEARCH", overlay=false)
// Context diagnostics only. These plots do not establish profitable entries.
float costFraction = input.float(0.19, "Round-trip expense reserve %", minval=0, step=0.01) / 100
float atr = ta.atr(14)
float travel = math.sum(math.abs(ta.change(close)), 48)
float efficiency = travel > 0 ? 100 * math.abs(close - close[48]) / travel : 0
float costInAtr = atr > 0 ? 100 * close * costFraction / atr : na
float assumedRisk = 1.5 * atr
float assumedReward = 3 * atr
float hypotheticalNetRR = (assumedReward - close * costFraction) / (assumedRisk + close * costFraction)
plot(efficiency, "Directional efficiency % (48 bars)", color=#5DD9BD, linewidth=2)
plot(costInAtr, "Expense reserve as % of one ATR", color=#F2BD78, linewidth=2)
hline(100, "One ATR", color=color.new(color.gray, 70))
plot(hypotheticalNetRR, "Net R/R for hypothetical 1.5ATR stop / 3ATR target", display=display.data_window)
var table panel = table.new(position.top_right, 2, 3, bgcolor=#101722)
if barstate.islast
    table.cell(panel, 0, 0, "CONTEXT ONLY", text_color=#5DD9BD)
    table.cell(panel, 1, 0, "NOT A SIGNAL", text_color=#F2BD78)
    table.cell(panel, 0, 1, "Efficiency", text_color=color.white)
    table.cell(panel, 1, 1, str.tostring(efficiency, "#.0") + "%", text_color=color.white)
    table.cell(panel, 0, 2, "Costs / ATR", text_color=color.white)
    table.cell(panel, 1, 2, str.tostring(costInAtr, "#.0") + "%", text_color=color.white)

PRISM-Volume-Strategy.pine

Скачать Pine-файл ↓
Посмотреть исходный код
//@version=6
strategy("PRISM Volume Context · RESEARCH TESTER", overlay=true, max_labels_count=100,
 initial_capital=50, currency=currency.USD, default_qty_type=strategy.percent_of_equity,
 default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.05,
 slippage=2, pyramiding=0, process_orders_on_close=false, calc_on_every_tick=false,
 margin_long=100, margin_short=100)
// Research artifact. Profitability is NOT validated. No OKX order connection.
// Signal calculations target the five-minute OHLCV chart. Closed bars only.
string mode = input.string("Hybrid", "Research mechanism", options=["Climax", "Reclaim", "Hybrid"])
bool showSignals = input.bool(false, "Show experimental entry plans", tooltip="Historical screening failed. These are research plans, not trade recommendations.")
float costFraction = input.float(0.19, "Round-trip cost reserve %", minval=0, step=0.01) / 100
if timeframe.in_seconds() != 300
    runtime.error("PRISM Volume Context requires a 5-minute chart. The research rules are not calibrated for other timeframes.")

float atr = ta.atr(14)
float volumeSum = math.sum(volume, 24)
float weighted = volumeSum > 0 ? math.sum(hlc3 * volume, 24) / volumeSum : na
float priorVolume = ta.sma(volume[1], 20)
float relativeVolume = priorVolume > 0 ? volume / priorVolume : na
float variation = math.sum(math.abs(ta.change(close)), 48)
float efficiency = variation > 0 ? math.abs(close - close[48]) / variation : 0
float weightedSlope = atr > 0 ? (weighted - weighted[6]) / atr : na
float priorHigh12 = ta.highest(high[1], 12)
float priorLow12 = ta.lowest(low[1], 12)
float priorHigh3 = ta.highest(high[1], 3)
float priorLow3 = ta.lowest(low[1], 3)
float low6 = ta.lowest(low, 6)
float high6 = ta.highest(high, 6)

f_setup(int side, bool climax) =>
    float wick = side == 1 ? math.min(open, close) - low : high - math.max(open, close)
    bool sweep = side == 1 ? low < priorLow12 and close > priorLow12 : high > priorHigh12 and close < priorHigh12
    bool rejected = relativeVolume >= 2 and high - low >= 1.5 * atr and wick >= 0.45 * (high - low) and efficiency <= 0.35 and math.abs(weightedSlope) <= 0.8 and sweep
    float boundary = side == 1 ? priorHigh3 : priorLow3
    bool reclaimed = relativeVolume >= 1.5 and side * (close[1] - weighted[1]) <= 0 and side * (close - weighted) > 0 and side * weightedSlope >= 0.1 and efficiency >= 0.2 and side * (close - boundary) > 0 and high - low <= 2.5 * atr
    float stop = climax ? (side == 1 ? low - 0.2 * atr : high + 0.2 * atr) : (side == 1 ? low6 - 0.15 * atr : high6 + 0.15 * atr)
    float target = climax ? weighted : close + 2 * (close - stop)
    float risk = side * (close - stop)
    float reward = side * (target - close)
    float cost = close * costFraction
    bool geometry = risk >= 0.75 * atr and risk <= 3 * atr and target > 0 and (reward - cost) / (risk + cost) >= 1.2
    bool valid = bar_index >= 60 and barstate.isconfirmed and not na(weightedSlope) and not na(relativeVolume) and geometry and (climax ? rejected : reclaimed)
    [valid, stop, target]

[cl, cls, clt] = f_setup(1, true)
[cs, css, cst] = f_setup(-1, true)
[rl, rls, rlt] = f_setup(1, false)
[rs, rss, rst] = f_setup(-1, false)
bool longClimax = mode != "Reclaim" and cl
bool shortClimax = mode != "Reclaim" and cs
bool longReclaim = mode != "Climax" and rl
bool shortReclaim = mode != "Climax" and rs
// Fixed tie order matches Python: climax before reclaim, long before short.
int direction = longClimax ? 1 : shortClimax ? -1 : longReclaim ? 1 : shortReclaim ? -1 : 0
float stopPlan = longClimax ? cls : shortClimax ? css : longReclaim ? rls : shortReclaim ? rss : na
float targetPlan = longClimax ? clt : shortClimax ? cst : longReclaim ? rlt : shortReclaim ? rst : na
bool signalLong = showSignals and direction == 1
bool signalShort = showSignals and direction == -1

color accent = #5DD9BD
plot(weighted, "Rolling volume-weighted typical price (24)", color=accent, linewidth=2)
upper = plot(weighted + 1.5 * atr, "Upper volatility band", color=color.new(accent, 65))
lower = plot(weighted - 1.5 * atr, "Lower volatility band", color=color.new(accent, 65))
fill(upper, lower, color=color.new(accent, 95))
plot(efficiency, "Efficiency48", display=display.data_window)
plot(relativeVolume, "Relative volume20", display=display.data_window)
plot(weightedSlope, "Weighted-price slope / ATR", display=display.data_window)
plotshape(signalLong, title="Research long", text="PLAN L", style=shape.triangleup, location=location.belowbar, color=#5DD9BD, textcolor=#5DD9BD, size=size.small)
plotshape(signalShort, title="Research short", text="PLAN S", style=shape.triangledown, location=location.abovebar, color=#F28BA8, textcolor=#F28BA8, size=size.small)
var float shownStop = na
var float shownTarget = na
var int planBar = na
if signalLong or signalShort
    shownStop := stopPlan
    shownTarget := targetPlan
    planBar := bar_index
bool recentPlan = showSignals and not na(planBar) and bar_index - planBar < 24
plot(recentPlan ? shownStop : na, "Latest plan stop — not an execution", color=#F28BA8, style=plot.style_linebr)
plot(recentPlan ? shownTarget : na, "Latest plan full target — not an execution", color=accent, style=plot.style_linebr)
var table panel = table.new(position.top_right, 2, 5, bgcolor=#101722, border_width=1)
if barstate.islast
    table.cell(panel, 0, 0, "PRISM · RESEARCH", text_color=accent)
    table.cell(panel, 1, 0, "NOT VALIDATED", text_color=#F28BA8)
    table.cell(panel, 0, 1, "Efficiency", text_color=color.white)
    table.cell(panel, 1, 1, str.tostring(efficiency, "#.00"), text_color=color.white)
    table.cell(panel, 0, 2, "Relative volume", text_color=color.white)
    table.cell(panel, 1, 2, str.tostring(relativeVolume, "#.00") + "x", text_color=color.white)
    table.cell(panel, 0, 3, "Cost reserve", text_color=color.white)
    table.cell(panel, 1, 3, str.tostring(costFraction * 100, "#.00") + "%", text_color=color.white)
    table.cell(panel, 0, 4, "Mechanism", text_color=color.white)
    table.cell(panel, 1, 4, mode, text_color=color.white)
// TradingView's emulator differs from the Python research simulator:
// 2 ticks slippage, no funding, no cross-symbol portfolio, no historical depth.
// Contract quantity/margin properties must be inspected for the chosen symbol.
// No independent Pine compiler/execution parity verification was performed.
var float fixedStop = na
var float fixedTarget = na
bool freshFlat = strategy.position_size == 0 and (strategy.closedtrades == 0 or bar_index > strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1))
if showSignals and direction != 0 and freshFlat
    fixedStop := stopPlan
    fixedTarget := targetPlan
    if direction == 1
        strategy.entry("LONG", strategy.long)
        strategy.exit("LONG-EXIT", "LONG", stop=fixedStop, limit=fixedTarget)
    else
        strategy.entry("SHORT", strategy.short)
        strategy.exit("SHORT-EXIT", "SHORT", stop=fixedStop, limit=fixedTarget)
if strategy.position_size != 0
    int held = bar_index - strategy.opentrades.entry_bar_index(0)
    if held >= 23
        strategy.close_all(comment="Two-hour timeout", immediately=true)

В TradingView: откройте 5m график OKX → Pine Editor → вставьте код → сохраните и добавьте на график. Переключатель Show experimental entry plans относится к исследовательской разметке. Стоп и единственный тейк задаются перед входом, без частичных фиксаций. Исходные планы индикатора не являются подтверждениями исполнения.

Что проверено

V5: четыре правила по 15m цене на 19 монетах, апрель–июнь. V6: три правила по 5m цене и объёму на 12 монетах, 5 апреля–19 июня. V7: обучаемый фильтр и ранжирование сигналов после расходов. Все параметры и порядок отбора зафиксированы до расчётов. Это повторно используемые архивы, не независимое подтверждение.

Частоту проверяли по фактическим сделкам одного модельного счёта, а не по сумме сигналов всех монет. Исследовательская цель — хотя бы 5 сделок в день. В сравнении ниже каждый участок начинается с $50. Два размера маржи: весь доступный баланс и 10% от него; стоп-бюджет 25% маржи, исследовательский предел плеча 20× и дневной предел потерь 25%. Реальные настройки владельца не изменены.

ПравилоУчастокСделок монетСредний net RPF$50 · вся маржа$50 · 10% маржиСделок/день · 10%
V5 · возврат в диапазонеРазработка250.0081.01$56.49$51.580.50
V5 · отбой после выбросаРазработка0$50.00$50.000.00
V5 · пробой сжатияРазработка426-0.3000.57$0.19$37.363.40
V5 · сочетаниеРазработка449-0.2850.60$0.38$36.893.63
V5 · возврат в диапазонеПроверка51-0.1490.79$6.33$46.121.23
V5 · отбой после выбросаПроверка0$50.00$50.000.00
V5 · пробой сжатияПроверка438-0.1350.79$1.51$37.043.35
V5 · сочетаниеПроверка485-0.1430.78$1.28$37.653.90
V5 · возврат в диапазонеКонтроль106-0.1300.81$1.22$40.322.17
V5 · отбой после выбросаКонтроль0$50.00$50.000.00
V5 · пробой сжатияКонтроль496-0.2880.58$0.08$28.563.47
V5 · сочетаниеКонтроль594-0.2660.61$0.08$27.624.30
V6 · объёмный выбросРазработка3-1.3920.00$36.07$48.480.12
V6 · возврат через VWAPРазработка13-0.0110.98$34.51$48.790.46
V6 · сочетаниеРазработка16-0.2700.63$29.80$47.320.58
V6 · объёмный выбросПроверка11.600$52.94$50.290.03
V6 · возврат через VWAPПроверка21-0.3420.47$16.40$46.300.48
V6 · сочетаниеПроверка22-0.2540.59$17.37$46.570.52
V6 · объёмный выбросКонтроль2-1.1680.00$32.68$48.130.11
V6 · возврат через VWAPКонтроль19-0.4740.43$19.80$46.150.89
V6 · сочетаниеКонтроль21-0.5400.38$12.96$44.431.00
Те же правила с двойными расходами
ПравилоУчастокСделок монетСредний net RPF$50 · вся маржа$50 · 10% маржиСделок/день · 10%
V5 · возврат в диапазонеРазработка2-1.4770.00$33.96$48.270.07
V5 · отбой после выбросаРазработка0$50.00$50.000.00
V5 · пробой сжатияРазработка278-0.4110.45$0.24$29.552.90
V5 · сочетаниеРазработка280-0.4190.44$0.24$28.512.97
V5 · возврат в диапазонеПроверка8-0.2980.60$24.50$47.600.26
V5 · отбой после выбросаПроверка0$50.00$50.000.00
V5 · пробой сжатияПроверка259-0.1290.79$0.32$34.982.97
V5 · сочетаниеПроверка267-0.1340.78$0.25$34.933.10
V5 · возврат в диапазонеКонтроль19-0.1290.83$25.73$49.070.60
V5 · отбой после выбросаКонтроль0$50.00$50.000.00
V5 · пробой сжатияКонтроль419-0.3890.47$0.04$23.213.37
V5 · сочетаниеКонтроль437-0.3800.48$0.03$21.063.80
V6 · объёмный выбросРазработка0$50.00$50.000.00
V6 · возврат через VWAPРазработка0$50.00$50.000.00
V6 · сочетаниеРазработка0$50.00$50.000.00
V6 · объёмный выбросПроверка0$50.00$50.000.00
V6 · возврат через VWAPПроверка2-0.3730.39$42.20$49.310.06
V6 · сочетаниеПроверка2-0.3730.39$42.20$49.310.06
V6 · объёмный выбросКонтроль0$50.00$50.000.00
V6 · возврат через VWAPКонтроль4-0.6470.29$27.27$47.550.22
V6 · сочетаниеКонтроль4-0.6470.29$27.27$47.550.22

Обучаемый фильтр V7

Обучен на 108498 строках — они зависимы и не являются таким количеством независимых сделок. Обучение: 5–20 апреля; отдельная калибровка: 21–30 апреля. Модель оценивала чистый R и выбирала сторону до использования результата сделки. Ни один порог не прошёл калибровку, поэтому проверку модели на следующих периодах не продолжали и в торговлю её не переносили.

Порог прогноза RСделок монетФактический net RPF$50 · 10% маржиСделок счёта/день
0.0586-0.2240.69$44.484.0
0.146-0.0950.86$49.162.4
0.219-0.1000.85$49.391.6

Ограничения и проверка

В Python: 0,05% комиссии и 0,03% неблагоприятного проскальзывания на каждой стороне, неблагоприятный фандинг 0,01% за начатые 8 часов. Вход со следующего открытия, при неоднозначности стоп первым. V5 держит максимум 8 часов; V6/V7 — 2 часа. Нет модели исторического стакана/ликвидации, использованы сохранённые спецификации контрактов. История проверена по SHA256. Восемь новых тестов проверяют причинность расчётов, пропуски, отсутствие объёма, расходный фильтр и независимость выбора стороны от будущего исхода.

TradingView использует собственный эмулятор; файл тестера задаёт 2 тика проскальзывания и не моделирует фандинг, общий счёт нескольких монет, историческую ликвидность и отказ на разрыв открытия 0,25R. Поэтому его результаты не равны таблицам Python. Правила расчёта закрытых свечей и исполнения сверены с документацией TradingView; форматы рынка — с документацией OKX.


20 сентября · единое решение Фибо × Ribbon

Новые правила реализованы и проверены. Прибыльный вариант не найден; в действующую торговлю они не подключены.

Цель новой логики: не путать тейк старого движения со входом в обратную сторону. Сигнал проверяется по закрытому часовому тренду и действующим зонам. Полный тейк устанавливается перед ближайшей встречной зоной с отступом 0,15 ATR, максимум 2R. Если соотношение дохода к риску после расходов меньше 1,2, вход отклоняется.

Проверены продолжение тренда, реакция от нестандартной Фибо и их сочетание. После неудачи отдельно проверено возобновление импульса после отката 38,2–61,8% его диапазона, без обязательного нового переворота Ribbon. Это дополнительное правило контекста, не замена исходной нестандартной сетки.

19 монет, апрель–июнь 2026. История уже использовалась ранее: это повторная хронологическая проверка, не независимое подтверждение. Правила каждого эксперимента сохранены до его расчёта. Положительный июнь у входа после отката не отменяет отрицательные апрель/май и убыток модели единого счёта.

Во всей истории с прогревом найдено 6643 переворота Ribbon. Только 8 случая имели недавнее касание действующей нестандартной зоны того же направления; ни один не остался в пределах 1 ATR от неё. Поэтому строгий совместный вход отсутствует. Нулевые сделки не означают нулевой риск или успешную стратегию.

ПравилоПериодРасходыСделок монетСредний net RPFСчёт из $50Сделок счётаПросадка счёта
Продолжение по часуАпрель · разработкаОбычные521-0.3710.46$0.198599.8%
Реакция от нестандартной ФибоАпрель · разработкаОбычные0$50.0000.0%
Общий контекстАпрель · разработкаОбычные521-0.3710.46$0.198599.8%
Продолжение по часуМай · проверкаОбычные555-0.3040.55$0.278299.5%
Реакция от нестандартной ФибоМай · проверкаОбычные0$50.0000.0%
Общий контекстМай · проверкаОбычные555-0.3040.55$0.278299.5%
Продолжение по часуИюнь · контрольОбычные635-0.0270.95$2.168699.3%
Реакция от нестандартной ФибоИюнь · контрольОбычные0$50.0000.0%
Общий контекстИюнь · контрольОбычные635-0.0270.95$2.168699.3%
Продолжение по часуАпрель · разработкаДвойные227-0.3980.43$0.186299.7%
Реакция от нестандартной ФибоАпрель · разработкаДвойные0$50.0000.0%
Общий контекстАпрель · разработкаДвойные227-0.3980.43$0.186299.7%
Продолжение по часуМай · проверкаДвойные251-0.3360.51$0.386799.2%
Реакция от нестандартной ФибоМай · проверкаДвойные0$50.0000.0%
Общий контекстМай · проверкаДвойные251-0.3360.51$0.386799.2%
Продолжение по часуИюнь · контрольДвойные468-0.1250.77$1.748399.3%
Реакция от нестандартной ФибоИюнь · контрольДвойные0$50.0000.0%
Общий контекстИюнь · контрольДвойные468-0.1250.77$1.748399.3%
Возобновление после откатаАпрель · разработкаОбычные185-0.3440.52$2.135496.9%
Возобновление после откатаМай · проверкаОбычные217-0.3150.55$0.387299.4%
Возобновление после откатаИюнь · контрольОбычные3970.1611.31$1.197999.6%
Возобновление после откатаАпрель · разработкаДвойные80-0.1990.68$4.843192.6%
Возобновление после откатаМай · проверкаДвойные119-0.4180.39$0.405099.3%
Возобновление после откатаИюнь · контрольДвойные2860.1641.34$3.406796.7%

Модель: одна позиция, весь доступный баланс в маржу, стоп-бюджет 25% маржи, дневной лимит потерь 25%, плечо до 20×. Расходы: 0,05% комиссии и 0,03% проскальзывания на каждой стороне, 0,01% неблагоприятного фандинга за начатые 8 часов; стресс — двойные расходы. Вход на следующем открытии, выход всей позицией, при неоднозначности стоп первым, максимум 8 часов. Текущие спецификации контрактов — приближение к историческим. Нет исторического стакана, маркировки и модели ликвидации. Это не точная копия текущего исполнения и не обещание результата счёта.

Запущенный владельцем режим V2 остаётся отдельным экспериментом. Его текущее состояние, точные правила и последний пропуск сигнала доступны владельцу в пульте. Проверки V4 не изменили настройки, позиции или ордера.


← В пульт PRISM

Контекст вместо одного переворота Ribbon

Версия 03 не прошла отбор. Все девять конфигураций имеют отрицательную среднюю доходность на участке разработки. Победитель не выбран.

Новая история OKX: 1 апреля — 1 июля 2026, 91 день и 4 дня прогрева. 19 заранее выбранных монет, по 9120 свечей без пропусков. Эти периоды не пересекаются с прежними проверками июля–сентября. Правила записаны до загрузки данных.

Разработка — апрель, валидация — май, контроль — июнь. Трейды по монетам не пересекаются внутри одной монеты. Счёт моделируется отдельно: одна позиция, $50, весь доступный баланс в маржу, адаптивное плечо до 20× в исследовании, стоп-бюджет 25% маржи и дневной лимит потерь 25%. Положительная отдельная ячейка таблицы не заменяет заранее заданный отбор.

УчастокПравилоСделок по монетамСредний RProfit factorСчёт из $50Сделок счётаПросадка
developmenttrend_pullback:1.5R384-0.2660.61$0.368299.3%
developmenttrend_pullback:2R381-0.2570.64$0.517799.1%
developmenttrend_pullback:3R374-0.2710.63$0.387599.2%
developmentfailed_breakout:1.5R401-0.5460.38$0.0810399.9%
developmentfailed_breakout:2R397-0.6340.34$0.089399.9%
developmentfailed_breakout:3R395-0.6980.32$0.098499.9%
developmentvolatility_breakout:1.5R199-0.2120.64$8.447092.9%
developmentvolatility_breakout:2R199-0.2390.61$4.076394.8%
developmentvolatility_breakout:3R198-0.2590.59$2.866194.3%
validationtrend_pullback:1.5R461-0.2820.59$0.319399.4%
validationtrend_pullback:2R458-0.2500.66$0.319099.4%
validationtrend_pullback:3R450-0.2240.71$0.268299.5%
validationfailed_breakout:1.5R391-0.4440.45$0.5213099.0%
validationfailed_breakout:2R389-0.4110.52$0.6512098.7%
validationfailed_breakout:3R386-0.3560.60$0.2310999.5%
validationvolatility_breakout:1.5R201-0.0530.91$21.157172.6%
validationvolatility_breakout:2R199-0.0300.95$19.186771.9%
validationvolatility_breakout:3R1950.0011.00$124.546468.7%
controltrend_pullback:1.5R387-0.0690.88$0.568599.7%
controltrend_pullback:2R382-0.0510.92$1.018399.8%
controltrend_pullback:3R374-0.0690.90$0.477399.8%
controlfailed_breakout:1.5R335-0.2470.65$0.399999.7%
controlfailed_breakout:2R331-0.2650.65$0.468299.6%
controlfailed_breakout:3R329-0.2060.74$0.387699.5%
controlvolatility_breakout:1.5R252-0.1100.81$1.247699.4%
controlvolatility_breakout:2R246-0.1420.77$1.206698.8%
controlvolatility_breakout:3R242-0.2280.65$1.416498.8%

Расходы: 0,05% комиссия и 0,03% проскальзывание на каждой стороне; 0,01% неблагоприятного фандинга за начатые 8 часов. Стоп имеет приоритет при неоднозначной свече. Вход на следующем открытии, без использования максимума/минимума сигнальной свечи. Нет истории стакана, маркировки и ликвидации; спецификации контрактов современные. Это модель, а не подтверждённые биржевые исполнения.

Риск 25% всего счёта не означает небольшую просадку: два последовательных убытка по 25% оставляют 56,25% капитала. Настройка экспериментального запуска владельцем не меняет отрицательный результат этой проверки.

Документы и исходные данные сохранены на сервере: research/context-v3. Источник данных: публичный API OKX.