chore: initial import

This commit is contained in:
u1
2026-01-06 12:33:47 +01:00
commit 69849cb9e9
12 changed files with 1972 additions and 0 deletions

338
bot-plan.html Normal file
View File

@@ -0,0 +1,338 @@
<!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Bot: analiza wielu par na Solanie + sygnał wejścia (top 10)</title>
<style>
:root {
color-scheme: light dark;
--bg: #0b1020;
--panel: rgba(255, 255, 255, 0.06);
--text: rgba(255, 255, 255, 0.92);
--muted: rgba(255, 255, 255, 0.68);
--accent: #7c3aed;
--border: rgba(255, 255, 255, 0.12);
--shadow: 0 12px 40px rgba(0, 0, 0, 0.35);
}
@media (prefers-color-scheme: light) {
:root {
--bg: #f6f7fb;
--panel: rgba(0, 0, 0, 0.04);
--text: rgba(0, 0, 0, 0.88);
--muted: rgba(0, 0, 0, 0.62);
--accent: #6d28d9;
--border: rgba(0, 0, 0, 0.10);
--shadow: 0 12px 40px rgba(15, 23, 42, 0.14);
}
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial,
"Apple Color Emoji", "Segoe UI Emoji";
line-height: 1.55;
background: radial-gradient(1200px 600px at 20% -10%, rgba(124, 58, 237, 0.28), transparent),
radial-gradient(900px 500px at 95% 10%, rgba(59, 130, 246, 0.18), transparent),
var(--bg);
color: var(--text);
}
a {
color: inherit;
}
.container {
max-width: 980px;
margin: 48px auto;
padding: 0 18px;
}
header {
padding: 22px 22px 18px;
border: 1px solid var(--border);
background: linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.03));
border-radius: 16px;
box-shadow: var(--shadow);
}
h1 {
font-size: 26px;
margin: 0 0 6px;
letter-spacing: -0.01em;
}
.subtitle {
margin: 0;
color: var(--muted);
}
main {
margin-top: 18px;
display: grid;
gap: 14px;
}
section {
border: 1px solid var(--border);
background: var(--panel);
border-radius: 16px;
padding: 18px 18px 16px;
}
h2 {
margin: 0 0 10px;
font-size: 18px;
letter-spacing: -0.01em;
}
h3 {
margin: 14px 0 8px;
font-size: 15px;
color: var(--muted);
font-weight: 650;
}
ul,
ol {
margin: 8px 0 0 18px;
padding: 0;
}
li {
margin: 6px 0;
}
code {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
"Courier New", monospace;
font-size: 0.95em;
padding: 0.05em 0.35em;
border-radius: 8px;
border: 1px solid var(--border);
background: rgba(0, 0, 0, 0.18);
}
.pill {
display: inline-block;
padding: 0.12em 0.55em;
border-radius: 999px;
border: 1px solid var(--border);
background: rgba(124, 58, 237, 0.12);
color: var(--text);
font-weight: 600;
font-size: 12px;
margin-left: 8px;
vertical-align: middle;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>Bot: analiza wielu par na Solanie + sygnał wejścia (top 10)</h1>
<p class="subtitle">
Specyfikacja funkcjonalna: skanowanie wielu rynków, ranking i generowanie sygnałów (z opcją
egzekucji).
</p>
</header>
<main>
<section>
<h2>Cel</h2>
<ul>
<li>Monitoruje i analizuje dane z kilkudziesięciu par/rynków na Solanie.</li>
<li>
Wylicza sygnał wejścia (<em>long/short</em> lub <em>buy/sell</em>) i wybiera ~10
najlepszych okazji.
</li>
<li>Opcjonalnie automatycznie składa zlecenia (po dopracowaniu ryzyka).</li>
</ul>
</section>
<section>
<h2>Założenia / pytania decyzyjne <span class="pill">ustalić na start</span></h2>
<ol>
<li>
Czy handlujemy <strong>SPOT</strong> czy <strong>PERPS</strong>?
<ul>
<li>SPOT: swap + ewentualnie limit (zależnie od venue).</li>
<li>PERPS: leverage, funding, osobne ryzyka i mechanika zleceń.</li>
</ul>
</li>
<li>Interwał i horyzont: skaner 5s / 30s / 1m? Sygnał intraday czy swing?</li>
<li>Typy sygnałów: momentum, mean reversion, breakout, funding-arb, basis, orderflow.</li>
<li>
Ograniczenia: max dźwignia, max ekspozycja per rynek, max łączna ekspozycja, SL/TP.
</li>
</ol>
</section>
<section>
<h2>Źródła danych (Solana)</h2>
<ul>
<li>
RPC: stan kont, transakcje, price feeds, state orderbook/AMM (Helius/Alchemy/QuickNode).
</li>
<li>Oracle: Pyth (ceny), Switchboard (alternatywnie).</li>
<li>
Dane DEX:
<ul>
<li>AMM (Orca/Raydium): pool state, price, liquidity, tick.</li>
<li>Orderbook (Phoenix/OpenBook): book depth, spread, imbalance.</li>
</ul>
</li>
<li>
Dane PERPS:
<ul>
<li>Drift: mark price, oracle, funding, OI, pozycje, margin, perp state (SDK).</li>
</ul>
</li>
</ul>
</section>
<section>
<h2>Architektura (proponowana)</h2>
<ol>
<li>
<strong>Universe (lista rynków)</strong>
<ul>
<li>Start: 3080 rynków (top wolumen / top OI / ręcznie wybrane).</li>
<li>Aktualizacja listy raz dziennie lub co godzinę.</li>
</ul>
</li>
<li>
<strong>Collector (pobieranie danych)</strong>
<ul>
<li>
Polling (bez batch) + cache: ceny (Pyth/oracle), wolumen/OI/funding (perps),
spread/depth (orderbook), liquidity/TVL (AMM).
</li>
<li>
Normalizacja do jednego formatu:
<code>timestamp, symbol/marketId, price, returns, vol, spread, depth, funding, OI, liquidity</code>
</li>
</ul>
</li>
<li>
<strong>Feature engineering (cechy)</strong>
<ul>
<li>returns (1m/5m/15m), RSI, EMA cross, ATR/volatility,</li>
<li>orderbook imbalance, spread %, slippage estymowana dla rozmiaru pozycji,</li>
<li>perps: funding (aktualny + trend), basis, utilization, OI change.</li>
</ul>
</li>
<li>
<strong>Scoring (ranking i selekcja top N)</strong>
<ul>
<li>wynik = f(signal_strength, liquidity_score, cost_score, risk_score)</li>
<li>filtr: minimalna płynność / maksymalny spread / maks. slippage</li>
<li>wybór: top 10 rynków do wejścia lub do obserwacji</li>
</ul>
</li>
<li>
<strong>Execution (składanie zleceń)</strong> dopiero po stabilizacji
<ul>
<li>tryb “paper” (log + symulacja) → tryb “live” (małe size)</li>
<li>
risk manager przed wysłaniem:
<ul>
<li>max size per rynek</li>
<li>max łączna ekspozycja</li>
<li>cooldown, max liczba otwartych pozycji</li>
<li>warunki anulowania (np. slippage &gt; X)</li>
</ul>
</li>
</ul>
</li>
<li>
<strong>Observability</strong>
<ul>
<li>logi sygnałów i decyzji</li>
<li>metryki: winrate, MDD, slippage, koszt fee, latency</li>
<li>alerty: RPC errors, divergence oracle/mark, brak danych</li>
</ul>
</li>
</ol>
</section>
<section>
<h2>Jaki dApp jest najlepszy do bota?</h2>
<p>
To zależy, czy chcesz SPOT czy PERPS. Kryteria “najlepszy” dla bota:
</p>
<ul>
<li>stabilne API/SDK (TS/Python), dobre typy i przykłady,</li>
<li>zlecenia limit/market i sensowna płynność,</li>
<li>bezpieczny model kluczy (delegate / subaccount / ograniczenia),</li>
<li>koszty (fees, slippage) i ryzyka (leverage/funding).</li>
</ul>
<h3>Rekomendacja (PERPS, sygnały na 10 rynkach)</h3>
<ul>
<li>
<strong>Drift</strong> jest najpraktyczniejszy, bo ma dojrzałe SDK
(<code>@drift-labs/sdk</code>), workflow delegate i spójny system ryzyk (margin/health).
</li>
<li>Jest to spójne z obecnym repozytorium (workflow Drift + delegate).</li>
</ul>
<h3>Rekomendacja (SPOT, egzekucja swapów)</h3>
<ul>
<li>
<strong>Jupiter</strong> zwykle najlepiej nadaje się do wykonania swapów (routing,
egzekucja, slippage).
</li>
<li>
Jeśli potrzebujesz limit orders na SPOT: Phoenix/OpenBook (większa złożoność:
orderbook + cancel/replace).
</li>
</ul>
<h3>Proponowany “hybrid”</h3>
<ul>
<li>Sygnał niezależny od venue (feature store + ranking).</li>
<li>SPOT: egzekucja przez Jupiter.</li>
<li>PERPS: egzekucja na Drift.</li>
<li>Dane: oracle + metryki DEX + metryki perps.</li>
</ul>
</section>
<section>
<h2>Minimalny MVP (12 tygodnie, bez live trading)</h2>
<ol>
<li>Universe 3050 rynków + konfiguracja w pliku.</li>
<li>Collector: ceny + podstawowe metryki per rynek (wspólny format).</li>
<li>Ranking: prosty score (momentum + liquidity cost).</li>
<li>
Output co X sekund:
<ul>
<li>top 10 rynków</li>
<li>strona (long/short)</li>
<li>siła sygnału</li>
<li>est. slippage</li>
<li>uzasadnienie (cechy)</li>
</ul>
</li>
<li>Backtest “na sucho”: zapis sygnałów do CSV/JSONL, analiza w Pythonie.</li>
</ol>
</section>
<section>
<h2>Następne kroki</h2>
<ol>
<li>Potwierdź: SPOT czy PERPS (czy oba)?</li>
<li>Podaj listę par (albo kryterium wyboru).</li>
<li>Potwierdź częstotliwość skanowania (np. 10s/30s/60s) i horyzont.</li>
<li>Powiedz, czy bot ma tylko sygnalizować, czy też automatycznie tradować.</li>
</ol>
</section>
</main>
</div>
</body>
</html>