Add pivot retest + engulfing strategy with dual take-profit

New strategy (pivot_retest_engulfing) that enters long/short trades at
pivot level retests confirmed by SMA 50 alignment and engulfing candle
patterns. Uses ATR-based stop loss with two take-profit levels — at TP1
half the position closes and SL moves to breakeven, at TP2 the rest closes.

- data_engine: add detect_engulfing() for bullish/bearish pattern detection
- backtester: add generate_signals_pivot_retest(), run_backtest_dual_tp(),
  update signal dispatcher and metrics for dual-TP trade format
- order_executor: support signal=-1 (SHORT), attach SL/TP levels
- config: switch to pivot_retest_engulfing with default params
- chart_trades: new mplfinance script to visualize entries on candlesticks
- README: rewrite with full setup guide, project structure, strategy docs
- requirements.txt: make portable (remove conda file:// paths), add mplfinance
- .env.example: add template for secrets

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Brent Neale
2026-02-17 15:18:02 +10:00
co-authored by Claude Opus 4.6
parent d843e63e7b
commit b1f3a919bf
11 changed files with 1017 additions and 114 deletions
+15 -34
View File
@@ -1,35 +1,16 @@
backports.zstd @ file:///D:/bld/bld/rattler-build_backports.zstd_1767045012/work
Brotli @ file:///D:/bld/brotli-split_1764017006836/work
certifi @ file:///home/conda/feedstock_root/build_artifacts/certifi_1767500808759/work/certifi
charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1760437218288/work
contourpy==1.3.3
cycler==0.12.1
fonttools==4.61.1
h2 @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_h2_1756364871/work
hpack @ file:///home/conda/feedstock_root/build_artifacts/hpack_1737618293087/work
hyperframe @ file:///home/conda/feedstock_root/build_artifacts/hyperframe_1737618333194/work
idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1760286409563/work
joblib==1.5.3
kiwisolver==1.4.9
lightgbm @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_lightgbm_1768022071/work
matplotlib==3.10.8
narwhals==2.16.0
numpy @ file:///D:/bld/bld/rattler-build_numpy_1770098404/work/dist/numpy-2.4.2-cp311-cp311-win_amd64.whl#sha256=1dc64abcea7678d915a259496c0283ff327afeed3b11d508be6117caf2623ad7
pandas>=2.0
numpy>=1.24
scipy>=1.10
scikit-learn>=1.3
lightgbm>=4.0
matplotlib>=3.7
mplfinance>=0.12.10b0
plotly>=5.0
pyarrow>=14.0
oandapyV20==0.7.2
packaging @ file:///C:/miniconda3/conda-bld/packaging_1761049096285/work
pandas @ file:///D:/bld/bld/rattler-build_pandas_1769076324/work
pillow==12.1.1
plotly==6.5.2
pyarrow==23.0.0
pyparsing==3.3.2
PySocks @ file:///D:/bld/pysocks_1733217287171/work
python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_python-dateutil_1751104122/work
python-dotenv @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_python-dotenv_1761503229/work
requests @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_requests_1766926974/work
scikit-learn==1.8.0
scipy @ file:///C:/bld/scipy-split_1768799500391/work/dist/scipy-1.17.0-cp311-cp311-win_amd64.whl#sha256=ab381c0683a4c5959a4eb8ad52025d587189c73b376c9d03fe6886a42f3fe699
six @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_six_1753199211/work
threadpoolctl==3.6.0
tzdata @ file:///home/conda/feedstock_root/build_artifacts/python-tzdata_1765719872007/work
urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1767817748113/work
win_inet_pton @ file:///D:/bld/win_inet_pton_1733130564612/work
requests>=2.28
supabase>=2.0
python-dotenv>=1.0
PyYAML>=6.0
flask>=3.0
flask-httpauth>=4.8