license: apache-2.0 language: - en library_name: pytorch pretty_name: Algorithmic Trading tags: - finance - algorithmic-trading - quantitative-finance - backtesting - reinforcement-learning - pytorch - yfinance

Algorithmic Trading

Parallel LLC. Two layers in one repository:

  1. algotrader 2.0 (algotrader/, app.py): a backtester that tries to prove a rule was luck (permutation, deflated Sharpe, PBO, walk-forward, cost stress).
  2. Agentic v1 (agentic_ai_system/): FinRL policies, Yahoo or Alpaca ingest, paper/live execution, Streamlit/Dash/Jupyter UIs, Docker.

Default market data is Yahoo Finance (yfinance>=1.0), not simulated prices. The simulator exists for offline tests (--source synthetic or ALGOTRADER_OFFLINE=1 with source=auto). Live capital still needs a separate evaluation contract. This is research tooling, not investment advice.


1. Title and Summary

Algorithmic Trading
Ingest real OHLCV, test whether a timing or cross-sectional rule survives a hostile null, optionally train a FinRL policy, size orders under position and drawdown caps, route to paper or live Alpaca.

GitHub keeps two branches: main (protected) and dev (integration).

Design themes

  • Yahoo as the default public tape (delayed, unofficial, lookback-limited)
  • Validation before belief: permutation, DSR, PBO/CSCV, walk-forward, 3Γ— cost stress
  • FinRL (PPO, A2C, DDPG, TD3) unchanged on the v1 path
  • Alpaca optional for authenticated bars and orders; keys from the environment
  • Synthetic GBM / regime simulator only when requested
  • Secrets never in git

2. Quick start

git clone https://github.com/ParallelLLC/algorithmic_trading.git
cd algorithmic_trading
python -m venv .venv && source .venv/bin/activate
pip install -r requirements-space.txt   # algotrader + Gradio
# or: pip install -r requirements.txt   # full v1 stack (FinRL, Dash, Docker CI)
python app.py                                      # Gradio, localhost:7860, Yahoo by default
python -m algotrader.cli lab --symbol SPY --strategy sma_cross
python -m algotrader.cli lab --symbol NVDA --strategy rsi_reversion --permutations 500
python -m agentic_ai_system.main --mode backtest --start-date 2024-01-01 --end-date 2024-12-31

config.yaml defaults:

data_source:
  type: 'yahoo'
trading:
  symbol: 'AAPL'
  timeframe: '1d'    # Yahoo 1m history is ~7 days; use 1d for multi-year windows
yahoo:
  auto_adjust: true  # raw Close turns splits into fake crashes

Alpaca is opt-in: ALPACA_API_KEY / ALPACA_SECRET_KEY and data_source.type: alpaca or execution.broker_api: alpaca_paper.


3. algotrader 2.0 (validation lab)

Most backtests answer "how much would this have made?" This one asks how much of that was luck?

Two labs

The Lab validates a timing rule on one asset. The Portfolio Lab validates a cross-sectional book that ranks many names.

The four ways a backtest lies

The lie The test Where
The market had no structure to find Monte-Carlo permutation (shuffle bar order, keep gap/high/low/body/volume) algotrader/validation/permutation.py
You tried 200 things and reported the best Deflated Sharpe Ratio algotrader/validation/deflated_sharpe.py
Parameters were fitted to the past PBO (CSCV) and walk-forward algotrader/validation/pbo.py, walkforward.py
The edge is smaller than the costs Cost stress at 3Γ— friction algotrader/lab.py

Reality Score (0–100, grades A–F): significance 30%, selection 25%, walk-forward 20%, overfitting 15%, robustness 10%. The scale is harsh on purpose. Buy-and-hold and a coin-flip stay in the arena as controls.

Cross-sectional books use a within-date weight permutation so market correlation survives; path-shuffle is the wrong null for a long-short ranker. Survivorship is measured. Style regression (market, momentum, low-vol, reversal, liquidity) with White standard errors.

Look-ahead: position[t] = target[t - lag] with lag >= 1. Turnover is measured against drifted weights, not |target[t]-target[t-1]|.

from algotrader import LabConfig, run_lab

report = run_lab(LabConfig(
    symbol="SPY",
    start="2015-01-01",
    strategy="sma_cross",
    params={"fast": 20, "slow": 100},
    source="yahoo",
    n_permutations=500,
))
print(report.verdict["grade"], report.permutation.p_value, report.dsr["dsr"])
python -m algotrader.cli strategies
python -m algotrader.cli lab --symbol SPY --source yahoo
python -m algotrader.cli portfolio --symbols SPY,QQQ,AAPL,MSFT,NVDA --strategy xs_momentum
python -m algotrader.cli lab --source synthetic   # offline tests only

Single-asset zoo: buy_and_hold, sma_cross, ema_cross, macd_trend, rsi_reversion, bollinger_reversion, donchian_breakout, momentum, vol_target_momentum, channel_trend, coin_flip.

Cross-sectional: equal_weight, xs_momentum, xs_reversal, low_volatility, xs_value_proxy, xs_random.

Data: load_ohlcv(..., source="yahoo") downloads from Yahoo and raises if the download is empty. source="auto" is the Space fallback (cache, then simulator). ALGOTRADER_OFFLINE=1 disables the network.

HF Space: HF_TOKEN=hf_xxx ./scripts/deploy_hf_space.sh <user>/backtest-reality-check. Card is SPACE_README.md. Tests: python -m pytest tests/test_v2_*.py -q.

References: Bailey & LΓ³pez de Prado (2014) DSR; Bailey et al. (2016) PBO; Masters (2018) permutation tests for trading systems.


4. Concepts and methods (v1 ingest and execution)

Source Default? Failure modes
Yahoo Yes (config.yaml, algotrader CLI, Gradio) Unofficial API, ~15 min delay, 1m β‰ˆ 7 days, split-adjustment required (auto_adjust: true)
Alpaca Optional Auth, feed, rate limits
CSV Replay Missing path or OHLCV columns
Synthetic Tests / --source synthetic Not tradable edge

agentic_ai_system.data_ingestion.load_data dispatches on data_source.type. Yahoo stream: yahoo_data_stream.py (clamped lookback, no incomplete bars by default).

  • StrategyAgent: SMA, RSI, Bollinger, MACD on Close (teaching rule, not an alpha claim)
  • FinRLAgent: PPO / A2C / DDPG / TD3 via Stable-Baselines3
  • ExecutionAgent / AlpacaBroker: paper simulation or Alpaca orders

v1 run_backtest is a single in-sample pass unless you use algotrader walk-forward. Leakage is the null hypothesis.


5. Stack

Layer Tools
Language Python 3.11 (CI)
Validation algotrader (permutation, DSR, PBO, walk-forward)
RL FinRL / Stable-Baselines3, Gym/Gymnasium, PyTorch
Market data yfinance β‰₯ 1.0 (default); alpaca-py optional
Tabular pandas, NumPy, scikit-learn
UI Gradio (app.py); Streamlit, Dash, Jupyter (v1)
Deploy Docker Compose, GitHub Actions, Hugging Face Space
Tests pytest

6. Structure

algorithmic_trading/
β”œβ”€β”€ algotrader/                 # 2.0 lab, engine, validation, strategies
β”œβ”€β”€ app.py                      # Gradio Reality Check
β”œβ”€β”€ agentic_ai_system/          # v1 FinRL, Yahoo/Alpaca ingest, execution
β”œβ”€β”€ ui/                         # Streamlit, Dash, Jupyter, WebSocket
β”œβ”€β”€ tests/
β”œβ”€β”€ docs/AGENTIC_SYSTEM_V1.md   # v1 notes
β”œβ”€β”€ config.yaml                 # default data_source.type: yahoo
β”œβ”€β”€ requirements-space.txt      # Space / algotrader
β”œβ”€β”€ requirements.txt            # full v1 + CI
└── scripts/deploy_hf_space.sh

7. Configuration

Key Meaning
data_source.type yahoo (default) | csv | synthetic | alpaca
trading.timeframe Mapped to Yahoo intervals; use 1d for multi-year history
yahoo.auto_adjust Split/dividend adjust (keep true)
yahoo.emit_incomplete_bars Default false; forming bars are not closes
execution.broker_api paper | alpaca_paper | alpaca_live
finrl.algorithm PPO, A2C, DDPG, TD3
algotrader --source yahoo (default) | auto | cache | synthetic

8. Tests and ops

python -m pytest tests/test_v2_*.py -q
python -m pytest tests/test_yahoo_data_stream.py tests/test_data_ingestion.py -q

UI launchers and Docker: UI_SETUP.md, DOCKER_HUB_SETUP.md. Branch policy: main and dev only. Do not re-enable Dependabot.


License: Apache License 2.0
Organization: Parallel LLC
Repository: https://github.com/ParallelLLC/algorithmic_trading

Downloads last month
38
Video Preview
loading