# source: https://raw.githubusercontent.com/remiotore/freqtrade/44beaeb6a420cd8e9f2e4ea93e11d6cfa192ee03/strategies/VWAPAlarm5M.py

from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame, Series
from datetime import datetime, timedelta
import os

from colorama import Fore, Style

import numpy as np

from freqtrade.rpc import RPCMessageType
from beepy import beep
import freqtrade.vendor.qtpylib.indicators as qtpylib
from technical.util import resample_to_interval

def green(text):
    return f"{Fore.GREEN}{text}{Style.RESET_ALL}"


def calculate_distance_percentage(current_price: float, green_line_price: float) -> float:
    distance = abs(current_price - green_line_price)
    return distance * 100 / current_price


def get_symbol_from_pair(pair: str) -> str:
    return pair.split('/')[0]


class Github_remiotore_freqtrade__VWAPAlarm5M__20260111_210550(IStrategy):
    minimal_roi = {
        "0": 10
    }

    stoploss = -0.99

    timeframe = '5m'
    process_only_new_candles = True

    alarm_emitted = dict()

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        pair = metadata["pair"]
        if pair not in self.alarm_emitted:
            self.alarm_emitted[pair] = False




        dataframe['vwap'] = qtpylib.rolling_vwap(dataframe, window=14)








        pct = 0.2
        vwap = dataframe["vwap"].iloc[-1]
        current_close = dataframe["close"].iloc[-1]
        previous_vwap = dataframe["vwap"].iloc[-2]
        previous_close = dataframe["close"].iloc[-2]
        if previous_close < previous_vwap and current_close > vwap:
            if not self.alarm_emitted[pair]:
                binance_pair = pair.replace("/", "_")
                ticker = self.dp.ticker(pair)
                last_price = ticker['last']
                distance = calculate_distance_percentage(last_price, vwap)
                if distance <= pct:
                    beep(3)
                    binance_link = f'https://www.binance.com/en/trade/{binance_pair}?layout=pro&type=spot'

                    print(green(f'{pair} {round(calculate_distance_percentage(last_price, vwap), 2)} {binance_link}'))
            self.alarm_emitted[pair] = True
        else:
            self.alarm_emitted[pair] = False











        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
            ), 'buy'] = 1
        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
            ),
            'sell'] = 1
        return dataframe
