{"id":50639384,"url":"https://github.com/nadiraliofficial/kingston-trading-engine","last_synced_at":"2026-06-07T07:01:43.883Z","repository":{"id":356835773,"uuid":"1225582453","full_name":"NadirAliOfficial/kingston-trading-engine","owner":"NadirAliOfficial","description":"Phase 1: Modular rule-based trading decision engine with IBKR integration","archived":false,"fork":false,"pushed_at":"2026-05-28T20:08:43.000Z","size":22,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T20:24:46.097Z","etag":null,"topics":["algorithmic-trading","automation","ibkr","interactive-brokers","python","rule-based","trading-bot","trading-engine"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NadirAliOfficial.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-30T12:32:46.000Z","updated_at":"2026-05-28T20:08:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NadirAliOfficial/kingston-trading-engine","commit_stats":null,"previous_names":["nadiraliofficial/kingston-trading-engine"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NadirAliOfficial/kingston-trading-engine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NadirAliOfficial%2Fkingston-trading-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NadirAliOfficial%2Fkingston-trading-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NadirAliOfficial%2Fkingston-trading-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NadirAliOfficial%2Fkingston-trading-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NadirAliOfficial","download_url":"https://codeload.github.com/NadirAliOfficial/kingston-trading-engine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NadirAliOfficial%2Fkingston-trading-engine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34011812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithmic-trading","automation","ibkr","interactive-brokers","python","rule-based","trading-bot","trading-engine"],"created_at":"2026-06-07T07:01:40.942Z","updated_at":"2026-06-07T07:01:43.875Z","avatar_url":"https://github.com/NadirAliOfficial.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rule-Based Trading System — Phase 1\n\nModular rule-based trading decision engine integrated with IBKR. Phase 1 covers data ingestion, signal generation, and decision output via CLI with full logging. No live trades are executed in this phase.\n\n---\n\n## Architecture\n\n```\nkingston-trading-engine/\n├── config.py            # All parameters (tickers, MA periods, RSI thresholds, etc.)\n├── main.py              # Entry point — runs EOD evaluation and prints decisions\n├── data/\n│   └── market_data.py   # Data layer — fetches OHLCV via yfinance\n├── signals/\n│   └── signal_engine.py # Signal layer — computes MAs, RSI, volume, breakout\n├── decisions/\n│   └── decision_engine.py # Decision layer — applies market filter and entry rules\n├── logger/\n│   └── trade_logger.py  # Logging layer — writes signals and trades to dated log files\n└── logs/                # Runtime log output (created automatically)\n```\n\n---\n\n## Modules\n\n### Data Layer (`data/market_data.py`)\nFetches daily OHLCV data for each ticker using `yfinance`. Configurable period and interval via `config.py`.\n\n### Signal Engine (`signals/signal_engine.py`)\nComputes all technical indicators from raw OHLCV:\n- 50-day, 200-day, 20-day simple moving averages\n- RSI(14) using exponential smoothing\n- 5-day high breakout level\n- 20-day average volume\n\n### Decision Engine (`decisions/decision_engine.py`)\nApplies entry rules per ticker after checking the market filter.\n\n**Market Filter** — evaluated on SPY:\n- SPY price \u003e 200-day MA\n- SPY RSI \u003e 50\n\n**Entry Rules** — all must pass:\n- Price \u003e 50-day MA\n- 50-day MA \u003e 200-day MA\n- RSI between 55 and 65\n- Price above 5-day high (breakout)\n- Volume \u003e 1.2x 20-day average\n\n**Decisions:**\n- `BUY` — all entry conditions pass\n- `HOLD` — market filter passes but one or more entry conditions fail\n- `BLOCK` — market filter fails (no trades for any ticker)\n\n### Logging Layer (`logger/trade_logger.py`)\nWrites two dated log files to `logs/`:\n- `signals_YYYYMMDD.log` — full signal detail for every ticker evaluated\n- `trades_YYYYMMDD.log` — BUY signals and BLOCK events only\n\n---\n\n## Configuration (`config.py`)\n\n| Parameter | Default | Description |\n|---|---|---|\n| `TICKERS` | SPY, QQQ, AAPL, MSFT | Instruments to evaluate |\n| `MARKET_FILTER_TICKER` | SPY | Market regime filter ticker |\n| `MA_50` | 50 | Fast MA period |\n| `MA_200` | 200 | Trend MA period |\n| `MA_20` | 20 | Exit MA period |\n| `HIGH_LOOKBACK` | 5 | Days for breakout level |\n| `RSI_PERIOD` | 14 | RSI lookback |\n| `RSI_ENTRY_LOW` | 55 | RSI entry lower bound |\n| `RSI_ENTRY_HIGH` | 65 | RSI entry upper bound |\n| `RSI_MARKET_MIN` | 50 | SPY RSI minimum for market filter |\n| `VOLUME_MULTIPLIER` | 1.2 | Volume surge threshold |\n\n---\n\n## Setup\n\n```bash\npip install -r requirements.txt\npython main.py\n```\n\n---\n\n## Phase 2 (Upcoming)\n\n- Risk engine: 1% risk per trade, max 3 open positions, daily loss limit (2 losses), 1-day cooldown\n- IBKR paper execution via `ib_insync`\n- Exit rule monitoring: MA20 cross, RSI \u003c 50, 2% trailing stop, 2% hard stop\n- Full trade lifecycle logging (entry, exit, blocked)\n\u003c!-- updated: 2025-12-09 --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnadiraliofficial%2Fkingston-trading-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnadiraliofficial%2Fkingston-trading-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnadiraliofficial%2Fkingston-trading-engine/lists"}