# source: https://raw.githubusercontent.com/tellyoung/money_game/5df345fee1820de27fbbe0d82dbee4341b55d3dc/MyStrategy.py

# 自动生成的freqtrade策略
from freqtrade.strategy import IStrategy
import pandas as pd
import numpy as np

import pickle
import os
            

class Github_tellyoung_money_game__MyStrategy__20250524_074816(IStrategy):
    timeframe = "1h"
    minimal_roi = { "0": 0.1 }
    stoploss = -0.1
    trailing_stop = False

    def populate_indicators(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
        # 可在此处添加自定义因子或特征
        return dataframe

    def populate_buy_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
        dataframe["buy"] = 0

        # RandomFactor_3 ML模型信号
        model_path = "RandomFactor_3_ml_model.pkl"
        if os.path.exists(model_path):
            with open(model_path, "rb") as f:
                model = pickle.load(f)
            X = dataframe["RandomFactor_3"].values.reshape(-1, 1)
            preds = model.predict(X)
            dataframe["ml_pred_RandomFactor_3"] = preds
            dataframe.loc[dataframe["ml_pred_RandomFactor_3"] == 1, "buy"] = 1

        # RandomFactor_14 ML模型信号
        model_path = "RandomFactor_14_ml_model.pkl"
        if os.path.exists(model_path):
            with open(model_path, "rb") as f:
                model = pickle.load(f)
            X = dataframe["RandomFactor_14"].values.reshape(-1, 1)
            preds = model.predict(X)
            dataframe["ml_pred_RandomFactor_14"] = preds
            dataframe.loc[dataframe["ml_pred_RandomFactor_14"] == 1, "buy"] = 1

        # RandomFactor_1_quantile_0.1 ML模型信号
        model_path = "RandomFactor_1_quantile_0.1_ml_model.pkl"
        if os.path.exists(model_path):
            with open(model_path, "rb") as f:
                model = pickle.load(f)
            X = dataframe["RandomFactor_1_quantile_0.1"].values.reshape(-1, 1)
            preds = model.predict(X)
            dataframe["ml_pred_RandomFactor_1_quantile_0.1"] = preds
            dataframe.loc[dataframe["ml_pred_RandomFactor_1_quantile_0.1"] == 1, "buy"] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
        dataframe["sell"] = 0

        # RandomFactor_3 ML模型信号
        if "ml_pred_RandomFactor_3" in dataframe.columns:
            dataframe.loc[dataframe["ml_pred_RandomFactor_3"] == -1, "sell"] = 1

        # RandomFactor_14 ML模型信号
        if "ml_pred_RandomFactor_14" in dataframe.columns:
            dataframe.loc[dataframe["ml_pred_RandomFactor_14"] == -1, "sell"] = 1

        # RandomFactor_1_quantile_0.1 ML模型信号
        if "ml_pred_RandomFactor_1_quantile_0.1" in dataframe.columns:
            dataframe.loc[dataframe["ml_pred_RandomFactor_1_quantile_0.1"] == -1, "sell"] = 1

        return dataframe
