Minimal grid trading scaffold written in Python. Phase 1 focuses on configuration management and establishing a ccxt connection that can target testnets or sandboxes.
pip install -r requirements.txt- Review
config.yamland substitute your desired trading pair, price range, and allocation per grid line. - Run
python grid_bot.pyto verify configuration loads and ccxt connects (testnet/sandbox if enabled).
- Flat project layout: config, script, and docs in repo root.
- Configuration in
config.yaml. - Simple connection code in
grid_bot.pythat validates settings and establishes an exchange client via ccxt.
- Set environment variable
GRIDBOT_OFFLINE=1and ensureDRY_RUN=true(e.g., inconfig.yaml). - Enable
offline: trueand provide a feed viaoffline_prices: [100.0, 101.5, 102.0]or createdata/offline_prices.csvwith one price per line. - Run with
python main.pyto start without KuCoin API keys. - CSV feed format: create
data/offline_prices.csvwith one columnprice(header optional), one value per line (e.g.,100.0). - Repo zawiera przykladowy
data/offline_prices.csv(zakres ok. 87500-88500). - Flaga
--offline-scenario {range,trend_up,trend_down,flash_crash}wygeneruje syntetyczny feed, gdy brak CSV/config;--offline-oncezakonczy bota po zuzyciu feedu.
python main.pypython main.py --dry-run --reset-statepython main.py --dry-run --reset-state --interval 1python main.py --dry-run --offline --reset-state --interval 1python main.py --dry-run --offline --offline-scenario trend_up --offline-oncepython main.py --dry-run --offline --offline-scenario range --seed 42 --max-steps 200 --reset-state --interval 0python main.py --dry-run --offline --offline-scenario range --seed 42 --max-steps 200 --reset-state --interval 0 --log-level DEBUG --log-file gridbot.logpytest -q- Batch run example:
python -m gridbot.tools.batch_run --out-dir out_runs --strategy-ids classic_grid --scenarios range --seeds 1,2 --steps 50 --interval 0 - Analyze batch outputs:
python -m gridbot.tools.analyze_results --path out_runs - Repo wymusza LF w plikach tekstowych (patrz .gitattributes); na Windows git auto-konwertuje wg ustawienia core.autocrlf.
- W scenariuszu flash_crash z
initial_base > 0equity spada nawet bez trade'ów (ryzyko trzymania base). Do strojenia mechaniki grid używaj plików*_nobase.yamlzinitial_base: 0.
# maker100
python -m gridbot.tools.batch_run `
--out-dir out_4scenarios_maker100_nobase `
--strategy-ids classic_grid `
--scenarios range,trend_up,trend_down,flash_crash `
--seeds 1,2,3,4,5,6,7,8,9,10 `
--steps 2000 `
--grid-levels 3,4,5 `
--config tests/fixtures/config_costs_neutral_maker100_nobase.yaml `
--interval 0 `
--log-level WARNING
# mix70
python -m gridbot.tools.batch_run `
--out-dir out_4scenarios_mix70_nobase `
--strategy-ids classic_grid `
--scenarios range,trend_up,trend_down,flash_crash `
--seeds 1,2,3,4,5,6,7,8,9,10 `
--steps 2000 `
--grid-levels 3,4,5 `
--config tests/fixtures/config_costs_neutral_mix70_nobase.yaml `
--interval 0 `
--log-level WARNING
# mix50
python -m gridbot.tools.batch_run `
--out-dir out_4scenarios_mix50_nobase `
--strategy-ids classic_grid `
--scenarios range,trend_up,trend_down,flash_crash `
--seeds 1,2,3,4,5,6,7,8,9,10 `
--steps 2000 `
--grid-levels 3,4,5 `
--config tests/fixtures/config_costs_neutral_mix50_nobase.yaml `
--interval 0 `
--log-level WARNING- Raport JSON (
--report-json) zawiera m.in.pnl_net,pnl_gross,total_fees_quote,spread_cost_est_quote,slippage_cost_est_quote,maker_ratio,avg_fee_per_trade; polepnljest aliasempnl_net. gridbot.tools.batch_runzapisuje powyższe metryki jako kolumny wresults.csv(legacy kolumny pozostają dla kompatybilności).
dev: prace bieżące, gałąź do której trafiają zmiany przed stabilizacją.main: stabilne wydania.- PR flow: twórz/aktualizuj zmiany na
dev, otwieraj PR zdevdomain, po review merguj domain.
- Runtime pliki są ignorowane:
out/,out_runs/,*.db(w tymgrid_bot.db),*.sqlite*,trade_history.csv,orders.json,.env, cache Pythona. - Użyj czyszczenia:
powershell -ExecutionPolicy Bypass -File scripts/clean.ps1lubbash scripts/clean.sh. - Szybka kontrola:
powershell -ExecutionPolicy Bypass -File scripts/check_repo.ps1(status, tracked outputy, prosty skan tajemnic).
- Zainstaluj lokalny hook blokujący commit wrażliwych plików/sekretów:
powershell -ExecutionPolicy Bypass -File .\scripts\install_hooks.ps1