neuroalpha 0.6.11 → 0.6.13
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/docs//320/230/320/235/320/241/320/242/320/240/320/243/320/232/320/246/320/230/320/257.md +5 -4
- 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 +12 -9
- package/package.json +1 -1
- package/server/brokers/index.js +179 -146
- package/server/index.js +33 -8
- package/server/model/dataset.js +2 -4
- package/server/model/forecast.js +1 -3
- package/server/model/policy.js +173 -35
- package/server/model/research.js +4 -3
- package/server/model/simulator.js +148 -19
- package/server/news/index.js +2 -3
- package/server/strategist/index.js +7 -6
package/server/news/index.js
CHANGED
|
@@ -146,7 +146,7 @@ async function collectOnce() {
|
|
|
146
146
|
const perSource = {};
|
|
147
147
|
let fresh = 0;
|
|
148
148
|
results.forEach((r, i) => {
|
|
149
|
-
if (r.status !== 'fulfilled')
|
|
149
|
+
if (r.status !== 'fulfilled') return;
|
|
150
150
|
let n = 0;
|
|
151
151
|
for (const it of r.value) {
|
|
152
152
|
if (it.ts < Date.now() - 3 * DAY || it.ts > Date.now() + 3600000) continue; // старьё и будущее не берём
|
|
@@ -157,7 +157,6 @@ async function collectOnce() {
|
|
|
157
157
|
});
|
|
158
158
|
fresh = Object.values(perSource).reduce((a, b) => a + b, 0);
|
|
159
159
|
if (fresh) {
|
|
160
|
-
console.log(`Новости: +${fresh} (${Object.entries(perSource).map(([k, v]) => `${k} ${v}`).join(', ')})`);
|
|
161
160
|
hub.emit({ type: 'news:update', fresh });
|
|
162
161
|
}
|
|
163
162
|
await markPending(vocab, m);
|
|
@@ -240,7 +239,7 @@ function schedule(ms) {
|
|
|
240
239
|
timer = setTimeout(async () => {
|
|
241
240
|
if (!busy) {
|
|
242
241
|
busy = true;
|
|
243
|
-
try { await collectOnce(); } catch
|
|
242
|
+
try { await collectOnce(); } catch { /* ошибки источников не выводятся в консоль */ } finally { busy = false; }
|
|
244
243
|
}
|
|
245
244
|
schedule(isTradingTime() ? 10 * 60000 : 30 * 60000);
|
|
246
245
|
}, ms);
|
|
@@ -260,12 +260,13 @@ ${liveTradingSummary}
|
|
|
260
260
|
- Базовый порог выгоды на вход = 2,5 × 2 × (комиссия + проскальзывание) × 1,60. Для 1-го эшелона при настройке издержек 0,05% базовый порог составляет **+0,40%** (с тонкой поправкой symbolEdgeMult на оборот и волатильность бумаги в коридоре 0,88..1,45).
|
|
261
261
|
- Для 2–3-го эшелона порог входа повышен в **1,20× (TIER2_EDGE_MULT)** — до **~+0,48%**, чтобы ожидаемый импульс с запасом перекрывал более широкий спред стакана. В первые 20 минут утренней сессии (07:00–07:20 МСК) шорты 2-го эшелона блокируются из-за пустого утреннего стакана.
|
|
262
262
|
- Авто-балансировка по тренду индекса (isMarketDown): на растущем рынке покупки открываются от базового порога (+0,40% 1-й эшелон и +0,48% 2-й эшелон), а контртрендовые шорты ужесточаются в 1,25× (до −0,50% и −0,60%). На падающем рынке — наоборот: покупки ужесточаются в 1,25×, а шорты облегчаются в 0,90×. Всегда называй пользователю точный индивидуальный порог конкретной бумаги (\`порог_покупки_проц\` / \`порог_шорта_проц\`).
|
|
263
|
-
- **Размер позиций,
|
|
264
|
-
-
|
|
265
|
-
-
|
|
266
|
-
1. В **1-м эшелоне**
|
|
267
|
-
2. Во **2-м эшелоне** действует
|
|
268
|
-
-
|
|
263
|
+
- **Размер позиций, сублинейное плечо, перелив капитала и динамическое потеснение (policy.js):**
|
|
264
|
+
- **Живой Conviction Sizing без холостого резерва:** робот держит до 4 лонгов и до 4 шортов, но поскольку 81,5% активного времени на рынке есть ровно 1 сигнал, стратегия не замораживает половину лимита «на всякий случай». В режиме владельца базовый слот 1-го эшелона составляет 56% бюджета и масштабируется на силу сигнала conv (от 0,85× до 1,92×), разгоняя сильные одиночные импульсы до **92% бюджета в лонг и до 70% в шорт** на счёте 1× (на VIP — до 75% / 56%, на Профи — до 52% / 40%, на Инвесторе — до 58% в лонг).
|
|
265
|
+
- **Сублинейное масштабирование одиночной позиции по плечу (tierSizeMult):**
|
|
266
|
+
1. В **1-м эшелоне** потолок одной бумаги растёт с плечом счёта сублинейно по формуле 1 + 0,80 × (плечо − 1) (на 1× → 1,00×, на 2× → 1,80×, на 3× → 2,60× при общем лимите портфеля 2×..3× капитала). Это удерживает риск одной бумаги под контролем, а разницу между лимитом бумаги и общим плечом счёта превращает в бесплатный маржинальный резерв под 2-ю и 3-ю параллельные сделки под залог LQDT.
|
|
267
|
+
2. Во **2-м эшелоне** действует прямой риск-потолок без двойного штрафа: до **17% бюджета в лонг** (масштаб плеча 1 + 0,72 × (плечо − 1)) и до **7% в шорт** (1 + 0,40 × (плечо − 1)), под жёстким отсечением по реальной ликвидности биржи — **не более 15% от медианного 10-минутного оборота свечи (barTurnoverRub)** (минимум 45 000 ₽).
|
|
268
|
+
- **Итеративный перелив капитала (waterFillAllocations) и чистая отдача (netPickSort):** очерёдность и веса между отобранными сделками определяются по чистой ожидаемой отдаче за вычетом круговых издержек (|expectedPct| − 0,13% для 1-го эшелона и |expectedPct| − 0,25% для 2-го). При одновременном входе бумаги с узким лимитом (2-й эшелон / тонкий стакан) забирают ровно свой потолок, а весь невыбранный остаток переливается флагманским лидерам 1-го эшелона.
|
|
269
|
+
- **Двухступенчатое динамическое потеснение (crowdOut):** если свободного лимита не хватает под новый сильный сигнал 1-го эшелона (не моложе 20 минут жизни уже открытых сделок), робот освобождает место по факту: (1) полностью ротирует остывшую позицию либо (2) частично подрезает позицию 2-го эшелона под флагман 1-го эшелона с сохранением времени входа entryTs и накопленного пика peakPrice для трала Profit Lock (на счетах auto работает и на быстрых 20-секундных входах, на confirm — на плановых 30-минутных шагах).
|
|
269
270
|
- **Капитал в фонде денежного рынка LQDT как залог:** свободный капитал работает в LQDT, а внутридневные позиции открываются под обеспечение и закрываются до ночи (без платы брокеру за перенос через ночь).
|
|
270
271
|
- **Глубина сопровождения позиций (130 минут), фиксация прибыли и защитные контуры:**
|
|
271
272
|
- **Глубина сопровождения (holdBars = 13 свечей = 130 минут = 2 ч 10 м):** плановая ревизия портфеля идёт каждые 20–30 минут (holdBars / 5), а вечернее окно новых внутридневных входов закрывается за 130 минут до конца торгов (после **21:30 МСК** новые входы не открываются, перед 23:40–23:50 МСК позиции закрываются перед ночью).
|