API Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΊΡΠΈΠΏΡΠΎΠ²Π°Π»ΡΡΠ½ΡΠΌ ΠΎΠΏΡΠΈΠΎΠ½Π°ΠΌ Ρ Binance.
API Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ https://options.szhub.space ΡΠ΅ΡΠ΅Π· Nginx (ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅Ρ Π½Π° ΠΏΠΎΡΡ 8080).
WebSocket: wss://options.szhub.space
ssh root@76.13.138.220
su - app
cd /home/app/options-backend
pm2 status # ΡΡΠ°ΡΡΡ
pm2 logs options # Π»ΠΎΠ³ΠΈ
pm2 restart options # ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ
pm2 stop options # ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
pm2 start index.js --name options # Π·Π°ΠΏΡΡΠΊ
GET /health
GET /api/expiries
Header: x-api-key: my_secret_key_12345
GET /api/summary
Header: x-api-key: my_secret_key_12345
GET /api/options
Header: x-api-key: my_secret_key_12345
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|---|---|---|
| underlying | ΠΠ°Π·ΠΎΠ²ΡΠΉ Π°ΠΊΡΠΈΠ² | BTC, ETH |
| type | Π’ΠΈΠΏ ΠΎΠΏΡΠΈΠΎΠ½Π° | CALL, PUT |
| expiry | ΠΠ°ΡΠ° ΡΠΊΡΠΏΠΈΡΠ°ΡΠΈΠΈ | 260207 |
| minVolume | ΠΠΈΠ½. ΠΎΠ±ΡΡΠΌ | 100 |
| maxVolume | ΠΠ°ΠΊΡ. ΠΎΠ±ΡΡΠΌ | 1000 |
| minDelta | ΠΠΈΠ½. Π΄Π΅Π»ΡΡΠ° | 0.4 |
| maxDelta | ΠΠ°ΠΊΡ. Π΄Π΅Π»ΡΡΠ° | 0.6 |
| minGamma | ΠΠΈΠ½. Π³Π°ΠΌΠΌΠ° | 0.001 |
| maxGamma | ΠΠ°ΠΊΡ. Π³Π°ΠΌΠΌΠ° | 0.01 |
| minTheta | ΠΠΈΠ½. ΡΠ΅ΡΠ° | -500 |
| maxTheta | ΠΠ°ΠΊΡ. ΡΠ΅ΡΠ° | -100 |
| minVega | ΠΠΈΠ½. Π²Π΅Π³Π° | 5 |
| maxVega | ΠΠ°ΠΊΡ. Π²Π΅Π³Π° | 20 |
| minIV | ΠΠΈΠ½. implied volatility | 0.5 |
| maxIV | ΠΠ°ΠΊΡ. implied volatility | 2.0 |
GET /api/top-movers
Header: x-api-key: my_secret_key_12345
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
|---|---|---|
| limit | ΠΠΎΠ»-Π²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ | 10 |
| underlying | Π€ΠΈΠ»ΡΡΡ ΠΏΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π°ΠΊΡΠΈΠ²Ρ (BTC, ETH) | Π²ΡΠ΅ |
{
"lastUpdate": "2026-02-07T10:00:00.000Z",
"limit": 10,
"gainers": [
{
"symbol": "BTC-260214-100000-C",
"priceChange": "1200",
"priceChangePercent": "45.5",
"lastPrice": "3840",
"volume": "25.10"
}
],
"losers": [
{
"symbol": "ETH-260207-3000-P",
"priceChange": "-800",
"priceChangePercent": "-60.2",
"lastPrice": "530",
"volume": "12.50"
}
]
}
GET /api/unusual-volume
Header: x-api-key: my_secret_key_12345
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
|---|---|---|
| underlying | Π€ΠΈΠ»ΡΡΡ ΠΏΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π°ΠΊΡΠΈΠ²Ρ (BTC, ETH) | Π²ΡΠ΅ |
| limit | ΠΠ°ΠΊΡ. ΠΊΠΎΠ»-Π²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ | 20 |
{
"lastUpdate": "2026-02-07T10:00:00.000Z",
"avgVolume": 15.3,
"threshold": 30.6,
"count": 5,
"data": [
{
"symbol": "BTC-260214-100000-C",
"volume": "120.50",
"lastPrice": "3840",
"priceChange": "500",
"ratio": 7.88
}
]
}
Real-time ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΎΠΏΡΠΈΠΎΠ½Π°ΠΌ ΡΠ΅ΡΠ΅Π· WebSocket.
wss://options.szhub.space
| ΠΠ°Π½Π°Π» | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
BTC |
ΠΡΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Ρ Π½Π° BTC |
ETH |
ΠΡΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Ρ Π½Π° ETH |
all |
ΠΡΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Ρ (BTC + ETH) |
top-movers |
ΠΠΈΠ΄Π΅ΡΡ ΡΠΎΡΡΠ° ΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΡ |
unusual-volume |
ΠΠΏΡΠΈΠΎΠ½Ρ Ρ Π°Π½ΠΎΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΡΠΌΠΎΠΌ |
ΠΡΠΏΡΠ°Π²ΠΈΡΡ JSON-ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅:
{"subscribe": "BTC"}
{"unsubscribe": "BTC"}
{
"channel": "BTC",
"data": { ... },
"timestamp": "2026-02-07T10:00:00.000Z"
}
Π‘Π΅ΡΠ²Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ping ΠΊΠ°ΠΆΠ΄ΡΠ΅ 30 ΡΠ΅ΠΊΡΠ½Π΄ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ²Π΅ΡΠ°ΡΡ pong.
const ws = new WebSocket("wss://options.szhub.space");
ws.onopen = () => {
ws.send(JSON.stringify({ subscribe: "BTC" }));
ws.send(JSON.stringify({ subscribe: "top-movers" }));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
console.log(`[${msg.channel}]`, msg.data);
};
# Health check
curl https://options.szhub.space/health
# ΠΡΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Ρ
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/options"
# BTC CALL ΠΎΠΏΡΠΈΠΎΠ½Ρ
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/options?underlying=BTC&type=CALL"
# ΠΠΏΡΠΈΠΎΠ½Ρ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π΄Π°ΡΡ
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/options?underlying=BTC&expiry=260207"
# ATM ΠΎΠΏΡΠΈΠΎΠ½Ρ (delta 0.4-0.6)
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/options?underlying=BTC&minDelta=0.4&maxDelta=0.6"
# ΠΠΏΡΠΈΠΎΠ½Ρ Ρ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΎΠ±ΡΡΠΌΠΎΠΌ
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/options?minVolume=100"
# Top movers β BTC, ΡΠΎΠΏ 5
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/top-movers?underlying=BTC&limit=5"
# Unusual volume
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/unusual-volume?underlying=ETH&limit=10"
# Π‘ΠΏΠΈΡΠΎΠΊ ΡΠΊΡΠΏΠΈΡΠ°ΡΠΈΠΉ
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/expiries"
# Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
curl -H "x-api-key: my_secret_key_12345" \
"https://options.szhub.space/api/summary"
{
"lastUpdate": "2026-02-06T07:26:24.667Z",
"count": 2,
"filters": {"underlying": "BTC", "type": "CALL"},
"data": [
{
"symbol": "BTC-260207-65000-C",
"priceChange": "-955",
"lastPrice": "1500",
"volume": "15.89",
"greeks": {
"delta": "0.52129532",
"gamma": "0.00010023",
"theta": "-773.64478105",
"vega": "13.73117089",
"markIV": "1.16488146"
}
}
]
}
/home/app/options-backend/
βββ index.js # ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠ΄ API + WebSocket
βββ package.json # ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
βββ .env # ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (PORT, API_KEY)
βββ .gitignore # ΠΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ
βββ README.md # ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
PORT=8080
API_KEY=my_secret_key_12345
https://github.com/Zserg5585/option-screener-v1
git add .
git commit -m "ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ"
git push
GET /api/dashboard
Header: x-api-key: <key>
ΠΠ³ΡΠ΅Π³ΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ΅, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠΎ confidence (0β95).
| Π’ΠΈΠΏ | Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ | ΠΡΠΊΡΠ΄Π° |
|---|---|---|
| ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ | Long/Short Straddle, Iron Condor, Bull Call Spread, Bear Put Spread, Calendar Spread, Covered Call, Protective Put, Butterfly | strategies.js |
| ΠΠ½ΠΎΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΡΠΌ | Unusual Volume (VOI β₯ 5Γ) | unusualVolume.js |
| ΠΠ°ΠΌΠΌΠ°-ΠΈΠ³ΡΠ° | Gamma Play (EXTREME/HIGH) | gammaPlay.js |
| IV Skew | BULLISH / STRONG_BEARISH | ivSkew.js |
{
"id": "bull_call_spread_btc",
"strategy": "Bull Call Spread",
"signal": "BUY_BULL_CALL_SPREAD",
"underlying": "BTC",
"direction": "BULLISH",
"confidence": 73,
"severity": "HIGH",
"parameters": {
"pcrAvg": 0.45,
"skew25d": -0.06,
"ivRank": 52.3,
"spot": 95000
},
"description": "Bull Call Spread ΠΏΠΎ BTC: ΠΏΠΎΠΊΡΠΏΠΊΠ° ATM call + ΠΏΡΠΎΠ΄Π°ΠΆΠ° OTM call",
"rationale": "PCR 0.45 β ΡΠΈΠ»ΡΠ½ΡΠΉ Π±ΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π». Negative skew (-0.060) β ΡΡΠ½ΠΎΠΊ ΠΏΠΎΠΊΡΠΏΠ°Π΅Ρ upside. Max pain Π²ΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅Π½Ρ.",
"timestamp": "2026-02-26T10:00:00.000Z"
}
direction| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | Π‘ΠΌΡΡΠ» |
|---|---|
BULLISH |
ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΡΡΠ°Π²ΠΊΠ° Π²Π²Π΅ΡΡ |
BEARISH |
ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΡΡΠ°Π²ΠΊΠ° Π²Π½ΠΈΠ· |
NEUTRAL |
Π ΡΠ½ΠΎΡΠ½ΠΎ-Π½Π΅ΠΉΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ |
NEUTRAL_VOLATILE |
ΠΠ΅ΠΉΡΡΠ°Π»ΡΠ½Π°Ρ, Π²ΡΠΈΠ³ΡΡΠ²Π°Π΅Ρ Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ |
NEUTRAL_RANGE |
ΠΠ΅ΠΉΡΡΠ°Π»ΡΠ½Π°Ρ, Π²ΡΠΈΠ³ΡΡΠ²Π°Π΅Ρ Π²ΠΎ ΡΠ»ΡΡΠ΅ |
NEUTRAL_BULLISH |
ΠΠ΅ΠΉΡΡΠ°Π»ΡΠ½Π°Ρ Ρ Π±ΡΡΡΠΈΠΌ ΡΠΊΠ»ΠΎΠ½ΠΎΠΌ |
BULLISH_HEDGED |
ΠΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Ρ Ρ Π΅Π΄ΠΆΠ΅ΠΌ |
Π‘Π΅ΠΉΡΠ°Ρ ivRank ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎ Π²Π½ΡΡΡΠΈΠ΄Π½Π΅Π²Π½ΠΎΠΌΡ ΡΡΠ΅Π·Ρ ΠΎΠΏΡΠΈΠΎΠ½ΠΎΠ².
ΠΠ»Ρ Π½Π°ΡΡΠΎΡΡΠ΅Π³ΠΎ IV Rank Π½ΡΠΆΠ½Π° 30-Π΄Π½Π΅Π²Π½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ.
ivRank ΠΈ ivPercentile ΠΏΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ 30-Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ/api/signals/iv-analysisconfidence β₯ 75dashboarddashboard Π² WebSocketexchange Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠΏΡΠΈΠΎΠ½/api/backtest β ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΠΌ/api/dashboard + WebSocket/api/options (ΡΠ΅ΠΉΡΠ°Ρ ΠΎΡΠ΄Π°ΡΡ Π²Π΅ΡΡ ΠΌΠ°ΡΡΠΈΠ²)