neuroalpha 0.3.14 → 0.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/public/index.html CHANGED
@@ -100,208 +100,168 @@
100
100
  <div id="splitter" title="Потяните, чтобы изменить ширину. Двойной щелчок — по умолчанию"></div>
101
101
 
102
102
  <section class="right">
103
- <nav class="tabs" id="tabs">
104
- <button data-tab="overview" class="active"><span>Эксперименты</span><span id="tstat-overview" class="tstat"></span></button>
105
- <button data-tab="now"><span>Торговля</span><span id="tstat-now" class="tstat"></span></button>
106
- <button data-tab="map"><span>Карта и журнал</span><span id="tstat-map" class="tstat"></span></button>
107
- <button data-tab="settings"><span>Настройки</span><span id="tstat-settings" class="tstat"></span></button>
108
- </nav>
109
-
110
- <div class="tab" id="tab-overview">
111
- <div class="toolbar">
112
- <select id="run-select" title="Прошлые эксперименты"></select>
113
- <button id="btn-model" class="primary">Исследовать</button>
114
- <button id="btn-cancel" hidden>Отменить</button>
115
- </div>
116
- <div id="run-bar" class="run-bar" hidden>
117
- <div class="run-bar-left">
118
- <button id="btn-to-live" type="button" class="primary" title="Запустить виртуальный счёт с замороженными настройками этого эксперимента">▶ В торговлю</button>
119
- <button id="btn-apply" type="button" hidden title="Скопировать настройки этого эксперимента в текущие настройки">✓ Применить настройки</button>
120
- <button id="btn-rename-run" type="button" title="Дать эксперименту понятное имя">✎ Назвать</button>
121
- <button id="btn-showcase" type="button" hidden title="Показывать этот эксперимент на публичной витрине лендинга">☆ На витрину</button>
122
- </div>
123
- <div class="row-gap">
124
- <button id="btn-ask-run" type="button" title="Попросить Стратега разобрать этот эксперимент">💬 Разобрать</button>
125
- <button id="btn-del" type="button" title="Удалить этот эксперимент из истории">Удалить</button>
126
- </div>
127
- </div>
128
- <div id="progress" class="progress" hidden><div class="bar"></div><span></span></div>
129
- <div id="overview-empty" class="empty"></div>
130
- <div id="overview" hidden>
131
- <div id="verdict" class="verdict"></div>
132
- <div class="kpis" id="kpis"></div>
133
- <div class="muted small" id="sides" title="Вклад покупок и продаж в итог после комиссий, в % от стартовой суммы" hidden></div>
134
- <div id="stability" class="stab-box" hidden></div>
135
- <div id="eq-chart" class="chart"></div>
136
- <div class="legend" id="legend"></div>
137
- <details id="periods-box" open hidden>
138
- <summary>Доходность по месяцам и годам</summary>
139
- <div class="seg" id="pmode" title="Что показывать в ячейках">
140
- <button data-k="model" class="active">Стратегия</button><button data-k="market">Рынок</button><button data-k="diff">Разница</button>
141
- </div>
142
- <div id="periods"></div>
143
- </details>
144
- <details id="more">
145
- <summary>Сравнение стратегий и на что смотрит стратегия</summary>
146
- <div id="cmp"></div>
147
- <h4>Совпадение прогноза с фактом по неделям</h4>
148
- <div id="ic-chart" class="chart small"></div>
149
- <h4>Головы внимания</h4>
150
- <div id="heads"></div>
151
- </details>
152
- <details id="trades-box">
153
- <summary id="trades-sum">Сделки</summary>
154
- <div id="trades"></div>
155
- </details>
156
- </div>
157
- </div>
158
-
159
- <div class="tab" id="tab-now" hidden>
103
+ <div class="tab" id="main-workspace">
160
104
  <div class="settings-wrap">
161
- <aside class="snav" id="now-nav">
162
- <button type="button" data-nsec="forecast" class="active">Прогноз сейчас</button>
163
- <button type="button" data-nsec="virtual" id="nnav-virtual">Виртуальные счета</button>
164
- <button type="button" data-nsec="brokers" id="nnav-brokers">Брокерские счета</button>
105
+ <aside class="snav" id="main-nav">
106
+ <button type="button" data-sec="brokers" id="nnav-brokers" class="active">Брокерские счета</button>
165
107
  <div class="ssep"></div>
166
- <button type="button" data-nsec="news" id="nnav-news">Новости рынка</button>
108
+ <button type="button" data-sec="forecast" id="nnav-forecast">Прогноз сейчас</button>
109
+ <button type="button" data-sec="news" id="nnav-news">Новости рынка</button>
110
+ <div class="ssep"></div>
111
+ <button type="button" data-sec="overview" id="nnav-overview" hidden>Эксперименты</button>
112
+ <button type="button" data-sec="g0" id="snav-costs">Издержки и новости</button>
113
+ <button type="button" data-sec="cloud" id="snav-cloud">Подписка и уведомления</button>
114
+ <button type="button" data-sec="llm" id="snav-llm">Модели ИИ</button>
167
115
  </aside>
168
116
  <div class="spane">
169
- <section class="ssec" data-nsec="forecast">
170
- <div class="stitle bar"><span id="fc-title">Прогноз на ближайшие часы</span><div class="row-gap" style="align-items:center"><span id="fc-live-badge" class="tag ok" title="Прогноз автоматически пересчитывается каждые 45 секунд по живым котировкам Мосбиржи">● авто-радар</span><button id="btn-ask-forecast" type="button" title="Попросить Стратега разобрать текущий прогноз">💬 Спросить Стратега</button></div></div>
117
+ <section class="ssec" data-sec="brokers" id="brokers-trade-box">
118
+ <div class="stitle bar"><span>Брокерские счета</span><button id="btn-broker-add" class="primary" type="button">+ Добавить счёт</button></div>
171
119
  <div class="scard spadded">
172
- <div id="forecast" class="muted">Стратегия обучится на последних месяцах и скажет, какие акции, по её мнению, будут сильнее или слабее рынка в ближайшие часы и под чьим влиянием.</div>
173
- </div>
174
- </section>
175
- <section class="ssec" data-nsec="virtual" hidden>
176
- <div class="stitle bar"><span>Виртуальные счета</span><button id="btn-live" class="primary">+ Новый виртуальный счёт</button></div>
177
- <div class="scard spadded">
178
- <div id="live" class="muted">Стратегия торгует виртуальными деньгами на текущих ценах: раз в несколько часов прогноз и пересмотр портфеля. Настройки счёта замораживаются при запуске.</div>
120
+ <div id="broker-form-slot">
121
+ <div id="broker-add-box" hidden style="margin-bottom:14px;padding:14px 16px;border:1px solid var(--accent);border-radius:10px;background:var(--bg)">
122
+ <div id="broker-add-sum" style="font-weight:700;font-size:15px;margin-bottom:10px;color:var(--accent)">Добавить брокерский счёт</div>
123
+ <form id="broker-form" autocomplete="off" style="display:grid;gap:10px">
124
+ <input type="hidden" name="id">
125
+ <label><span>Название счёта</span><input name="name" placeholder="Например, Т-Банк основной"></label>
126
+ <label><span>Брокер</span>
127
+ <select name="broker" id="broker-select">
128
+ <optgroup label="Облачный REST API (прямое подключение по токену)">
129
+ <option value="tbank">Т-Банк (T-Invest API)</option>
130
+ <option value="finam">Финам (Finam Trade API)</option>
131
+ <option value="bcs">БКС Мир инвестиций (Trade API)</option>
132
+ <option value="alor">Алор Брокер (Alor OpenAPI v2)</option>
133
+ <option value="cifra">Цифра брокер (Tradernet API)</option>
134
+ <option value="iticapital">ITI Capital (OpenAPI)</option>
135
+ </optgroup>
136
+ <optgroup label="Подтверждение заявок (Telegram / MAX) или мост QUIK">
137
+ <option value="sber">СберИнвестиции (Сбербанк)</option>
138
+ <option value="vtb">ВТБ Мои Инвестиции</option>
139
+ <option value="alfa">Альфа-Инвестиции</option>
140
+ </optgroup>
141
+ </select>
142
+ </label>
143
+ <div class="row-gap" style="align-items:center;justify-content:space-between;background:rgba(59,130,246,0.08);border:1px solid rgba(59,130,246,0.3);border-radius:8px;padding:8px 12px">
144
+ <span class="small">ИИ-агент поможет открыть счёт у брокера, выпустить токен и сам подключит счёт:</span>
145
+ <button type="button" id="btn-broker-ai-help" class="primary" style="white-space:nowrap">🤖 Помочь с подключением</button>
146
+ </div>
147
+ <details id="broker-guide-box" style="margin:2px 0 4px;border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:8px 14px">
148
+ <summary id="broker-guide-sum" style="cursor:pointer;font-weight:600;font-size:13px;color:var(--accent)">📖 Как получить токен и подключить счёт (пошаговая памятка)</summary>
149
+ <div id="broker-guide-body" class="small" style="margin-top:8px;line-height:1.55;color:var(--text)"></div>
150
+ </details>
151
+ <label><span id="broker-token-lbl">Токен API</span><input name="token" id="broker-token-input" type="text" autocomplete="off" spellcheck="false" data-lpignore="true" data-1p-ignore="true" placeholder="Токен доступа к API брокера (t.…)"></label>
152
+ <label>
153
+ <span id="broker-acc-lbl">Номер субсчёта / портфеля</span>
154
+ <div class="row-gap" style="width:100%">
155
+ <input name="accountId" id="broker-acc-input" autocomplete="off" placeholder="ID счёта (или нажмите кнопку справа →)" style="flex:1">
156
+ <button type="button" id="btn-broker-discover" style="white-space:nowrap">🔍 Найти мои счета по токену</button>
157
+ </div>
158
+ </label>
159
+ <div id="broker-discovered" hidden style="display:grid;gap:6px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--bg2)"></div>
160
+ <label><span>Режим работы счёта</span>
161
+ <select name="mode">
162
+ <option value="readonly">Только чтение (тестовый мониторинг и сверка)</option>
163
+ <option value="confirm" selected>Подтверждение заявок (рекомендуется)</option>
164
+ <option value="auto">Автомат (лимитные заявки)</option>
165
+ </select>
166
+ </label>
167
+ <label><span>Начальный портфель на счёте (переходный период)</span>
168
+ <select name="legacyMode">
169
+ <option value="isolate" selected>Изолированный карман — не трогать старые бумаги (рекомендуется)</option>
170
+ <option value="smooth">Плавный переход — продавать старые акции только под новые покупки или при угрозе обвала</option>
171
+ <option value="takeover">Полное управление — сразу продать нецелевые акции под стратегию</option>
172
+ </select>
173
+ </label>
174
+ <label><span>Лимит суммы на стратегию, ₽ (предохранитель)</span><input name="maxCapitalRub" type="number" min="10000" step="10000" value="100000"></label>
175
+ <label><span>Дневной стоп по просадке, % (предохранитель)</span><input name="maxDailyDrawdownPct" type="number" min="0.5" max="50" step="0.5" value="3"></label>
176
+ <label><span>Защитный отступ лимитной заявки, %</span><input name="limitOffsetPct" type="number" min="0" max="2" step="0.05" value="0.1"></label>
177
+ <label class="check"><span>Формировать заявки автоматически по закрытию свечи (с отправкой в Telegram / MAX)</span><input name="autoSchedule" type="checkbox" class="switch" checked></label>
178
+ <label class="check"><span>Не торговать в первые и последние 10 минут сессии</span><input name="skipEdgeMinutes" type="checkbox" class="switch" checked></label>
179
+ <label class="check"><span>Тестовый режим (песочница брокера — виртуальные деньги без риска)</span><input name="sandbox" type="checkbox" class="switch"></label>
180
+ <div class="row-gap" style="justify-content:space-between;flex-wrap:wrap;margin-top:4px">
181
+ <div class="row-gap">
182
+ <button class="primary" type="submit" id="broker-save-btn">Сохранить счёт</button>
183
+ <button type="button" id="broker-cancel-btn">Отмена</button>
184
+ </div>
185
+ <button type="button" id="broker-delete-btn" class="icon" style="color:var(--red)" hidden>🗑 Удалить этот счёт</button>
186
+ </div>
187
+ </form>
188
+ </div>
189
+ </div>
190
+ <div id="brokers-trade" class="muted">Нажмите «+ Добавить счёт», чтобы подключить брокерский счёт (Т-Банк, Финам, БКС, Алор, Цифра брокер, ITI Capital, СберИнвестиции, ВТБ, Альфа-Инвестиции).</div>
179
191
  </div>
180
192
  </section>
181
- <section class="ssec" data-nsec="brokers" id="brokers-trade-box" hidden>
182
- <div class="stitle bar"><span>Брокерские счета (Т-Банк, Финам, Алор, БКС)</span><button id="btn-brokers-cfg" type="button">Настроить счета</button></div>
193
+
194
+ <section class="ssec" data-sec="forecast" hidden>
195
+ <div class="stitle bar"><span id="fc-title">Прогноз на ближайшие часы</span><div class="row-gap" style="align-items:center"><span id="fc-live-badge" class="tag ok" title="Прогноз автоматически пересчитывается каждые 45 секунд по живым котировкам Мосбиржи">● авто-радар</span><button id="btn-ask-forecast" type="button" title="Попросить Стратега разобрать текущий прогноз">💬 Спросить Стратега</button></div></div>
183
196
  <div class="scard spadded">
184
- <div id="brokers-trade" class="muted">Подключите брокерский счёт в «Настройки → Брокерские счета». Счёт может работать в режиме «Только чтение», «Подтверждение заявок» или «Автомат» с жёсткими предохранителями.</div>
197
+ <div id="forecast" class="muted">Стратегия обучится на последних месяцах и скажет, какие акции, по её мнению, будут сильнее или слабее рынка в ближайшие часы и под чьим влиянием.</div>
185
198
  </div>
186
199
  </section>
187
- <section class="ssec" data-nsec="news" id="news-box" hidden>
200
+
201
+ <section class="ssec" data-sec="news" id="news-box" hidden>
188
202
  <div class="stitle">Новости и раскрытия компаний</div>
189
203
  <div class="scard spadded">
190
204
  <div id="news-list" class="muted">Свежих размеченных новостей пока нет.</div>
191
205
  </div>
192
206
  </section>
193
- </div>
194
- </div>
195
- </div>
196
207
 
197
- <div class="tab" id="tab-map" hidden>
198
- <div class="settings-wrap">
199
- <aside class="snav" id="map-nav">
200
- <button type="button" data-msec="behav" class="active">Карта по поведению</button>
201
- <button type="button" data-msec="text">Карта по описанию</button>
202
- <div class="ssep"></div>
203
- <button type="button" data-msec="journal" id="mnav-journal">Журнал гипотез</button>
204
- </aside>
205
- <div class="spane">
206
- <section class="ssec" id="map-sec">
207
- <div class="stitle bar"><span id="map-title-lbl">Карта рынка · по совместному поведению</span><div class="row-gap" style="align-items:center"><span id="map-date" class="muted small"></span><input id="map-slider" type="range" min="0" max="0" value="0" style="width:160px"></div></div>
208
+ <section class="ssec" data-sec="overview" id="overview-sec" hidden>
209
+ <div class="stitle">Эксперименты (режим «Хозяин»)</div>
208
210
  <div class="scard spadded">
209
- <canvas id="map-canvas"></canvas>
210
- <div id="map-info" class="muted small" style="margin-top:8px"></div>
211
- <div class="row-gap" id="map-text-box" hidden style="margin-top:10px"><button id="btn-profiles">Составить описания компаний (ИИ)</button><span id="profiles-msg" class="muted small"></span></div>
212
- </div>
213
- </section>
214
- <section class="ssec" id="journal-box" hidden>
215
- <div class="stitle">Журнал проверенных гипотез</div>
216
- <div class="scard spadded">
217
- <div id="journal"></div>
211
+ <div class="toolbar">
212
+ <select id="run-select" title="Прошлые эксперименты"></select>
213
+ <button id="btn-model" class="primary">Исследовать</button>
214
+ <button id="btn-cancel" hidden>Отменить</button>
215
+ </div>
216
+ <div id="run-bar" class="run-bar" hidden>
217
+ <div class="run-bar-left">
218
+ <button id="btn-rename-run" type="button" title="Дать эксперименту понятное имя">✎ Назвать</button>
219
+ <button id="btn-showcase" type="button" hidden title="Показывать этот эксперимент на публичной витрине лендинга">☆ На витрину</button>
220
+ </div>
221
+ <div class="row-gap">
222
+ <button id="btn-ask-run" type="button" title="Попросить Стратега разобрать этот эксперимент">💬 Разобрать</button>
223
+ <button id="btn-del" type="button" title="Удалить этот эксперимент из истории">Удалить</button>
224
+ </div>
225
+ </div>
226
+ <div id="progress" class="progress" hidden><div class="bar"></div><span></span></div>
227
+ <div id="overview-empty" class="empty"></div>
228
+ <div id="overview" hidden>
229
+ <div id="verdict" class="verdict"></div>
230
+ <div class="kpis" id="kpis"></div>
231
+ <div class="muted small" id="sides" title="Вклад покупок и продаж в итог после комиссий, в % от стартовой суммы" hidden></div>
232
+ <div id="stability" class="stab-box" hidden></div>
233
+ <div id="eq-chart" class="chart"></div>
234
+ <div class="legend" id="legend"></div>
235
+ <details id="periods-box" open hidden>
236
+ <summary>Доходность по месяцам и годам</summary>
237
+ <div class="seg" id="pmode" title="Что показывать в ячейках">
238
+ <button data-k="model" class="active">Стратегия</button><button data-k="market">Рынок</button><button data-k="diff">Разница</button>
239
+ </div>
240
+ <div id="periods"></div>
241
+ </details>
242
+ <details id="more">
243
+ <summary>Сравнение стратегий и на что смотрит стратегия</summary>
244
+ <div id="cmp"></div>
245
+ <h4>Совпадение прогноза с фактом по неделям</h4>
246
+ <div id="ic-chart" class="chart small"></div>
247
+ <h4>Головы внимания</h4>
248
+ <div id="heads"></div>
249
+ </details>
250
+ <details id="trades-box">
251
+ <summary id="trades-sum">Сделки</summary>
252
+ <div id="trades"></div>
253
+ </details>
254
+ </div>
218
255
  </div>
219
256
  </section>
220
- </div>
221
- </div>
222
- </div>
223
257
 
224
- <div class="tab" id="tab-settings" hidden>
225
- <div class="settings-wrap">
226
- <aside class="snav">
227
- <input id="s-search" type="search" placeholder="Поиск настроек…">
228
- <button type="button" data-sec="g0" class="active">Стратегия и сигналы</button>
229
- <button type="button" data-sec="g1">Издержки и риск</button>
230
- <button type="button" data-sec="g2">Автопилот и система</button>
231
- <div class="ssep"></div>
232
- <button type="button" data-sec="cloud" id="snav-cloud">Подписка и уведомления</button>
233
- <button type="button" data-sec="brokers" id="snav-brokers">Брокерские счета</button>
234
- <button type="button" data-sec="llm">Модели ИИ</button>
235
- <button type="button" data-sec="hist" id="snav-hist">История изменений</button>
236
- <div class="ssep"></div>
237
- <button id="btn-reset" type="button" class="sreset">Вернуть по умолчанию</button>
238
- </aside>
239
- <div class="spane">
240
258
  <form id="params"></form>
259
+
241
260
  <section class="ssec" data-sec="cloud" id="cloud-box" hidden>
242
261
  <div class="stitle">Подписка, лицензия и уведомления (Telegram / MAX)</div>
243
262
  <div class="scard spadded" id="cloud-pane"></div>
244
263
  </section>
245
- <section class="ssec" data-sec="brokers" id="brokers-box" hidden>
246
- <div class="stitle">Брокерские счета (Т-Банк, Финам, Алор, БКС)</div>
247
- <div class="scard spadded">
248
- <p class="muted small" style="margin-top:0">Токены хранятся только в локальной базе и в интерфейс не передаются. Предохранители счёта (лимит суммы, дневной стоп, защита краёв сессии) недоступны для изменения ИИ-Стратегом.</p>
249
- <div id="brokers-list"></div>
250
- <details id="broker-add-box" style="margin-top:12px">
251
- <summary id="broker-add-sum">Добавить брокерский счёт</summary>
252
- <form id="broker-form" autocomplete="off" style="margin-top:10px;display:grid;gap:10px">
253
- <input type="hidden" name="id">
254
- <label><span>Название счёта</span><input name="name" placeholder="Например, Т-Банк основной"></label>
255
- <label><span>Брокер</span>
256
- <select name="broker">
257
- <option value="tbank">Т-Банк (T-Invest API)</option>
258
- <option value="finam">Финам (Trade API)</option>
259
- <option value="alor">Алор (OpenAPI)</option>
260
- <option value="bcs">БКС Мир инвестиций</option>
261
- </select>
262
- </label>
263
- <label><span id="broker-token-lbl">Токен API</span><input name="token" type="text" class="secret-input" autocomplete="off" spellcheck="false" data-lpignore="true" data-1p-ignore="true" placeholder="Токен доступа к API брокера (t.…)"></label>
264
- <label>
265
- <span>Номер субсчёта / портфеля</span>
266
- <div class="row-gap" style="width:100%">
267
- <input name="accountId" autocomplete="off" placeholder="ID счёта (или нажмите кнопку справа →)" style="flex:1">
268
- <button type="button" id="btn-broker-discover" style="white-space:nowrap">🔍 Найти мои счета по токену</button>
269
- </div>
270
- </label>
271
- <div id="broker-discovered" hidden style="display:grid;gap:6px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--bg2)"></div>
272
- <label><span>Режим работы счёта</span>
273
- <select name="mode">
274
- <option value="readonly">Только чтение (портфель и сверка)</option>
275
- <option value="confirm" selected>Подтверждение заявок (рекомендуется)</option>
276
- <option value="auto">Автомат (лимитные заявки)</option>
277
- </select>
278
- </label>
279
- <label><span>Начальный портфель на счёте (переходный период)</span>
280
- <select name="legacyMode">
281
- <option value="isolate" selected>Изолированный карман — не трогать старые бумаги (рекомендуется)</option>
282
- <option value="smooth">Плавный переход — продавать старые акции только под новые покупки или при угрозе обвала</option>
283
- <option value="takeover">Полное управление — сразу продать нецелевые акции под стратегию</option>
284
- </select>
285
- </label>
286
- <label><span>Эксперимент для настроек</span>
287
- <select name="baseRunId" id="broker-run-select">
288
- <option value="">Текущие настройки</option>
289
- </select>
290
- </label>
291
- <label><span>Лимит суммы на стратегию, ₽ (предохранитель)</span><input name="maxCapitalRub" type="number" min="10000" step="10000" value="100000"></label>
292
- <label><span>Дневной стоп по просадке, % (предохранитель)</span><input name="maxDailyDrawdownPct" type="number" min="0.5" max="50" step="0.5" value="3"></label>
293
- <label><span>Защитный отступ лимитной заявки, %</span><input name="limitOffsetPct" type="number" min="0" max="2" step="0.05" value="0.1"></label>
294
- <label class="check"><span>Формировать заявки автоматически по закрытию свечи (с отправкой в Telegram / MAX)</span><input name="autoSchedule" type="checkbox" class="switch" checked></label>
295
- <label class="check"><span>Не торговать в первые и последние 10 минут сессии</span><input name="skipEdgeMinutes" type="checkbox" class="switch" checked></label>
296
- <label class="check"><span>Песочница брокера (тестовый контур)</span><input name="sandbox" type="checkbox" class="switch"></label>
297
- <div class="row-gap">
298
- <button class="primary" type="submit" id="broker-save-btn">Сохранить счёт</button>
299
- <button type="button" id="broker-cancel-btn" hidden>Отмена</button>
300
- </div>
301
- </form>
302
- </details>
303
- </div>
304
- </section>
264
+
305
265
  <section class="ssec" data-sec="llm" id="llm-box" hidden>
306
266
  <div class="stitle" id="llm-sum">Модели ИИ для Стратега</div>
307
267
  <div class="scard spadded">
@@ -335,10 +295,6 @@
335
295
  </details>
336
296
  </div>
337
297
  </section>
338
- <section class="ssec" data-sec="hist" id="settings-history" hidden>
339
- <div class="stitle">История изменений</div>
340
- <div class="scard spadded" id="history"></div>
341
- </section>
342
298
  </div>
343
299
  </div>
344
300
  </div>
@@ -353,6 +309,7 @@
353
309
  <div class="seg" id="help-tabs" style="margin:0">
354
310
  <button type="button" data-hdoc="ИНСТРУКЦИЯ.md" class="active">Как пользоваться</button>
355
311
  <button type="button" data-hdoc="МЕХАНИКА_И_ПАРАМЕТРЫ.md">Механика и параметры</button>
312
+ <button type="button" data-hdoc="БРОКЕРЫ_API.md">Подключение брокеров (API)</button>
356
313
  </div>
357
314
  </div>
358
315
  <button id="help-close" class="icon">✕</button>
@@ -369,13 +326,12 @@
369
326
  <button id="offer-close" class="icon">✕</button>
370
327
  </div>
371
328
  <div class="md" style="max-height:300px;overflow-y:auto;padding:12px 16px;border-bottom:1px solid var(--line);font-size:13px;line-height:1.55">
372
- <p style="margin-top:0"><b>1. Предмет договора:</b> Настоящая Публичная оферта регулирует предоставление доступа к облачной аналитической платформе «НейроАльфа» (PaaS/SaaS) согласно выбранному тарифному плану («Старт», «Инвестор», «Профи», «VIP»).</p>
329
+ <p style="margin-top:0"><b>1. Предмет договора:</b> Настоящая Публичная оферта регулирует предоставление доступа к облачной аналитической платформе «НейроАльфа» (PaaS/SaaS) согласно выбранному тарифному плану («Инвестор», «Профи», «VIP»).</p>
373
330
  <p><b>2. Правовой статус (отсутствие ИИР и ДУ):</b> Сервис является исключительно программно-техническим средством (калькулятором статистических закономерностей). Исполнитель <b>не осуществляет инвестиционное консультирование</b>, не даёт индивидуальных инвестиционных рекомендаций (ФЗ № 39-ФЗ) и не осуществляет доверительное управление. Все сделки совершаются Пользователем самостоятельно на его личном брокерском счёте.</p>
374
331
  <p><b>3. Параметры тарифов и предельные уровни доходности:</b>
375
- <br>• <b>«Старт» (0 ₽)</b> — тестирование стратегий в Экспериментах и 1 виртуальный счёт без реальной торговли;
376
- <br>• <b>«Инвестор» (3 900 ₽/мес)</b> — до 2 брокерских счетов, лимит до 1 000 000 ₽ на каждом счёте, торговля только от покупки («Только в рост (без шорта)»), предельный целевой темп доходности стратегии до 50% годовых;
377
- <br>• <b>«Профи» (9 900 ₽/мес)</b> — до 5 брокерских счетов, лимит до 10 000 000 ₽ на каждом счёте, торговля в рост и в падение (с шортами), предельный целевой темп доходности стратегии до 100% годовых;
378
- <br>• <b>«VIP» (по согласованию)</b> — без ограничений по числу счетов, сумме капитала и потолку годовой доходности (включая полушаговое сопровождение <code>H/2</code> и динамическую концентрацию слота <code>Conviction Sizing</code>).
332
+ <br>• <b>«Инвестор» (3 900 ₽/мес)</b> — 1 брокерский счёт, стартовый лимит до 1 000 000 ₽ (+ реинвестирование всей заработанной прибыли), торговля только от покупки («Только в рост (без шорта)»), предельный целевой темп доходности стратегии до 60% годовых;
333
+ <br>• <b>«Профи» (9 900 ₽/мес)</b> — до 5 брокерских счетов, стартовый лимит до 1 000 000 ₽ на каждом счёте (+ реинвестирование всей заработанной прибыли), торговля в рост и в падение (с шортами), предельный целевой темп доходности стратегии до 120% годовых;
334
+ <br>• <b>«VIP» (по индивидуальному согласованию)</b> — количество счетов и начальная сумма торговли по согласованию, торговля в рост и в падение (с шортами), предельный целевой темп доходности стратегии до 240% годовых.
379
335
  </p>
380
336
  <p><b>4. Запрет автоследования и ретрансляции сигналов:</b> Пользователю строго запрещается подключать к платформе счета, участвующие в сервисах автоследования или копирования сделок (как в роли ведущего/автора стратегии, так и в роли подписчика), а также передавать или перепродавать сигналы третьим лицам. При обнаружении признаков автоследования счёт автоматически блокируется.</p>
381
337
  <p style="margin-bottom:0"><b>5. Декларация о рисках:</b> Торговля ценными бумагами сопряжена с риском потери части или всего инвестированного капитала. Результаты на исторических данных не гарантируют доходности в будущем. Полный текст документа: <a href="/legal" target="_blank" style="color:var(--accent)">открыть /legal →</a></p>
@@ -533,29 +533,16 @@
533
533
  <button data-m="12">12 месяцев (−20%)</button>
534
534
  </div>
535
535
  </div>
536
- <div class="plans">
537
- <div class="plan">
538
- <h3>Старт (Тест-драйв)</h3>
539
- <div class="plan-desc">Для тестирования любых стратегий и проверки сигналов на виртуальном счёте без реальной торговли</div>
540
- <div class="price">0 ₽ <span>/ бесплатно</span></div>
541
- <ul>
542
- <li><b>Полный доступ к Экспериментам</b>: тестируйте стратегии любой доходности</li>
543
- <li>1 виртуальный демо-счёт в реальном времени со сверкой коридора</li>
544
- <li>Карта рынка, новости Мосбиржи и ИИ-управляющий «Стратег»</li>
545
- <li>Без подключения реальных брокерских счетов</li>
546
- </ul>
547
- <button class="btn" type="button" id="btn-free-start">Начать тестирование</button>
548
- </div>
549
-
536
+ <div class="plans" style="grid-template-columns:repeat(auto-fit,minmax(300px,1fr))">
550
537
  <div class="plan">
551
538
  <h3>Инвестор</h3>
552
539
  <div class="plan-desc">Консервативная реальная торговля только от покупки (без шортов)</div>
553
540
  <div class="price" id="price-investor">3 900 ₽ <span>/ мес</span></div>
554
541
  <ul>
555
- <li>До <b>2 брокерских счетов</b> (Т-Банк, БКС, Финам, Алор)</li>
556
- <li>Лимит капитала в торговле: <b>до 1 000 000 ₽</b> на каждом счёте</li>
557
- <li>Режим <b>«Только в рост (без шорта)»</b>, консервативный слот</li>
558
- <li>Предельный уровень доходности стратегии: <b>до 50% годовых</b></li>
542
+ <li><b>1 брокерский счёт</b> (Т-Банк, БКС, Финам, Алор и др.)</li>
543
+ <li>Лимит стартового капитала: <b>до 1 000 000 ₽</b> (+ 100% реинвестирование всей прибыли)</li>
544
+ <li>Режим <b>«Только в рост (без шорта)»</b>, также доступен тестовый контур (песочница брокера)</li>
545
+ <li>Задавленный уровень доходности стратегии: <b>до 60% годовых</b></li>
559
546
  <li>Подтверждение заявок в 1 клик в <b>Telegram и MAX</b></li>
560
547
  </ul>
561
548
  <button class="btn primary" data-buy="investor">Оформить «Инвестор»</button>
@@ -568,10 +555,10 @@
568
555
  <div class="price" id="price-pro">9 900 ₽ <span>/ мес</span></div>
569
556
  <ul>
570
557
  <li>До <b>5 брокерских счетов</b> параллельно</li>
571
- <li>Лимит капитала в торговле: <b>до 10 000 000 ₽</b> на каждом счёте</li>
572
- <li>Режим <b>«В рост и в падение (с шортом)»</b> с адаптацией к индексу</li>
573
- <li>Предельный уровень доходности стратегии: <b>до 100% годовых</b></li>
574
- <li>До 5 виртуальных счетов и 500 экспериментов в сутки</li>
558
+ <li>Лимит стартового капитала: <b>до 1 000 000 ₽</b> на каждом счёте (+ 100% реинвестирование всей прибыли)</li>
559
+ <li>Режим <b>«В рост и в падение (с шортом)»</b> с адаптацией к тренду индекса</li>
560
+ <li>Задавленный уровень доходности стратегии: <b>до 120% годовых</b></li>
561
+ <li>Поддержка боевого и тестового (песочница) режимов на каждом счёте</li>
575
562
  </ul>
576
563
  <button class="btn primary" data-buy="pro">Оформить «Профи»</button>
577
564
  </div>
@@ -579,15 +566,15 @@
579
566
 
580
567
  <div class="plan-vip-wide">
581
568
  <div>
582
- <span class="pop-ribbon" style="position:static;display:inline-block;margin-bottom:8px;background:linear-gradient(135deg,#d97706,#f59e0b)">Полная институциональная мощность</span>
583
- <h3 style="font-size:24px;margin-bottom:6px">👑 Тариф VIP (Без ограничений)</h3>
584
- <div class="plan-desc" style="margin-bottom:10px">Индивидуальный контур без ограничений по доходности, числу счетов и объёму капитала</div>
569
+ <span class="pop-ribbon" style="position:static;display:inline-block;margin-bottom:8px;background:linear-gradient(135deg,#d97706,#f59e0b)">Расширенная мощность</span>
570
+ <h3 style="font-size:24px;margin-bottom:6px">👑 Тариф VIP</h3>
571
+ <div class="plan-desc" style="margin-bottom:10px">Индивидуальное количество счетов и начальная сумма торговли по согласованию</div>
585
572
  <div style="font-size:26px;font-weight:800;color:#fbbf24">По согласованию</div>
586
573
  </div>
587
574
  <ul>
588
- <li><b>Без ограничений</b> по числу брокерских счетов и сумме капитала на каждом счёте</li>
589
- <li><b>Без потолка годовой доходности</b> (100% мощности лучших экспериментов)</li>
590
- <li>Включён <b>VIP-форсаж</b>: внутричасовой перехват <code>H/2</code> + динамическая концентрация <code>Conviction Sizing</code></li>
575
+ <li><b>Количество брокерских счетов и начальная сумма торговли</b> — по индивидуальному согласованию</li>
576
+ <li>Задавленный уровень доходности стратегии: <b>до 240% годовых</b></li>
577
+ <li>Режим <b>«В рост и в падение (с шортом)»</b> с повышенной концентрацией слота</li>
591
578
  <li>Персональный VIP-токен активации от администратора платформы</li>
592
579
  </ul>
593
580
  <div style="display:flex;flex-direction:column;gap:10px;min-width:220px">
@@ -666,13 +653,12 @@
666
653
  <div class="modal-box" style="max-width:660px">
667
654
  <h3>Договор публичной оферты и Декларация о рисках</h3>
668
655
  <div style="background:#070b14;border:1px solid var(--line);border-radius:10px;padding:14px 16px;max-height:260px;overflow-y:auto;font-size:13px;line-height:1.55;color:#cbd5e1;margin-bottom:14px">
669
- <p style="margin-top:0"><b>1. Предмет договора:</b> Настоящая Публичная оферта регулирует предоставление доступа к облачной аналитической платформе «НейроАльфа» (PaaS/SaaS) согласно выбранному тарифному плану («Старт», «Инвестор», «Профи», «VIP»).</p>
656
+ <p style="margin-top:0"><b>1. Предмет договора:</b> Настоящая Публичная оферта регулирует предоставление доступа к облачной аналитической платформе «НейроАльфа» (PaaS/SaaS) согласно выбранному тарифному плану («Инвестор», «Профи», «VIP»).</p>
670
657
  <p><b>2. Правовой статус (отсутствие ИИР и ДУ):</b> Сервис является исключительно программно-техническим средством (калькулятором статистических закономерностей). Исполнитель <b>не осуществляет инвестиционное консультирование</b>, не даёт индивидуальных инвестиционных рекомендаций (ФЗ № 39-ФЗ) и не осуществляет доверительное управление. Все сделки совершаются Пользователем самостоятельно на его личном брокерском счёте.</p>
671
658
  <p><b>3. Параметры тарифов и предельные уровни доходности:</b>
672
- <br>• <b>«Старт» (0 ₽)</b> — тестирование в Экспериментах и виртуальный счёт без реальной торговли;
673
- <br>• <b>«Инвестор»</b> — до 2 брокерских счетов, лимит до 1 000 000 ₽ на каждом, торговля только от покупки («Только в рост (без шорта)»), предельный целевой темп доходности стратегии до 50% годовых;
674
- <br>• <b>«Профи»</b> — до 5 брокерских счетов, лимит до 10 000 000 ₽ на каждом, торговля в рост и в падение (с шортами), предельный целевой темп доходности до 100% годовых;
675
- <br>• <b>«VIP»</b> — по индивидуальному согласованию (VIP-токен), без ограничений по числу счетов, сумме капитала и потолку годовой доходности (включая полушаговое сопровождение H/2 и динамическую концентрацию слота).
659
+ <br>• <b>«Инвестор» (3 900 ₽/мес)</b> — 1 брокерский счёт, стартовый лимит до 1 000 000 ₽ (+ реинвестирование всей прибыли), торговля только от покупки («Только в рост (без шорта)»), предельный целевой темп доходности стратегии до 60% годовых;
660
+ <br>• <b>«Профи» (9 900 ₽/мес)</b> — до 5 брокерских счетов, стартовый лимит до 1 000 000 ₽ на каждом (+ реинвестирование всей прибыли), торговля в рост и в падение (с шортами), предельный целевой темп доходности до 120% годовых;
661
+ <br>• <b>«VIP»</b> — по индивидуальному согласованию (VIP-токен), количество счетов и начальная сумма торговли по согласованию, торговля с шортами, предельный целевой темп доходности до 240% годовых.
676
662
  </p>
677
663
  <p><b>4. Запрет автоследования и ретрансляции сигналов:</b> Пользователю строго запрещается подключать к платформе счета, участвующие в сервисах автоследования или копирования сделок (как в роли ведущего/автора стратегии, так и в роли подписчика), а также передавать или перепродавать сигналы третьим лицам. При обнаружении признаков автоследования счёт автоматически блокируется.</p>
678
664
  <p style="margin-bottom:0"><b>5. Декларация о рисках:</b> Торговля ценными бумагами сопряжена с риском потери части или всего инвестированного капитала. Результаты на исторических данных не гарантируют доходности в будущем. Полный текст: <a href="/legal" target="_blank" style="color:#93c5fd">открыть в новой вкладке →</a></p>
package/public/legal.html CHANGED
@@ -49,10 +49,9 @@
49
49
 
50
50
  <h3>1.2. Тарифные планы и технические параметры мощности</h3>
51
51
  <ul>
52
- <li><b>Тариф «Старт (Тест-драйв)» (0 ₽):</b> предоставляет доступ к историческим исследованиям (экспериментам) и 1 виртуальному демо-счёту без возможности подключения реальных брокерских счетов.</li>
53
- <li><b>Тариф «Инвестор»:</b> позволяет подключить до 2 реальных брокерских счетов с ограничением выделенного капитала до 1 000 000 ₽ на каждом счёте, работающих исключительно в режиме покупок («Только в рост (без шорта)») с консервативным профилем загрузки слота и предельным целевым темпом доходности стратегии до 50% годовых.</li>
54
- <li><b>Тариф «Профи»:</b> позволяет подключить до 5 реальных брокерских счетов с ограничением выделенного капитала до 10 000 000 ₽ на каждом счёте, включает режим работы на росте и падении акций («В рост и в падение (с шортом)») со стандартным шагом ребалансировки и предельным целевым темпом доходности стратегии до 100% годовых.</li>
55
- <li><b>Тариф «VIP (Без ограничений)»:</b> предоставляется по индивидуальному согласованию с Администрацией платформы (через персональный VIP-токен), снимает ограничения на количество счетов, объём торгового капитала и потолок годовой доходности, активируя полный режим мощности ядра (внутричасовое полушаговое сопровождение <code>H/2</code> и динамическую концентрацию слота <code>Conviction Sizing</code>).</li>
52
+ <li><b>Тариф «Инвестор»:</b> позволяет подключить 1 брокерский счёт со стартовым лимитом капитала до 1 000 000 ₽ (+ реинвестирование всей заработанной прибыли), работающий исключительно в режиме покупок («Только в рост (без шорта)») с предельным целевым темпом доходности стратегии до 60% годовых.</li>
53
+ <li><b>Тариф «Профи»:</b> позволяет подключить до 5 брокерских счетов со стартовым лимитом капитала до 1 000 000 ₽ на каждом счёте (+ реинвестирование всей заработанной прибыли), включает режим работы на росте и падении акций («В рост и в падение (с шортом)») с предельным целевым темпом доходности стратегии до 120% годовых.</li>
54
+ <li><b>Тариф «VIP»:</b> предоставляется по индивидуальному согласованию с Администрацией платформы (через персональный VIP-токен), количество счетов и начальная сумма торговли определяются по согласованию, включает работу с шортами и предельный целевой темп доходности стратегии до 240% годовых.</li>
56
55
  </ul>
57
56
 
58
57
  <h3>1.3. Запрет использования автоследования и ретрансляции сигналов</h3>
package/public/styles.css CHANGED
@@ -187,8 +187,12 @@ body.light .tbadge.run { background: #dbeafe; border-color: #93c5fd; }
187
187
  .toolbar { display: flex; gap: 8px; align-items: center; }
188
188
  .toolbar select { flex: 1; min-width: 0; }
189
189
  .progress { position: relative; height: 22px; background: var(--panel); border-radius: 6px; overflow: hidden; margin-top: 10px; }
190
- .progress .bar { position: absolute; inset: 0 auto 0 0; width: 0; background: #24467f; transition: width .2s; }
190
+ .progress .bar { position: absolute; inset: 0 auto 0 0; width: 0; background: linear-gradient(90deg, #24467f 0%, #3b82f6 50%, #24467f 100%); background-size: 200% 100%; animation: progShimmer 1.6s linear infinite; transition: width .25s; }
191
+ @keyframes progShimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
191
192
  .progress span { position: relative; font-size: 12px; padding: 0 8px; line-height: 22px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }
193
+ .ld-calc-banner { display: flex; align-items: center; gap: 12px; background: rgba(59, 130, 246, 0.12); border: 1px solid rgba(59, 130, 246, 0.45); border-radius: 10px; padding: 12px 16px; margin-bottom: 12px; animation: calcPulse 1.8s ease-in-out infinite; }
194
+ @keyframes calcPulse { 0%, 100% { border-color: rgba(59, 130, 246, 0.35); background: rgba(59, 130, 246, 0.09); } 50% { border-color: rgba(59, 130, 246, 0.75); background: rgba(59, 130, 246, 0.17); } }
195
+ .ld-calc-spin { width: 20px; height: 20px; border: 2.5px solid var(--accent); border-right-color: transparent; border-radius: 50%; flex-shrink: 0; animation: tspin .75s linear infinite; }
192
196
  .empty { margin-top: 30px; color: var(--muted); line-height: 1.7; max-width: 640px; }
193
197
  .empty.live-dash { margin-top: 14px; max-width: none; color: var(--text); line-height: 1.45; }
194
198
  .empty b { color: var(--text); }
@@ -254,9 +258,11 @@ tr.best td { background: var(--best-bg); }
254
258
  .stab-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
255
259
  .stab-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
256
260
  .stab-chip { background: var(--bg); border: 1px solid var(--line); border-radius: 6px; padding: 2px 8px; font-size: 12px; }
257
- .live-card { background: var(--bg); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; margin-top: 10px; }
261
+ .live-card { background: var(--bg); border: 1px solid var(--line); border-radius: 10px; padding: 14px 18px; margin-top: 10px; }
258
262
  .live-card.stopped { opacity: .75; }
259
- .live-card.collapsed { padding: 10px 14px; }
263
+ .live-card.collapsed { padding: 12px 18px; }
264
+ .llm-prov.live-card { padding: 14px 18px; border-bottom: 1px solid var(--line); }
265
+ .llm-prov.live-card.collapsed { padding: 12px 18px; }
260
266
  .acc-fold-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; cursor: pointer; user-select: none; }
261
267
  .acc-fold-head:hover b { color: var(--accent); }
262
268
  .acc-caret { display: inline-block; width: 16px; color: var(--muted); font-size: 12px; transition: transform .15s; }
@@ -275,7 +281,7 @@ body.light .think-body { color: #4b5563; }
275
281
  body.light .scard { background: var(--panel); }
276
282
  body.light .snav button.active { background: #eaeef2; color: var(--text); }
277
283
  body.light .snav button:hover { background: #f0f3f6; }
278
- body.light .progress .bar { background: #b6d0ff; }
284
+ body.light .progress .bar { background: linear-gradient(90deg, #b6d0ff 0%, #60a5fa 50%, #b6d0ff 100%); background-size: 200% 100%; }
279
285
  body.light .feed-down, body.light #toast div { box-shadow: 0 6px 20px rgba(15, 23, 42, 0.14); }
280
286
  body.light ::-webkit-scrollbar-thumb { background: #c1c8d1; border-color: var(--bg); }
281
287
  body.light ::-webkit-scrollbar-thumb:hover { background: #9aa4b2; }