neuroalpha 0.3.15 → 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/README.md +80 -170
- package/config/strategy.json +2 -2
- package/docs//320/221/320/240/320/236/320/232/320/225/320/240/320/253_API.md +4 -3
- package/docs//320/224/320/225/320/237/320/233/320/236/320/231.md +10 -17
- package/docs//320/230/320/235/320/241/320/242/320/240/320/243/320/232/320/246/320/230/320/257.md +97 -156
- package/docs//320/234/320/225/320/245/320/220/320/235/320/230/320/232/320/220_/320/230_/320/237/320/220/320/240/320/220/320/234/320/225/320/242/320/240/320/253.md +29 -45
- package/package.json +1 -1
- package/public/admin.html +9 -8
- package/public/app.js +444 -829
- package/public/index.html +141 -199
- package/public/landing.html +19 -33
- package/public/legal.html +3 -4
- package/public/styles.css +6 -2
- package/server/api/routes.js +10 -3
- package/server/auth/index.js +53 -34
- package/server/brokers/index.js +430 -104
- package/server/data/moex.js +74 -23
- package/server/db.js +3 -2
- package/server/model/dataset.js +10 -2
- package/server/model/forecast.js +56 -19
- package/server/model/live.js +30 -6
- package/server/model/models.js +113 -31
- package/server/model/research.js +100 -26
- package/server/params-meta.js +16 -16
- package/server/strategist/index.js +4 -0
- package/server/strategist/tools.js +229 -0
package/public/index.html
CHANGED
|
@@ -100,221 +100,168 @@
|
|
|
100
100
|
<div id="splitter" title="Потяните, чтобы изменить ширину. Двойной щелчок — по умолчанию"></div>
|
|
101
101
|
|
|
102
102
|
<section class="right">
|
|
103
|
-
<
|
|
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="
|
|
162
|
-
<button type="button" data-
|
|
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-
|
|
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-
|
|
170
|
-
<div class="stitle bar"><span
|
|
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="
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
|
|
182
|
-
|
|
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="
|
|
197
|
+
<div id="forecast" class="muted">Стратегия обучится на последних месяцах и скажет, какие акции, по её мнению, будут сильнее или слабее рынка в ближайшие часы и под чьим влиянием.</div>
|
|
185
198
|
</div>
|
|
186
199
|
</section>
|
|
187
|
-
|
|
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
|
-
|
|
198
|
-
|
|
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
|
-
<
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
|
|
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" id="broker-select">
|
|
257
|
-
<optgroup label="Облачный REST API (прямое подключение по токену)">
|
|
258
|
-
<option value="tbank">Т-Банк (T-Invest API)</option>
|
|
259
|
-
<option value="finam">Финам (Finam Trade API)</option>
|
|
260
|
-
<option value="bcs">БКС Мир инвестиций (Trade API)</option>
|
|
261
|
-
<option value="alor">Алор Брокер (Alor OpenAPI v2)</option>
|
|
262
|
-
<option value="cifra">Цифра брокер (Tradernet API)</option>
|
|
263
|
-
<option value="iticapital">ITI Capital (OpenAPI)</option>
|
|
264
|
-
</optgroup>
|
|
265
|
-
<optgroup label="Подтверждение заявок (Telegram / MAX) или мост QUIK">
|
|
266
|
-
<option value="sber">СберИнвестиции (Сбербанк)</option>
|
|
267
|
-
<option value="vtb">ВТБ Мои Инвестиции</option>
|
|
268
|
-
<option value="alfa">Альфа-Инвестиции</option>
|
|
269
|
-
</optgroup>
|
|
270
|
-
</select>
|
|
271
|
-
</label>
|
|
272
|
-
<details id="broker-guide-box" style="margin:2px 0 4px;border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:8px 14px">
|
|
273
|
-
<summary id="broker-guide-sum" style="cursor:pointer;font-weight:600;font-size:13px;color:var(--accent)">📖 Как получить токен и подключить счёт (пошаговая памятка)</summary>
|
|
274
|
-
<div id="broker-guide-body" class="small" style="margin-top:8px;line-height:1.55;color:var(--text)"></div>
|
|
275
|
-
</details>
|
|
276
|
-
<label><span id="broker-token-lbl">Токен API</span><input name="token" id="broker-token-input" type="text" class="secret-input" autocomplete="off" spellcheck="false" data-lpignore="true" data-1p-ignore="true" placeholder="Токен доступа к API брокера (t.…)"></label>
|
|
277
|
-
<label>
|
|
278
|
-
<span id="broker-acc-lbl">Номер субсчёта / портфеля</span>
|
|
279
|
-
<div class="row-gap" style="width:100%">
|
|
280
|
-
<input name="accountId" id="broker-acc-input" autocomplete="off" placeholder="ID счёта (или нажмите кнопку справа →)" style="flex:1">
|
|
281
|
-
<button type="button" id="btn-broker-discover" style="white-space:nowrap">🔍 Найти мои счета по токену</button>
|
|
282
|
-
</div>
|
|
283
|
-
</label>
|
|
284
|
-
<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>
|
|
285
|
-
<label><span>Режим работы счёта</span>
|
|
286
|
-
<select name="mode">
|
|
287
|
-
<option value="readonly">Только чтение (портфель и сверка)</option>
|
|
288
|
-
<option value="confirm" selected>Подтверждение заявок (рекомендуется)</option>
|
|
289
|
-
<option value="auto">Автомат (лимитные заявки)</option>
|
|
290
|
-
</select>
|
|
291
|
-
</label>
|
|
292
|
-
<label><span>Начальный портфель на счёте (переходный период)</span>
|
|
293
|
-
<select name="legacyMode">
|
|
294
|
-
<option value="isolate" selected>Изолированный карман — не трогать старые бумаги (рекомендуется)</option>
|
|
295
|
-
<option value="smooth">Плавный переход — продавать старые акции только под новые покупки или при угрозе обвала</option>
|
|
296
|
-
<option value="takeover">Полное управление — сразу продать нецелевые акции под стратегию</option>
|
|
297
|
-
</select>
|
|
298
|
-
</label>
|
|
299
|
-
<label><span>Эксперимент для настроек</span>
|
|
300
|
-
<select name="baseRunId" id="broker-run-select">
|
|
301
|
-
<option value="">Текущие настройки</option>
|
|
302
|
-
</select>
|
|
303
|
-
</label>
|
|
304
|
-
<label><span>Лимит суммы на стратегию, ₽ (предохранитель)</span><input name="maxCapitalRub" type="number" min="10000" step="10000" value="100000"></label>
|
|
305
|
-
<label><span>Дневной стоп по просадке, % (предохранитель)</span><input name="maxDailyDrawdownPct" type="number" min="0.5" max="50" step="0.5" value="3"></label>
|
|
306
|
-
<label><span>Защитный отступ лимитной заявки, %</span><input name="limitOffsetPct" type="number" min="0" max="2" step="0.05" value="0.1"></label>
|
|
307
|
-
<label class="check"><span>Формировать заявки автоматически по закрытию свечи (с отправкой в Telegram / MAX)</span><input name="autoSchedule" type="checkbox" class="switch" checked></label>
|
|
308
|
-
<label class="check"><span>Не торговать в первые и последние 10 минут сессии</span><input name="skipEdgeMinutes" type="checkbox" class="switch" checked></label>
|
|
309
|
-
<label class="check"><span>Песочница брокера (тестовый контур)</span><input name="sandbox" type="checkbox" class="switch"></label>
|
|
310
|
-
<div class="row-gap">
|
|
311
|
-
<button class="primary" type="submit" id="broker-save-btn">Сохранить счёт</button>
|
|
312
|
-
<button type="button" id="broker-cancel-btn" hidden>Отмена</button>
|
|
313
|
-
</div>
|
|
314
|
-
</form>
|
|
315
|
-
</details>
|
|
316
|
-
</div>
|
|
317
|
-
</section>
|
|
264
|
+
|
|
318
265
|
<section class="ssec" data-sec="llm" id="llm-box" hidden>
|
|
319
266
|
<div class="stitle" id="llm-sum">Модели ИИ для Стратега</div>
|
|
320
267
|
<div class="scard spadded">
|
|
@@ -348,10 +295,6 @@
|
|
|
348
295
|
</details>
|
|
349
296
|
</div>
|
|
350
297
|
</section>
|
|
351
|
-
<section class="ssec" data-sec="hist" id="settings-history" hidden>
|
|
352
|
-
<div class="stitle">История изменений</div>
|
|
353
|
-
<div class="scard spadded" id="history"></div>
|
|
354
|
-
</section>
|
|
355
298
|
</div>
|
|
356
299
|
</div>
|
|
357
300
|
</div>
|
|
@@ -383,13 +326,12 @@
|
|
|
383
326
|
<button id="offer-close" class="icon">✕</button>
|
|
384
327
|
</div>
|
|
385
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">
|
|
386
|
-
<p style="margin-top:0"><b>1. Предмет договора:</b> Настоящая Публичная оферта регулирует предоставление доступа к облачной аналитической платформе «НейроАльфа» (PaaS/SaaS) согласно выбранному тарифному плану (
|
|
329
|
+
<p style="margin-top:0"><b>1. Предмет договора:</b> Настоящая Публичная оферта регулирует предоставление доступа к облачной аналитической платформе «НейроАльфа» (PaaS/SaaS) согласно выбранному тарифному плану («Инвестор», «Профи», «VIP»).</p>
|
|
387
330
|
<p><b>2. Правовой статус (отсутствие ИИР и ДУ):</b> Сервис является исключительно программно-техническим средством (калькулятором статистических закономерностей). Исполнитель <b>не осуществляет инвестиционное консультирование</b>, не даёт индивидуальных инвестиционных рекомендаций (ФЗ № 39-ФЗ) и не осуществляет доверительное управление. Все сделки совершаются Пользователем самостоятельно на его личном брокерском счёте.</p>
|
|
388
331
|
<p><b>3. Параметры тарифов и предельные уровни доходности:</b>
|
|
389
|
-
<br>• <b
|
|
390
|
-
<br>• <b
|
|
391
|
-
<br>• <b
|
|
392
|
-
<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% годовых.
|
|
393
335
|
</p>
|
|
394
336
|
<p><b>4. Запрет автоследования и ретрансляции сигналов:</b> Пользователю строго запрещается подключать к платформе счета, участвующие в сервисах автоследования или копирования сделок (как в роли ведущего/автора стратегии, так и в роли подписчика), а также передавать или перепродавать сигналы третьим лицам. При обнаружении признаков автоследования счёт автоматически блокируется.</p>
|
|
395
337
|
<p style="margin-bottom:0"><b>5. Декларация о рисках:</b> Торговля ценными бумагами сопряжена с риском потери части или всего инвестированного капитала. Результаты на исторических данных не гарантируют доходности в будущем. Полный текст документа: <a href="/legal" target="_blank" style="color:var(--accent)">открыть /legal →</a></p>
|
package/public/landing.html
CHANGED
|
@@ -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
|
|
556
|
-
<li>Лимит
|
|
557
|
-
<li>Режим <b>«Только в рост (без шорта)»</b>,
|
|
558
|
-
<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>Лимит
|
|
572
|
-
<li>Режим <b>«В рост и в падение (с шортом)»</b> с адаптацией к
|
|
573
|
-
<li
|
|
574
|
-
<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)"
|
|
583
|
-
<h3 style="font-size:24px;margin-bottom:6px">👑 Тариф VIP
|
|
584
|
-
<div class="plan-desc" style="margin-bottom:10px"
|
|
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
|
|
589
|
-
<li
|
|
590
|
-
<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) согласно выбранному тарифному плану (
|
|
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
|
|
673
|
-
<br>• <b
|
|
674
|
-
<br>• <b
|
|
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>Тариф
|
|
53
|
-
<li><b>Тариф
|
|
54
|
-
<li><b>Тариф
|
|
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 .
|
|
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); }
|
|
@@ -277,7 +281,7 @@ body.light .think-body { color: #4b5563; }
|
|
|
277
281
|
body.light .scard { background: var(--panel); }
|
|
278
282
|
body.light .snav button.active { background: #eaeef2; color: var(--text); }
|
|
279
283
|
body.light .snav button:hover { background: #f0f3f6; }
|
|
280
|
-
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%; }
|
|
281
285
|
body.light .feed-down, body.light #toast div { box-shadow: 0 6px 20px rgba(15, 23, 42, 0.14); }
|
|
282
286
|
body.light ::-webkit-scrollbar-thumb { background: #c1c8d1; border-color: var(--bg); }
|
|
283
287
|
body.light ::-webkit-scrollbar-thumb:hover { background: #9aa4b2; }
|