truenas template: complete 86-key env block (kills env-drift class)

Systematic diff of the old .env against the deployed loop env found 68
code-read keys running on silent defaults — including the risk cap
($500 vs $868 observed), the VWAP gate, the exit ladder, and the
NEWS_ENRICH_ENABLED flag that kept the catalyst engine dead despite
OLLAMA_ENABLED=true (enrichment requires BOTH, config.py:1235 gate).
Template env block regenerated with the full inventory, secrets as
<FILL-ME>; a ready-to-paste block with real values generated locally
(data/loop-env-block.yaml, gitignored).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
momentum devandClaude Opus 4.8 committed 2026-07-11 12:26:25 -04:00
1 parent 5ac2cc7b89
commit cad9051a96
1 file changed
+86 -26
+86 -26
View File
@@ -19,32 +19,92 @@
x-app: &app
image: docker.io/fez5587/momentum-app:latest # also published to ghcr.io/fez5587/momentum-app
environment: &app-env
TZ: America/New_York
# ---- infra
DATABASE_URL: postgresql://momentum:<FILL-ME-PG-PASSWORD>@postgres:5432/momentum
PG_SKIP_SCHEMA: "0"
OLLAMA_HOST: http://192.168.1.9:11434
ALPACA_DATA_FEED: sip
# ---- secrets
ALPACA_API_KEY: <FILL-ME>
ALPACA_SECRET_KEY: <FILL-ME>
ALPACA_BASE_URL: https://paper-api.alpaca.markets
TELEGRAM_BOT_TOKEN: <FILL-ME>
TELEGRAM_CHAT_ID: <FILL-ME>
YOUTUBE_API_KEY: <FILL-ME>
# ---- strategy knobs (current validated config, 2026-07-09; full
# inventory with comments: .env.example in the repo)
TRIGGER_GAP_MIN: "10.0"
TRIGGER_GAP_MAX: "35"
TRIGGER_GAP_SQUEEZE_MIN: "150"
TRIGGER_GAP_SQUEEZE_RVOL: "5.0"
TRADING_MIN_ENTRY_GAP_PCT: "0.10"
TRADING_MIN_DAY_VOLUME: "300000"
TRADING_PRICE_MIN: "2.0"
TRADING_PRICE_MAX: "20.0"
TRADING_MIN_QUALITY_SCORE: "0.60"
TRADING_MAX_FRESH_ENTRIES_PER_DAY: "10"
TRADING_ENTRY_CONFIRM_BY_MINUTE: "0"
ALPACA_API_KEY: '<FILL-ME>'
ALPACA_BACKFILL_FEED: 'sip'
ALPACA_BASE_URL: 'https://paper-api.alpaca.markets/v2'
ALPACA_DATA_FEED: 'sip'
ALPACA_PAPER_SYNC_ENABLED: '1'
ALPACA_SECRET_KEY: '<FILL-ME>'
DATABASE_URL: 'postgresql://momentum:<FILL-ME-PG-PASSWORD>@postgres:5432/momentum'
DISCOVER_INTERVAL_SECONDS: '120'
FMP_API_KEY: '<FILL-ME>'
INGEST_STALE_BLOCK: '0'
INGEST_STALE_SECONDS: '180'
LIVE_BARS_INTERVAL_SECONDS: '20'
LIVE_BARS_REFRESH_MINUTES: '20'
NEWS_CATALYST_SCORE_ENABLED: '1'
NEWS_DILUTION_VETO_ENABLED: '1'
NEWS_ENRICH_BATCH_LIMIT: '50'
NEWS_ENRICH_ENABLED: '1'
NEWS_ENRICH_INTERVAL_SECONDS: '120'
NEWS_ENRICH_LOOKBACK_HOURS: '12'
NEWS_FEEDS: 'prnewswire=https://www.prnewswire.com/rss/news-releases-list.rss,businesswire=https://feed.businesswire.com/rss/home/?rss=G1QFDERJXkJeGVtRWQ==,globenewswire=https://www.globenewswire.com/RssFeed/orgclass/1/feedTitle/GlobeNewswire%20-%20News%20about%20Public%20Companies'
NEWS_LOOKBACK_HOURS: '8'
NEWS_RANK_BOOST: '2.0'
OLLAMA_ENABLED: '1'
OLLAMA_HOST: 'http://192.168.1.5:30068'
OLLAMA_MODEL: 'qwen2.5:7b-instruct'
OLLAMA_TEMPERATURE: '0.1'
OLLAMA_TIMEOUT_SECONDS: '60'
ORB_BARS: '5'
PG_SKIP_SCHEMA: '0'
STRATEGY_SETUPS: 'opening_range_break'
TELEGRAM_BOT_TOKEN: '<FILL-ME>'
TELEGRAM_CHAT_ID: "'2082795871'"
TRADING_AUTO_APPROVE: '1'
TRADING_BACKOUT_COOLDOWN_SECONDS: '180'
TRADING_BLOCK_REENTRY_AFTER_EXIT: '1'
TRADING_ENTRY_CONFIRM_BY_MINUTE: '0'
TRADING_ENTRY_FILL_MODEL: 'resting'
TRADING_ENTRY_INVALIDATE_PCT: '0.015'
TRADING_ENTRY_ORDER_TYPE: 'limit'
TRADING_ENTRY_TIMEOUT_BARS: '2'
TRADING_EOD_FLATTEN_ENABLED: '1'
TRADING_EOD_FLATTEN_TIME: '15:55'
TRADING_EXECUTION_ENABLED: '1'
TRADING_EXIT_BREAKEVEN_R: '1.0'
TRADING_EXIT_PROFIT_TIERS: '8:3,15:9,25:18,40:30'
TRADING_EXIT_TRAIL_AFTER_R: '1.0'
TRADING_EXIT_TRAIL_MODE: 'prior_low'
TRADING_EXIT_TRAIL_R_STEP: '0.25'
TRADING_LIQUIDITY_MAX_VOLUME_PCT: '0.025'
TRADING_MAX_BACKOUTS_PER_SYMBOL: '3'
TRADING_MAX_CONCURRENT_POSITIONS: '10'
TRADING_MAX_DAILY_LOSS_PCT: '0.05'
TRADING_MAX_FRESH_ENTRIES_PER_DAY: '10'
TRADING_MAX_GROSS_NOTIONAL_PCT: '0.60'
TRADING_MAX_ORDERS_PER_TICK: '1'
TRADING_MAX_POSITION_PCT: '0.16'
TRADING_MAX_RISK_DOLLARS: '500'
TRADING_MIN_DAY_VOLUME: '300000'
TRADING_MIN_ENTRY_GAP_PCT: '0.10'
TRADING_MIN_QUALITY_SCORE: '0.60'
TRADING_PRICE_MAX: '20.0'
TRADING_PRICE_MIN: '2.0'
TRADING_REENTRY_MIN_LOSS_PCT: '0.01'
TRADING_REQUIRE_ABOVE_VWAP: '1'
TRADING_REWARD_MULTIPLE: '10.0'
TRADING_RISK_PER_TRADE_PCT: '0.01'
TRADING_SESSION_ONLY: '1'
TRADING_TRIGGER_SLIP_PCT: '0.004'
TRADING_UNIFIED_ENTRY: '1'
TRIGGER_ARM_INTERVAL_SECONDS: '20'
TRIGGER_ENABLED: '1'
TRIGGER_GAP_MAX: '35'
TRIGGER_GAP_MIN: '10.0'
TRIGGER_GAP_SQUEEZE_MIN: '150'
TRIGGER_GAP_SQUEEZE_RVOL: '5.0'
TRIGGER_INTERVAL_SECONDS: '4'
TRIGGER_MAX_ARMED: '10'
TRIGGER_MIN_DOLLAR_VOL: '8000'
TRIGGER_PRICE_MAX_AGE: '12'
TRIGGER_RVOL_MIN: '2.0'
TZ: 'America/New_York'
WATCHER_ENABLED: '1'
WATCHER_INTERVAL_SECONDS: '15'
WATCHER_PRICE_MAX: '20'
WATCHER_PRICE_MIN: '2'
YOUTUBE_API_KEY: '<FILL-ME>'
volumes:
- /mnt/volume/Apps/momentum/data:/app/data
depends_on: