# source: https://raw.githubusercontent.com/engmoeidh/crypto-dual-bot/063493d6d035251f8e993517827b79e9aaec100c/day_bot/strategy_day.py
from freqtrade.strategy.interface import IStrategy
from common.features import build_feature_dict
from common.position_manager import PositionManager
import random
from pandas import DataFrame
from trading.engines.ase_v2 import ForecastEngine

class Github_engmoeidh_crypto_dual_bot__strategy_day__20250616_114039(IStrategy):
    timeframe = "5m"
    minimal_roi = {"0": 0.02}
    stoploss     = -0.02
    process_only_new_candles = True

    def __init__(self, config: dict) -> None:
        super().__init__(config)
        # point to the YAML you just added
        self.engine = ForecastEngine("trading/engines/ase_v2/config/day.yaml")

    def populate_entry_trend(self, df, metadata):
        if df.empty:
            return df
        # build an obs dict for ASE
        obs = {
            "timestamp": df.index[-1].value // 10**6,  # ms
            "mid_px":    df["close"].iloc[-1],
            "depth":     list(zip(df["bid_size"][-1:], df["ask_size"][-1:])),
            "trade_vol": df["volume"].iloc[-1],
            # optionally add "news": sentiment_score
        }
        self.engine.update(obs)
        if self.engine.should_trade:
            df.loc[df.index[-1], "enter_long"] = 1
        return df

    def populate_exit_trend(self, df, metadata):
        # mirror entry logic for exit or leave empty for position_manager
        return df

