339 lines
11 KiB
HTML
339 lines
11 KiB
HTML
<!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: 30–80 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 > 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 (1–2 tygodnie, bez live trading)</h2>
|
||
<ol>
|
||
<li>Universe 30–50 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>
|