maneshtrader/README.md

155 lines
5.3 KiB
Markdown

# Real Bars vs Fake Bars Trend Analyzer (Streamlit)
A Python web app that implements the **Real Bars vs Fake Bars** strategy:
- Classifies each closed bar against the prior bar as `real_bull`, `real_bear`, or `fake`
- Ignores fake bars for trend sequence logic
- Starts/continues trend on 2+ same-direction real bars
- Reverses trend only after 2 consecutive real bars of the opposite direction
## Features
- Symbol/timeframe/period inputs (Yahoo Finance via `yfinance`)
- Optional wick filtering (use previous candle body range)
- Optional volume filter (minimum Volume vs Volume-SMA)
- Trend events table (starts and reversals)
- Chart visualization (candles + real-bar markers + trend-colored volume)
- Market session gap handling for stocks via `Hide market-closed gaps (stocks)`:
- `1d`: removes weekend spacing
- intraday: removes weekends and closed-hour overnight spans
- Session alerts for newly detected trend events
- Export classified data to CSV
- Export chart to PDF (via Plotly + Kaleido)
- Lightweight backtest snapshot (signal at trend changes, scored by next-bar direction)
## Project Structure
- `app.py`: Streamlit entrypoint and UI orchestration
- `manesh_trader/constants.py`: intervals, periods, trend labels
- `manesh_trader/models.py`: data models (`TrendEvent`)
- `manesh_trader/data.py`: market data fetch and live-bar safeguard
- `manesh_trader/strategy.py`: bar classification and trend detection logic
- `manesh_trader/analytics.py`: backtest snapshot metrics
- `manesh_trader/charting.py`: Plotly chart construction
- `manesh_trader/exporting.py`: export DataFrame transformation
- `requirements.txt`: dependencies
## Onboarding
See `ONBOARDING.md` for a complete step-by-step tutorial.
## Xcode macOS Shell
An Xcode-based desktop shell lives in `ManeshTraderMac/`.
It provides a native window that starts/stops an embedded local backend executable and renders the UI in `WKWebView` (no external browser).
Backend source of truth stays at project root (`app.py`, `manesh_trader/`), and packaging compiles those files into `ManeshTraderBackend` inside the app bundle.
See `ManeshTraderMac/README.md` for setup and run steps.
## Setup
### Easiest (one command)
```bash
./run.sh
```
### macOS Double-Click Launcher
Double-click `Run ManeshTrader.command` in Finder.
If macOS blocks first launch, run once in Terminal:
```bash
xattr -d com.apple.quarantine "Run ManeshTrader.command"
```
### macOS App Wrapper (`.app`)
Build a native `.app` launcher:
```bash
./scripts/create_mac_app.sh
```
This creates `ManeshTrader.app` in the project root. You can double-click it or move it to `/Applications`.
Build a distributable installer DMG:
```bash
./scripts/create_installer_dmg.sh
```
Output: `ManeshTrader-YYYYMMDD-HHMMSS.dmg` in project root.
### Self-Contained macOS App (WKWebView + Embedded Backend)
Build an installable app where all backend logic ships inside `ManeshTraderMac.app`:
```bash
./scripts/build_selfcontained_mac_app.sh
```
This outputs `dist-mac/<timestamp>/ManeshTraderMac.app`.
Then package that app as DMG:
```bash
APP_BUNDLE_PATH="dist-mac/<timestamp>/ManeshTraderMac.app" ./scripts/create_installer_dmg.sh
```
Note: for easiest install on other Macs, use Apple code signing + notarization before sharing publicly.
### Standalone Streamlit App (Alternative)
This older path builds a standalone Streamlit wrapper app:
```bash
./scripts/build_standalone_app.sh
```
Output: `dist-standalone/<timestamp>/dist/ManeshTrader.app`
### Optional with Make
```bash
make run
make build-mac-selfcontained
```
### Manual
1. Create and activate a virtual environment:
```bash
python3 -m venv .venv
source .venv/bin/activate
```
2. Install dependencies:
```bash
pip install -r requirements.txt
```
3. Run the app:
```bash
streamlit run app.py
```
4. Open the local URL printed by Streamlit (usually `http://localhost:8501`).
## Usage
1. Set `Symbol` (examples: `AAPL`, `MSFT`, `BTC-USD`, `ETH-USD`).
2. Choose `Timeframe` and `Period`.
3. Optionally adjust filters:
- `Use previous body range (ignore wicks)`
- `Enable volume filter`
- `Hide market-closed gaps (stocks)`
4. Review:
- Current trend status
- Real/fake bar counts
- Trend events and chart markers
5. Export results from the **Export** section.
## Strategy Logic Implemented
For closed bar `i` and previous closed bar `i-1`:
- Real Bullish Bar: `close[i] > high[i-1]` (or previous body high if wick filter enabled)
- Real Bearish Bar: `close[i] < low[i-1]` (or previous body low if wick filter enabled)
- Fake Bar: otherwise (inclusive range)
Trend state machine:
- Two consecutive real bullish bars => bullish trend active
- Two consecutive real bearish bars => bearish trend active
- Active trend persists until **two consecutive real bars in opposite direction**
- Single opposite real bar is treated as noise/fluke and does not reverse trend
## Notes
- The app is analysis-only; no order execution.
- Yahoo Finance interval availability depends on symbol and lookback window.
- "Ignore potentially live last bar" is enabled by default to reduce incomplete-bar bias.
- Gap-hiding behavior is currently optimized for regular U.S. stock sessions; exchange holidays/half-days may still show occasional spacing.
## Troubleshooting
- If data fetch fails, verify symbol spelling and use a compatible interval/period combination.
- If PDF export is unavailable, ensure `kaleido` is installed in the same environment.