# 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//ManeshTraderMac.app`. Then package that app as DMG: ```bash APP_BUNDLE_PATH="dist-mac//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//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.