feat(routing): wire AI target_asset end-to-end — bot trades the right perp
Closes the loop on the asset-routing prompt change. Previously the v5 prompt emitted target_asset (e.g. SOL, TRUMP) but bot_engine still read price_impact_asset and only ever traded BTC/ETH. Now the trade actually fires on whatever perp the AI picked. Schema (alembic 006): posts.target_asset (str) — HL perp ticker, any of the universe posts.category (str) — 6-class enum (direct_named, etc.) posts.expected_move_pct (float) — AI's 1h move estimate Wiring: truth_social.py persists the three fields when creating Post rows. bot_engine.py routing: asset = target_asset || price_impact_asset || BTC Old rows (target_asset=NULL) fall back to legacy BTC/ETH path — no retroactive scoring needed; new rows route correctly from now on. Hyperliquid trader doesn't need changes — `coin` is already a parameter, and analysis.py validated against HL_PERPS before storing target_asset so by the time bot_engine reads the field, it's guaranteed tradeable. Deployment: alembic upgrade head # adds the 3 columns Restart api container Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -77,8 +77,17 @@ async def process_post(post: Post, db: AsyncSession) -> None:
|
||||
logger.info("Post %d skipped: signal=%s is not actionable", post.id, post.signal)
|
||||
return
|
||||
|
||||
asset = post.price_impact_asset or 'BTC'
|
||||
# v5: route the trade to the AI-decided perp. target_asset can be any
|
||||
# Hyperliquid perp ticker (BTC/ETH/SOL/TRUMP/...) — analysis.py already
|
||||
# validated against HL_PERPS and resolved chain fallbacks before this
|
||||
# field was set, so by the time we get here it's safe to trade directly.
|
||||
# Fallbacks for older / null rows: legacy price_impact_asset, then BTC.
|
||||
asset = post.target_asset or post.price_impact_asset or 'BTC'
|
||||
side = 'long' if post.signal == 'buy' else 'short'
|
||||
logger.info(
|
||||
"Routing post %d → trade %s/%s (category=%s, expected_move=%.2f%%)",
|
||||
post.id, asset, side, post.category, post.expected_move_pct or 0,
|
||||
)
|
||||
|
||||
logger.info("Signal: post=%d asset=%s side=%s confidence=%d", post.id, asset, side, post.ai_confidence)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user