Spaces:
Runtime error
Runtime error
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| import uvicorn | |
| from logic.nadaraya import NadarayaWatson | |
| from logic.res_sup import ResSupCluster | |
| from data_core.utils import prepare_data | |
| from collections import Counter | |
| import os | |
| import traceback | |
| app = FastAPI() | |
| class Response(BaseModel): | |
| signal: dict = {} | |
| message: str = None | |
| error: str = None | |
| def nada(symbol: str = "CEO"): | |
| res = Response() | |
| try: | |
| data = prepare_data(symbol=symbol, date_past=365) | |
| Nada = NadarayaWatson(data=data) | |
| if data.iloc[-1]["open"] <= Nada.lower_bound: | |
| signal = "buy" | |
| elif data.iloc[-1]["open"] >= Nada.upper_bound: | |
| signal = "sell" | |
| else: | |
| signal = "hold" | |
| # update res | |
| res.signal["Nadaraya"] = signal | |
| except: | |
| res.error = traceback.format_exc() | |
| return res | |
| def ressup(symbol: str = "CEO"): | |
| res = Response() | |
| try: | |
| # Extract Data | |
| print("symbol", symbol) | |
| data = prepare_data(symbol=symbol, date_past=365) | |
| # today price | |
| today_price = data.iloc[-1]["open"] | |
| # fit cluster | |
| ResSup = ResSupCluster(data=data, | |
| n_clusters=3, | |
| is_delete_outlier=True) | |
| print(data) | |
| # buy and sell range | |
| current_week_cluster = Counter(ResSup.data.iloc[-7 :]["Clusters"]) | |
| current_day_cluster = current_week_cluster.most_common()[0][0] | |
| support = ResSup.support[current_day_cluster] | |
| resistance = ResSup.resistance[current_day_cluster] | |
| # find buy range | |
| buy_range = (support, support + (resistance - support) * 0.236) | |
| sell_range = (resistance - (resistance - support) * 0.236, resistance) | |
| if buy_range[0] <= today_price <= buy_range[1]: | |
| signal = "buy" | |
| elif sell_range[0] <= today_price <= sell_range[1]: | |
| signal = "sell" | |
| else: | |
| signal = "hold" | |
| res.signal["resup"] = signal | |
| res.message = f"price: {today_price}, resitance: {resistance}, support: {support}" | |
| except: | |
| res.error = traceback.format_exc() | |
| return res | |
| # if __name__ == "__main__": | |
| # uvicorn.run(app, host="127.0.0.1", port=8000, log_level="info") | |