From c486d91d7bb0e79003963e18beffd4c2e3bb4541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20S=C3=A1nchez?= Date: Fri, 8 Nov 2024 09:28:50 -0300 Subject: [PATCH] Added hint --- utils/statistics_server_v3.py | 55 ++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/utils/statistics_server_v3.py b/utils/statistics_server_v3.py index a04d478..3db48de 100644 --- a/utils/statistics_server_v3.py +++ b/utils/statistics_server_v3.py @@ -164,7 +164,7 @@ def last_n_deals_without_history(n): return [(row[0],row[1],row[2],row[3],row[4],"") for row in last_n_deals(n)] -def last_n_lines(file_name,width,amount=4,full_log=False): +def last_n_lines(file_name: str, width,amount: int = 4, full_log: bool = False): file_contents = [] result = [] @@ -187,9 +187,62 @@ def last_n_lines(file_name,width,amount=4,full_log=False): return result[:amount],len(file_contents) +def backtest_best_pairs(broker, max_rank: int = 0, min_vol: float = 0, amount: int = 0, vol_measure: str = "Yang-Zhang"): + ''' + Returns a list of trading pairs ordered by volatility. + Available volatility measures are Parkinson and Yang-Zhang. + + Parameters: 'broker' -> string - Exchange name (available are Binance, Gate.io, KuCoin and OKX) + 'max_rank' -> int - Maximum rank of the trading pair (extracted from CoinMarketCap. If there is no valid CMC API key or this parameter is 0, the full list will be returned) + 'min_vol' -> float - Minimum trading volume of the trading pair to be considered (in USD) + 'amount' -> int - Maximum number of trading pairs to be returned + 'vol_measure' -> string - Type of volatility measure (available are "Parkinson" and "Yang-Zhang") + ''' + + #Parse exchange name (valid entries are only "binance", "gateio", "kucoin" and "okx") + + return [] + + + stats_api = Flask(__name__) +@stats_api.route("/fetch_best_pairs") +def fetch_best_pairs(): + ''' + GET request + Parameters: 'broker' -> string + 'max_rank' -> int + 'min_vol' -> float + 'amount' -> int + 'days_back' -> int + 'vol_measure' -> string + ''' + + if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: + try: + broker = request.args.get("broker") + max_rank = int(request.args.get("max_rank")) #type:ignore + min_vol = float(request.args.get("min_vol")) #type:ignore + amount = int(request.args.get("amount")) #type:ignore + days_back = int(request.args.get("days_back")) #type:ignore + vol_measure = request.args.get("vol_measure") #type:ignore + response_value = backtest_best_pairs(broker,max_rank=max_rank,min_vol=min_vol,amount=amount,days_back=days_back,vol_measure=vol_measure) #type:ignore + if not cache_requests: + return jsonify({"best_pairs": response_value}) + response_hash = hash(str({"best_pairs": response_value})) + if hashes_db["best_pairs"]!=response_hash: + hashes_db["best_pairs"] = response_hash + return jsonify({"best_pairs": response_value}) + return jsonify({"no_changes": True}) + except Exception as e: + print(e) + return jsonify({"best_pairs":["Error",0]}) + return jsonify({'Error': 'API key invalid'}), 401 + + + @stats_api.route("/clear_caches") def clear_hashes(): global hashes_db