CE — Shellový runtime pre krypto burzy
Keď som budoval svoj AI toolkit, naučil som sa jednu vec: ak chceš mať nad niečím skutočnú kontrolu, musíš to mať ako primitívy v shelli. Žiadne GUI, žiadne aplikácie tretích strán — len čisté volania, ktoré môžeš skladať do skriptov a stratégií.
Rovnakú filozofiu som teraz aplikoval na krypto trading. Výsledok sa volá CE — Crypto Exchange CLI.
Prečo nie niečo hotové?
Existuje kopec nástrojov. CCXT, rôzne boti, webové dashboardy. Všetky majú jeden problém — sú to čierne skrinky. Nevieš presne čo posielajú, kedy to posielajú, a keď niečo nefunguje, máš problém zistiť prečo.
CE je iný prístup. Je to tenká vrstva shellu nad HTTP API burzy. Každé volanie je transparentné — vidíš raw response, vidíš čo sa posiela, môžeš to debugovať, skriptovať, kombinovať s čímkoľvek.
Architektúra
Projekt žije v os_layer/crypto vedľa môjho AI toolkitu a Arch deploy skriptov. Štruktúra je zámerne jednoduchá:
crypto/
├── ce # entrypoint
├── config/
│ ├── profiles/
│ │ └── coinmate-main.conf # profil burzy
│ └── keys/
│ └── coinmate-main.key # API kľúče (mimo VCS)
└── lib/
├── core/
│ ├── ce_cli.sh # CLI parser, routing príkazov
│ ├── ce_contract.sh # kontrakty (vstup/výstup definície)
│ └── ce_profiles.sh # načítanie profilov a kľúčov
└── exchanges/
└── coinmate/
├── client.sh # HTTP klient, podpis, nonce
└── contract_impl.sh # implementácia primitív
Kontrakt vrstva je kľúčová myšlienka. Každý príkaz má definovaný vstup a výstup — nezávisle od toho, ktorá burza je pod ním. Keď raz pridám Binance alebo Kraken, stratégie napísané nad CE nebudú vedieť rozdiel.
Autentifikácia a jeden zákerný detail
Coinmate používa HMAC-SHA256 podpis. Správa je nonce + clientId + publicKey, podpísaná secretom. Štandardná vec — ale s jedným háčikom.
Coinmate vyžaduje UPPERCASE hex. OpenSSL generuje lowercase. Toto nie je nikde výrazne zdokumentované a API vráti Access denied aj keď máš správne kľúče.
sh
_coinmate_signature() {
nonce="$1"
data="${nonce}${COINMATE_CLIENT_ID}${COINMATE_API_KEY}"
printf '%s' "$data" |
openssl dgst -sha256 -hmac "$COINMATE_API_SECRET" -hex |
awk '{print $2}' |
tr '[:lower:]' '[:upper:]'
}
Ten tr '[:lower:]' '[:upper:]' na konci je viac než hodina debugovania.
Primitívy
CE má desať príkazov. Všetky vracajú čistý JSON, ktorý môžeš ďalej spracovávať cez jq, ukladať do súborov, posielať do AI toolkitu.
Zostatok účtu
sh
./ce exchange.balances coinmate-main
json
[
{ "asset": "BTC", "free": 0.00119325, "locked": 0, "total": 0.00119325 },
{ "asset": "EUR", "free": 5.14930921, "locked": 0, "total": 5.14930921 }
]
Vracia len nenulové meny. free je disponibilné, locked je rezervované v otvorených orderoch.
Aktuálna cena
sh
./ce exchange.ticker BTC_EUR
json
{
"pair": "BTC_EUR",
"bid": "67919.6",
"ask": "68015.8",
"last": "67733.8",
"high": "68431.9",
"low": "67600",
"volume": "0.15959981"
}
Verejný endpoint, nepotrebuje podpis. bid je čo ti zaplatia za BTC, ask je za čo môžeš kúpiť.
Deposit adresa
sh
./ce exchange.deposit BTC
json
{
"currency": "BTC",
"address": "bc1pgaq3gs5fc52pymkgjmvzk9taqnzegh68p6dfcdm8v76d6wazmvnsmuscvc",
"tag": null
}
Kúpa — market aj limit
sh
# Market — kúp BTC za 5 EUR za aktuálnu cenu
./ce exchange.buy BTC_EUR 5
# Limit — kúp 0.001 BTC keď cena klesne na 60000 EUR
./ce exchange.buy BTC_EUR 0.001 60000
Pri market orderi (instant) je AMOUNT suma v EUR ktorú chceš minúť. Pri limite je to množstvo BTC. Toto je asymetria Coinmate API — CE to rieši transparentne.
Predaj — market aj limit
sh
# Market — predaj 0.0001 BTC za aktuálnu cenu
./ce exchange.sell BTC_EUR 0.0001
# Limit — predaj 0.001 BTC keď cena vystúpi na 80000 EUR
./ce exchange.sell BTC_EUR 0.001 80000
Tu je ďalšia asymetria: sellInstant berie amount v BTC, kým buyInstant berie total v EUR. Logické z pohľadu burzy, mätúce z pohľadu používateľa. CE to abstrahuje.
Otvorené ordery a cancel
sh
./ce exchange.orders BTC_EUR
./ce exchange.cancel 3876374845
json
[
{
"order_id": "3876374845",
"pair": "BTC_EUR",
"side": "sell",
"order_type": "LIMIT",
"amount": "0.0001",
"price": "100000",
"created": "2026-05-08T19:56:51Z"
}
]
História obchodov
sh
./ce exchange.history BTC_EUR 10
json
[
{
"trade_id": "18047691",
"pair": "BTC_EUR",
"side": "buy",
"order_type": "INSTANT",
"amount": "0.00002919",
"price": "68098.8",
"fee": "0.01192682",
"fee_type": "TAKER",
"total": "1.987803972",
"timestamp": "2026-05-08T19:59:58Z"
}
]
fee_type rozlišuje MAKER (limit order čakal na vyplnenie, nižší poplatok) a TAKER (market order, vyšší poplatok).
Výber
sh
./ce exchange.withdraw BTC bc1q... 0.001
Coinmate vyžaduje aby adresa bola vopred potvrdená cez UI (whitelist cez 2FA). Toto je správne bezpečnostné opatrenie.
Skriptovanie
Tu je sila CE. Primitívy sú stavebné kamene:
sh
# Aktuálna hodnota portfólia
price=$(./ce exchange.ticker BTC_EUR | jq -r '.last')
btc=$(./ce exchange.balances | jq -r '.[] | select(.asset=="BTC") | .free')
echo "Hodnota BTC: $(echo "$btc * $price" | bc -l) EUR"
# Zruš všetky otvorené ordery
./ce exchange.orders | jq -r '.[].order_id' | while read -r id; do
./ce exchange.cancel "$id"
done
# DCA — nakúp každý deň cez cron
# 0 9 * * * /path/to/dca.sh
./ce exchange.buy BTC_EUR 5
Čo bude ďalej
Primitívy sú hotové a otestované. Ďalší krok sú stratégie — skripty postavené nad týmito primitívami:
- DCA — pravidelný nákup za fixnú sumu
- Grid trading — sieť limit orderov okolo aktuálnej ceny
- Rebalancing — udržiavanie cieľového pomeru BTC/EUR
- Alert — notifikácia keď cena dosiahne hranicu
Každá stratégia bude jednoduchý shellový skript, ktorý volá CE primitívy. Žiadna mágia, žiadne závislosti, žiadne čierne skrinky.
Ako pridať novú burzu
Kontraktová vrstva umožňuje pridať ľubovoľnú burzu bez toho aby sa zmenili stratégie:
- Vytvor
lib/exchanges//client.sh— HTTP klient s autentifikáciou - Vytvor
lib/exchanges//contract_impl.sh— implementujexchange_balances,exchange_buy,exchange_sellatď. - Pridaj
casevetvu doce_select_adapter()vce_profiles.sh - Vytvor
config/profiles/.confsEXCHANGE=
Hotovo. Tá istá stratégia DCA bude fungovať na Coinmate, Binance, Kraken — bez jedinej zmeny v kóde stratégie.
CE je súčasť môjho os_layer — osobnej operačnej vrstvy nad systémom, kde žije aj AI toolkit, Arch deploy skripty a ďalšie nástroje. Všetko shellové, všetko skladateľné, všetko pod kontrolou.