<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Комментарии / Профиль quantaiengineer]]></title>
    <link>https://habr.com/ru/users/quantaiengineer/comments/</link>
    <description><![CDATA[Хабр: комментарии пользователя quantaiengineer]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Thu, 30 Apr 2026 08:17:28 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      

      
        
  
    <item>
      <title>12.04.2026 13:05:21 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1022254/#comment_29817242</guid>
      <link>https://habr.com/ru/articles/1022254/#comment_29817242</link>
      <description><![CDATA[<p>Спасибо за хороший вопрос.</p><p>По OHLCV, я не исхожу из того, что эти данные детерминированно определяют будущее. Гипотеза слабее: в них могут существовать локальные статистические зависимости и режимные асимметрии, которые проверяются только эмпирически. Объёмы здесь не "магический предиктор", а прокси ликвидности и интенсивности движения. Два положительных held-out квартала это сигнал к дальнейшей проверке, не закрытый вопрос.</p><p>Для технического обсуждения - GitHub Issues: github.com/YuriyKolesnikov/diffquant</p>]]></description>
      <pubDate>Sun, 12 Apr 2026 13:05:21 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>12.04.2026 08:17:20 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1022254/#comment_29816092</guid>
      <link>https://habr.com/ru/articles/1022254/#comment_29816092</link>
      <description><![CDATA[<p>Спасибо за вопрос по существу. <br>По первому пункту: строгого доказательства существования решения у меня нет, и я на него не претендую. Два положительных held-out квартала это эмпирический сигнал, а не теорема. Именно поэтому раздел "Ограничения" написан как принципиальная часть статьи, а не как формальная оговорка. <br>По второму: финансовая специфика здесь не в самой алгебре, а в интерпретации переменных и в постановке задачи. <em>p</em> - торговая позиция <em>(long/short)</em>, <em>r</em> - рыночная доходность, вычисленная из реальных цен, <em>cost</em> - комиссия и проскальзывание. <em>Objective</em> - коэффициент Шарпа. Именно это и делает абстрактный time-series framework торговой постановкой.</p>]]></description>
      <pubDate>Sun, 12 Apr 2026 08:17:20 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>11.04.2026 13:38:46 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1022254/#comment_29813618</guid>
      <link>https://habr.com/ru/articles/1022254/#comment_29813618</link>
      <description><![CDATA[<p>Проект заточен под финансовые временные ряды, так что для food truck напрямую не подойдёт. Но дифференцируемый симулятор в теории адаптируем под любую задачу с end-to-end оптимизацией метрики.</p>]]></description>
      <pubDate>Sat, 11 Apr 2026 13:38:46 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>04.03.2026 07:56:05 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/finam_broker/articles/1005638/#comment_29616404</guid>
      <link>https://habr.com/ru/companies/finam_broker/articles/1005638/#comment_29616404</link>
      <description><![CDATA[<p>Отличный эксперимент с реальными целями - одна из первых прикладных работ в этом направлении, команде отдельная благодарность за слой исполнения.</p><p>Наши исследования схожих задач привели нас к выводу, что языковые модели как агентный подход наиболее эффективны в гибридной архитектуре, где взаимодействуют квантовые модели и ИИ-агенты.</p><p>Если проводить аналогию с Канеманом: квантовая модель это Система 1, быстрый интуитивный слой, агент это Система 2, медленный аналитический. Система 1 реагирует быстро и инстинктивно, Система 2 принимает этот контекст, обогащает его дополнительными данными и оценивает риск. Важный нюанс: в задачах прогнозирования агент быстро деградирует, но в задачах оценки риска он работает значительно лучше и таким образом эффективно «страхует» квантовую модель. </p>]]></description>
      <pubDate>Wed, 04 Mar 2026 07:56:05 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>25.09.2025 11:42:14 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28880372</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28880372</link>
      <description><![CDATA[<p>Здравствуйте!<br>В конфиге комиссия задаётся в долях, а не в процентах. Значение 0.0004 = 0.04% = 4 <em>bps</em>, что соответствует стандартным комиссиям <em>Binance</em>. Дополнительное умножение на 100 не требуется. Когда вы подставляете 0.05, то это уже 5% комиссии за сделку, что не имеет никакого отношения к реальности и естественно полностью убивает торговлю.</p>]]></description>
      <pubDate>Thu, 25 Sep 2025 11:42:14 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.09.2025 18:33:50 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28839868</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28839868</link>
      <description><![CDATA[<p>Спасибо за внимание к статье и отличный вопрос!<br>Хочу <strong>вас</strong> отдельно <strong>похвалить</strong> — вы сами нашли ответ на ваш вопрос. Это действительно бесценный опыт, когда человек самостоятельно разбирается в технических деталях, понимание остаётся с ним навсегда и формирует настоящий исследовательский навык.</p><p>Вы абсолютно правы, <strong><em>CCXT</em> в некоторых режимах агрегирует сделки</strong>, из-за чего поле <em>num_trades</em> может отличаться от нативных значений <em>Binance</em>. Поэтому для точных исследований я всегда рекомендую использовать оригинальные данные напрямую из <strong><em>Binance Futures API</em></strong>. Один из самых удобных способов — через библиотеку <em>python-binance</em> (<a href="https://github.com/sammchardy/python-binance" rel="noopener noreferrer nofollow">https://github.com/sammchardy/python-binance</a>, устанавливается через <code>pip install python-binance</code>). Важно учитывать, что библиотека неофициальная (<em>Binance</em> её напрямую не поддерживает), но это самый используемый и функциональный инструмент в сообществе.</p><p>Минимальный пример получения минутных свечей по фьючерсам:</p><pre><code class="python">import datetime as dt
from binance.client import Client, BaseClient
from binance.enums import HistoricalKlinesType

symbol = "*USDT"
start_dt = dt.datetime(..., tzinfo=dt.timezone.utc)
end_dt = dt.datetime(..., tzinfo=dt.timezone.utc)

klines_type = HistoricalKlinesType.FUTURES
interval = BaseClient.KLINE_INTERVAL_1MINUTE

client = Client()

data = client.futures_klines(
    klines_type=klines_type,
    symbol=symbol,
    interval=interval,
    startTime=int(start_dt.timestamp() * 1000),
    endTime=int(end_dt.timestamp() * 1000),
)

client.close_connection()
</code></pre><p>Чтобы окончательно снять сомнения, я ещё раз вручную проверил через официальный API Binance и сравнил с локальной базой проекта. <strong><em>Все данные полностью совпали</em></strong>. Для прозрачности привожу три последовательные котировки (14:45, 14:46, 14:47 UTC), включая ту, которая вызвала вопрос:</p><p><strong>=== Raw quotes ===</strong></p><pre><code>[1746456240000, '0.2720500', '0.2728000', '0.2712000', '0.2726500', '110004', 1746456299999, '29917.2349400', 557, '51011', '13887.8376800', '0']
[1746456300000, '0.2724100', '0.2732700', '0.2718400', '0.2721300', '99912', 1746456359999, '27229.3868100', 464, '41200', '11236.2752000', '0']
[1746456360000, '0.2723500', '0.2726500', '0.2719900', '0.2724700', '49486', 1746456419999, '13476.6411000', 349, '24452', '6662.0162200', '0']
</code></pre><p><strong>=== Human-readable ===</strong></p><pre><code>[Date: 2025-05-05  Time: 14:45:00] Open=0.272050, High=0.272800, Low=0.271200, Close=0.272650, Volume=110004.00, Num Trades=557
[Date: 2025-05-05  Time: 14:46:00] Open=0.272410, High=0.273270, Low=0.271840, Close=0.272130, Volume=99912.00, Num Trades=464
[Date: 2025-05-05  Time: 14:47:00] Open=0.272350, High=0.272650, Low=0.271990, Close=0.272470, Volume=49486.00, Num Trades=349
</code></pre><p>Таким образом, в бэктесте использовались именно «чистые» данные <em>Binance Futures API</em>, без сторонней агрегации.</p>]]></description>
      <pubDate>Mon, 15 Sep 2025 18:33:50 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>01.09.2025 07:30:44 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28780310</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28780310</link>
      <description><![CDATA[<p>Спасибо за интересный вопрос!<br><br>Агент действительно не учится на отдельных тикерах, а воспринимает весь рынок целиком. Это даёт ему возможность усваивать более сложные и универсальные паттерны поведения, которые затем применяются к любому активу. Когда появляется новый сигнал, агент не «знает» историю конкретной монеты — он опирается на свой общий опыт, накопленный на данных всего рынка <strong><em>Binance Futures</em></strong>.<br></p><p>Благодаря этому он способен работать даже с тикерами, у которых мало исторических данных. Когда появляется новый сигнал, агент старается найти под него оптимальную стратегию действий и, если уровень уверенности достаточно высок, принимает решение и торгует — подобно профессиональному трейдеру, который использует общие принципы и накопленный опыт, а не заученную историю конкретного актива.</p>]]></description>
      <pubDate>Mon, 01 Sep 2025 07:30:44 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>31.08.2025 18:10:57 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28778836</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28778836</link>
      <description><![CDATA[<p>Спасибо за интерес к проекту!</p><p>Подготовка данных для обучения в данном случае не является сложной задачей — вся логика и структура уже подробно описаны в статье. Реализацию <strong><em>data layer </em></strong>я оставил на усмотрение исследователей, чтобы было пространство для творчества.<br>Вы можете написать свой <strong><em>data layer</em></strong> под разные площадки (<em>Binance, Bybit, OKX</em> и др.) и тем самым реально прокачать свои навыки.</p><p>Более того, если вы будете самостоятельно активно разрабатывать подобные решения и делиться результатами с сообществом, то такой подход ускоряет прогресс и расширяет экосистему открытых инструментов.</p>]]></description>
      <pubDate>Sun, 31 Aug 2025 18:10:57 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>30.08.2025 19:18:52 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28776064</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28776064</link>
      <description><![CDATA[<p>Binance публикует офлайн-архивы сделок (trades, aggTrades) и снимков стакана (bookDepth) на data.binance.vision. Эти данные можно скачивать и использовать для исследований.</p><p>Что касается стакана.<br>Глубина заявок критична в HFT и субсекундных стратегиях, где важна микроструктура рынка. Для минутных моделей, как описано в статье, достаточно OHLCV и при желании тиковых данных, а расширенный стакан добавляет сложность и не всегда даёт прирост качества.</p>]]></description>
      <pubDate>Sat, 30 Aug 2025 19:18:52 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>30.08.2025 14:53:44 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28775324</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28775324</link>
      <description><![CDATA[<p>Благодарю за отзыв и отличный вопрос.</p><p>Что касается влияния дополнительных фич — на практике классические индикаторы теханализа (RSI, скользящие и т.п.), построенные на основе тех же ценовых рядов, редко дают прирост качества. Современные нейросетевые архитектуры уже умеют извлекать локальные и глобальные паттерны непосредственно из «сырых» OHLCV-данных. Тем не менее, я сторонник экспериментальной проверки: при грамотном комбинировании технических индикаторов и feature engineering вполне возможен прирост точности или устойчивости. Важно не ограничиваться минутными свечами, а рассматривать другие источники данных — например тиковые потоки.</p><p>Что касается <code>volume_weighted_average</code> — здесь речь идёт о VWAP (Volume Weighted Average Price). В идеальном случае это считается на тиковом уровне по формуле:</p><p><img class="formula inline" source="VWAP = \frac{\sum (price \times volume)}{\sum volume}" alt="VWAP = \frac{\sum (price \times volume)}{\sum volume}" src="https://habrastorage.org/getpro/habr/upload_files/5d4/66d/80e/5d466d80e4685011d5ed24432acf3d89.svg" width="310" height="58"></p><p>В нашем случае доступны только минутные <em>OHLCV</em>-свечи, поэтому применяется упрощённый вариант — усреднение по (Open, High, Low, Close). Это приближение, которое позволяет хотя бы частично сохранить информацию о «средней цене сделки» в рамках свечи. Если у вас есть доступ к тиковым данным, всегда стоит использовать точный расчёт.</p><p>По поводу мониторинга: агент онлайн отслеживает <strong>все активные фьючерсные контракты Binance Futures</strong> со статусом <em>TRADING</em>. На текущий момент (30.08.2025) это 521 тикер. Действительно, прибыльные возможности возникают преимущественно на волатильных рынках, но фильтрация делается уже на этапе обработки сигналов. Ошибочные входы случаются — их стоимость контролируется встроенным риск-менеджментом. Это обязательный элемент любой продакшен-системы: ошибки неизбежны, но важно, чтобы они стоили кратно меньше, чем приносят прибыльные сделки.</p>]]></description>
      <pubDate>Sat, 30 Aug 2025 14:53:44 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>26.08.2025 15:43:41 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28757324</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28757324</link>
      <description><![CDATA[<p>В предыдущем ответе в псевдокоде при расчёте волатильности была опечатка.<br>Правильный вариант:</p><pre><code>avg_volatility = mean( |Close[i+10] - Close[i]| / Close[i] for i in [t-90 .. t-10] )
</code></pre><p>Это гарантирует, что волатильность рассчитывается только на 90-минутном предшествующем участке, без захвата импульсного окна.</p>]]></description>
      <pubDate>Tue, 26 Aug 2025 15:43:41 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>26.08.2025 08:16:05 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28755050</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28755050</link>
      <description><![CDATA[<p>Спасибо за вопрос!</p><p><strong>Обучение именно на высоковолатильных сегментах рынка не является «общепринятой практикой»</strong>, <em>но у этого подхода есть очевидные преимущества</em>.<br>Так мы исключаем длительные флетовые участки, которые не несут информации для обучения, и тем самым снижаем уровень противоречивых сигналов. Часто рынок может демонстрировать схожее поведение с диаметрально разными исходами — это создаёт у агента высокий уровень неопределённости. Отбор по волатильности позволяет концентрировать обучение на ключевых аномалиях, давая агенту более разнообразные паттерны и повышая устойчивость стратегии к новым данным.</p><p><br><strong>Что касается отбора локальных окон</strong> — в проекте предусмотрена гибкая конфигурация: можно менять длину исторического контекста, длительность торговой сессии и набор используемых каналов данных.<br>Однако сам <strong><em>процесс первичного формирования датасетов</em></strong> (например, под другие биржи или иные условия) действительно остаётся на стороне исследователя: описанная в статье логика легко переносится и может быть реализована в отдельном data layer.</p><p><strong>Теперь про 10-минутное окно.</strong> Оно не входит в предшествующее 90-минутное окно «тишины». Алгоритм работает так:</p><ol><li><p>Сначала скользящим окном ищется 10-минутный отрезок с изменением цены ≥ 5%.</p></li><li><p>Если условие выполняется — мы берём 90 минут, предшествующих началу этого окна, и проверяем их на отсутствие сильных движений (контрастность).</p></li><li><p>Только если обе проверки пройдены — событие фиксируется как сигнал, и формируется финальная 150-минутная сессия (90 мин до + 60 мин после).</p></li></ol><p>Псевдокод:</p><pre><code>for each index t in close_prices:
    # проверяем 10-минутное окно на сильный импульс
    change = (Close[t+10] - Close[t]) / Close[t]
    if |change| &gt;= MinAbsChange:

        # считаем среднюю волатильность за 90 минут до начала этого окна
        avg_volatility = mean( |Close[i+10] - Close[i]| / Close[i] for i in [t-90 .. t] )

        if avg_volatility * ContrastCoeff &lt; |change|:
            record signal at time (t+10)
</code></pre><p>Таким образом, итоговое окно состоит из 90 минут контекста (без резких движений), за которыми следует 60-минутная торговая сессия, начинающаяся сразу после обнаруженного импульса.</p>]]></description>
      <pubDate>Tue, 26 Aug 2025 08:16:05 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>13.08.2025 04:41:21 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28699492</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28699492</link>
      <description><![CDATA[<p>Спасибо за вопрос. Выбранные параметры в проекте — это не жёсткие константы, а демонстрационный пресет. Проект изначально сделан так, чтобы вы могли строить свой <strong><em>data layer,</em></strong> подставлять любые значения и тестировать разные комбинации.</p><p>Направления для экспериментов:</p><ol><li><p><strong>Порог волатильности</strong>: ниже — больше сигналов и выше чувствительность, но больше шума; выше — сигналы реже, но чище.</p></li><li><p><strong>Окно волатильности</strong>: короче — реакция быстрее, но больше ложных входов; длиннее — меньше шум, но медленнее реакция.</p></li><li><p><strong>Длина сессии</strong>: короче — чаще сброс контекста; длиннее — больше истории, полезно для трендов.</p></li></ol><p>Мой выбор — лишь пример для демонстрации работы пайплайна. Оптимальные значения зависят от ваших целей. Генерируйте гипотезы, проверяйте их и делитесь результатами — проект создан именно для этого.</p>]]></description>
      <pubDate>Wed, 13 Aug 2025 04:41:21 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>12.08.2025 12:06:58 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28696822</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28696822</link>
      <description><![CDATA[<p>Для удобства добавил в репозиторий утилиту для просмотра <strong><em>top-N</em></strong> лучших триалов <strong><em>Optuna</em></strong> (не только одного победителя). Это помогает выбирать конфигурацию под свой риск-профиль (например, меньше сделок, но выше точность).</p><p>Команда:</p><pre><code class="bash">python get_info_from_optuna.py configs/alpha.py --n-best-trials 10
</code></pre><p>Все результаты автоматически сохраняются в той же папке рядом с файлом исследования: <code>output/cfg_name/optuna_cfg_optimization_results/</code> —&gt; как <code>best_&lt;N&gt;_trials_&lt;metric&gt;.txt</code> и <code>.csv</code>.</p>]]></description>
      <pubDate>Tue, 12 Aug 2025 12:06:58 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>11.08.2025 09:06:57 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28691594</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28691594</link>
      <description><![CDATA[<p><em>Коротко:</em> <strong>«утечки из будущего» -&gt; нет</strong>. </p><p>Я не делаю сессионную нормализацию по окну 150 минут. Per-канальные <em>mean/std</em> считаются один раз <strong>только по train-сету</strong>, <strong>фиксируются и</strong> <strong>применяются</strong> к любому наблюдению на <em>val / test / backtest / онлайне</em>. Каждое состояние в момент времени <img class="formula inline" source="t" alt="t" src="https://habrastorage.org/getpro/habr/upload_files/437/0c7/316/4370c73163b18e726a0148f4f95311c6.svg" width="8" height="18"> строится <strong>каузально</strong> из последних <img class="formula inline" source="N" alt="N" src="https://habrastorage.org/getpro/habr/upload_files/e93/ff5/9dc/e93ff59dc8413a72373cf72365078e8e.svg" width="20" height="19"> минут до <img class="formula inline" source="t" alt="t" src="https://habrastorage.org/getpro/habr/upload_files/81e/218/829/81e218829d2c7961817672b6ed6d4269.svg" width="8" height="18">; будущие данные в расчёт не попадают.</p><p>Разберем по пунктам:</p><ul><li><p><strong>Никакой “150-минутной” z-нормализации.</strong> Статистики нормализации не считаются «по текущей сессии» и не знают о её пост-сигнальной части. Это базовый продакшн-паттерн: единое масштабирование, замороженное на train.</p></li><li><p><strong>Кауза соблюдена.</strong> Сначала формирую историческое окно до <img class="formula inline" source="t" alt="t" src="https://habrastorage.org/getpro/habr/upload_files/f4b/61a/851/f4b61a85148b9fcddf6483daf835f570.svg" width="8" height="18">, затем <strong>apply_normalization(...)</strong> применяет <strong>train-статистики</strong>, и только после этого добавляются экстра данные (позиция, <em>unrealized PnL, elapsed/remaining time, one-hot</em> история действий).</p></li><li><p><strong>“В реальной торговле таких данных не получить”.</strong> Это неверная предпосылка, как раз наоборот: в онлайне используются <strong>предварительно посчитанные train-статистики</strong>, а не «динамические» <em>stats</em> по текущему окну. Это исключает дрейф масштабирования и исключает <em>leakage</em>.</p></li><li><p><strong>Про “отрезание первых 90 минут”.</strong> Резать ни в коем случае ничего не надо: <em>stats</em> не считаются по индивидуальному 150-минутному эпизоду в принципе. Даже если искусственно пересчитать <em>mean/std</em> только по первым 90 минутам каждой сессии и перегнать оценку, разница в метриках окажется в пределах статистического шума; выигрыша от такой «локальной» нормализации нет, а стабильность хуже.</p></li><li><p><strong>RL ≠ SL.</strong> Здесь нет таргетов как в обучение с учителем (возможно именно этот момент вашего опыта в SL пробудил в вас сомнения), которые можно «подсмотреть». Агент видит только историю до <img class="formula inline" source="t" alt="t" src="https://habrastorage.org/getpro/habr/upload_files/bc3/998/888/bc3998888de549719a61c96818b5f0c8.svg" width="8" height="18">, получает <em>reward</em> каузально по шагам, а нормализация выполняет сугубо инженерную функцию — стабилизацию входов под фиксированные train-масштабы.</p></li></ul><p><strong>Дополнительно</strong>: <em>для онлайна именно такая схема (фиксированные train‑stats) и применяется в индустрии: она устойчива и корректно переносится в продакшн‑поток без «онлайн‑оценок будущего».</em></p>]]></description>
      <pubDate>Mon, 11 Aug 2025 09:06:57 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>10.08.2025 15:21:40 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28688314</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28688314</link>
      <description><![CDATA[<p>В проекте, описанном выше, используется <strong>модель исполнения</strong>, приближённая к рыночным ордерам: вход осуществляется по цене закрытия минуты, на которой зафиксирован сигнал, с учётом заданного проскальзывания (±0.05%) и комиссии (0.04%). Это стандартная практика в исследовательских <strong><em>backtest</em></strong>-платформах, где <strong>цель — проверка стратегии принятия решений</strong> на минутном таймфрейме, а <strong>не симуляция</strong> <strong><em>HFT</em></strong> с тиковой глубиной стакана.</p><p>Агент <strong>не “покупает по цене из прошлого”</strong> — момент принятия решения и входа синхронизированы. Проскальзывание моделирует разрыв между последней сделкой и лучшим bid/ask на момент исполнения, что даёт усреднённо реалистичный результат без необходимости хранения L2/L3 данных.</p><p>В реальном исполнении система использует отдельный <strong><em>Execution Layer</em></strong>, который работает по логике, исключающей описанные вами риски:</p><ul><li><p>Подключение к <strong><em>Binance Futures WebSocket</em></strong> через <code>ThreadedWebsocketManager</code> для получения ценовых данных в режиме высокой частоты.</p></li><li><p>Фиксация решения агента о входе → поиск лучшей цены в стакане для лимитного ордера.</p></li><li><p>Если лимитный ордер не исполняется в заданный временной интервал — ордер отменяется (<code>_clean_orders()</code>), чтобы избежать входа по невыгодной цене.</p></li><li><p>Возможность переключения на рыночный ордер для гарантированного входа, если торговая логика в конкретной стратегии это предусматривает.</p></li></ul><p>Пример кода <strong><em>Execution Layer</em></strong>:</p><pre><code class="python"># Инициализация WebSocket
self._web_socket = ThreadedWebsocketManager(
  api_key=cfg.BINANCE_API, 
  api_secret=cfg.BINANCE_SECRET, 
  testnet=cfg.USE_TESTNET
)

# Подписка на поток котировок
self._web_socket.start_kline_futures_socket(
    callback=self._get_update_event_by_stream(ticker),
    symbol=ticker_name,
    interval=KLINE_INTERVAL
)

# Логика ордера
# ...
self._clean_orders()
position_values, prices = self._get_position_values_and_prices(req_pos)
# …выставление нового лимитного ордера по лучшей цене
</code></pre><p>Таким образом:</p><ul><li><p>В <strong><em>backtest</em></strong> мы моделируем немедленное исполнение по рынку с параметрами, отражающими усреднённые издержки <strong><em>Binance Futures</em></strong>.</p></li><li><p>В боевой системе <strong><em>Execution Layer</em></strong> обеспечивает динамическое размещение и отзыв лимитных ордеров в реальном времени, либо немедленное исполнение по рынку.</p></li><li><p><strong><em>Проблема «зависших» ордеров или исполнения по цене, которая уже ушла, в системе не существует.</em></strong></p></li></ul><p>Это полноценный инженерный контур исполнения, а не теоретическая модель. </p><p><em>Вопрос “</em><strong><em>что будет делать агент</em></strong><em>” в подобных случаях имеет конкретный ответ — он либо обновляет лимитный ордер по лучшей цене, либо отказывается от сделки, либо входит по рынку в зависимости от заложенной политики риска.</em></p>]]></description>
      <pubDate>Sun, 10 Aug 2025 15:21:40 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>10.08.2025 12:24:11 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28687528</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28687528</link>
      <description><![CDATA[<p>Спасибо за вопрос — разберу механику на примере этого графика.</p><p>Вертикальная пунктирная линия — это момент фиксации высоковолатильного импульса по процедуре, описанной в разделе «Данные» статьи. До этого момента агент не торгует.</p><p>В проекте используются <em>минутные</em> котировки <em>OHLCV</em>. Полная свеча за минуту <img class="formula inline" source="t" alt="t" src="https://habrastorage.org/getpro/habr/upload_files/6ca/1a5/124/6ca1a512406d0c071fa3a47b8f596ac7.svg" width="8" height="18"> загружается сразу после её закрытия.</p><p><strong>Дальнейший алгоритм:</strong></p><ol><li><p>Минута <img class="formula inline" source="t " alt="t " src="https://habrastorage.org/getpro/habr/upload_files/33a/266/24a/33a26624a700290d3b0a2045d0a91b14.svg" width="8" height="18">закрылась → в систему поступает её <em>OHLCV</em>.</p></li><li><p>Формируется входное состояние из последних <em>N</em> минут истории (в зависимости от конфигурации).</p></li><li><p>Агент принимает решение.</p></li><li><p>При открытии позиции исполнение моделируется по цене <strong>закрытия этой же минуты </strong><img class="formula inline" source="t" alt="t" src="https://habrastorage.org/getpro/habr/upload_files/1a3/ae9/eb5/1a3ae9eb58fae1bb511f716c154b486d.svg" width="8" height="18"> с учётом параметров среды: <em>slippage ±0.05%</em> и <em>taker-fee 0.04%</em>.</p></li></ol><p>В данном примере сигнал был зафиксирован 2025-01-10 08:56 <em>UTC</em> (индекс 10 на оси времени). Вход в позицию происходит по цене закрытия минуты возникновения сигнала ≈ 0.65, скорректированной на проскальзывание и комиссию. Дальнейшее движение до ~0.78 относится уже к последующим минутам удержания позиции.</p><p>Таким образом, агент не «покупает по цене из прошлого» и не ждёт ещё одну минуту: <strong><em>решение и исполнение синхронизированы с моментом появления полной минутной котировки</em></strong>. Именно эти цены учитываются в расчёте <strong><em>PnL</em></strong> и визуализациях действий агента.</p>]]></description>
      <pubDate>Sun, 10 Aug 2025 12:24:11 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>08.08.2025 09:26:55 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28678920</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28678920</link>
      <description><![CDATA[<p>Хороший вопрос.</p><p>Этот проект не относится к категории «установил и начал зарабатывать». Он изначально задумывался как <strong>исследовательская платформа,</strong> которая имитирует реальную торговлю с учётом всех ключевых факторов: комиссий, проскальзываний, ограниченной наблюдаемости и меняющихся рыночных условий.</p><p>Его цель — показать, как можно построить архитектуру, способную учиться принимать решения в среде, где ошибки стоят дорого. Здесь можно экспериментировать с агентами, менять модели, тестировать гипотезы, добавлять новые типы данных — но всё это уже на базе готового, воспроизводимого фреймворка с прозрачными метриками и бэктестом.</p><p>Если задача — просто «запустить и заработать», то рынок не прощает такой простоты. Но если цель — понять механику и выстроить систему, которая выдерживает реальную рыночную динамику, то это именно тот фундамент, с которого стоит начинать.</p>]]></description>
      <pubDate>Fri, 08 Aug 2025 09:26:55 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>07.08.2025 17:20:36 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28675908</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28675908</link>
      <description><![CDATA[<p>Спасибо, ценю ваш отклик. Рад, что проект оказался вам интересен.</p>]]></description>
      <pubDate>Thu, 07 Aug 2025 17:20:36 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>06.08.2025 17:41:32 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/934258/#comment_28670686</guid>
      <link>https://habr.com/ru/articles/934258/#comment_28670686</link>
      <description><![CDATA[<p>Спасибо, рад, что статья оказалась в тему.</p><p>Если речь о включении новостей как дополнительного канала признаков, то многое зависит от архитектуры. В целом, <strong>тональность — это агрессивная компрессия</strong>, которая может работать в простых конфигурациях, но теряет нюансы. Если есть возможность, то лучше использовать <strong>эмбеддинги из трансформеров</strong>, синхронизированные с рыночными окнами.</p><p>Для этого подойдут модели семейства <strong><em>sentence-transformers</em></strong> или специализированные финверсии типа <strong><em>FinBERT</em></strong>. Ниже минимальный пример извлечения эмбеддингов с <em>mean pooling</em>:</p><pre><code class="python">from transformers import AutoTokenizer, AutoModel
import torch

# Загружаем компактную модель из семейства Sentence Transformers
model_name = "sentence-transformers/all-MiniLM-L6-v2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

# Текстовая новость (можно брать заголовок или краткое содержание)
text = "Bitcoin breaks $70K amid macroeconomic pressure."

# Токенизация с усечением и паддингом
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)

with torch.no_grad():
    outputs = model(**inputs)
    attention_mask = inputs['attention_mask']
    last_hidden = outputs.last_hidden_state

    # Вычисление эмбеддинга через среднее по токенам с учётом attention mask
    embeddings = (last_hidden * attention_mask.unsqueeze(-1)).sum(1) / attention_mask.sum(1, keepdim=True)
</code></pre><p>Полученный <em>embeddings</em> можно подавать в агент как часть входного состояния, синхронизированную по таймстемпу с рыночными признаками.</p><p>Если планируете двигаться в сторону <strong>полноценной мультимодальной модели</strong>, рекомендую обратить внимание на <strong><em>Perceiver IO</em></strong>. Он изначально спроектирован для совместной обработки разнородных входов (временные ряды, тексты, изображения) и позволяет гибко совмещать ценовые данные с текстовыми эмбеддингами в рамках единой архитектуры.</p>]]></description>
      <pubDate>Wed, 06 Aug 2025 17:41:32 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

      

      

    
  </channel>
</rss>
