Files
trade-doc/bot-plan.html
2026-01-06 12:33:47 +01:00

339 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>