Download app.py from Paulbri/trading: direct link, hf CLI and curl.
- Browser
- Download file 2.93 kB
-
https://huggingface.co/Paulbri/trading/resolve/main/app.py
- Command line
-
hf download hf://Paulbri/trading/app.py
-
curl -L -o app.py https://huggingface.co/Paulbri/trading/resolve/main/app.py
2.93 kB
| import requests | |
| import json | |
| import streamlit as st | |
| import pandas as pd | |
| import datetime | |
| from st_aggrid import AgGrid, GridOptionsBuilder, JsCode | |
| url_pos = "https://www.binance.com/bapi/futures/v1/public/future/leaderboard/getOtherPosition" | |
| url = "https://www.binance.com/fr/futures-activity/leaderboard/user?encryptedUid=EE56F412D7DAB7DBAFCEC2147FA2D223" | |
| url_perf = "https://www.binance.com/bapi/futures/v2/public/future/leaderboard/getOtherPerformance" | |
| url_name = "https://www.binance.com/bapi/futures/v2/public/future/leaderboard/getOtherLeaderboardBaseInfo" | |
| headers = { | |
| 'Content-Type': 'application/json', | |
| } | |
| def get_data(id: str): | |
| payload = json.dumps({ | |
| "encryptedUid": id, | |
| "tradeType": "PERPETUAL" | |
| }) | |
| response = requests.request("POST", url_pos, headers=headers, data=payload) | |
| x = response.json()["data"]["otherPositionRetList"] | |
| itog = [] | |
| for i in x: | |
| if 'updateTime' in i.keys(): | |
| # breakpoint() | |
| i.pop('updateTime') | |
| i.pop('yellow') | |
| i.pop('tradeBefore') | |
| i["updateTimeStamp"] = datetime.datetime.fromtimestamp(i["updateTimeStamp"]//1000) | |
| i["roe"] = i["roe"]*100 | |
| i["roe"] = round(i["roe"], 2) | |
| i["entryPrice"] = round(i["entryPrice"], 3) | |
| i["markPrice"] = round(i["markPrice"], 3) | |
| i["pnl"] = round(i["pnl"], 2) | |
| itog.append(pd.DataFrame.from_dict([i])) | |
| itog = pd.concat(itog , axis=0, ignore_index=True)[["symbol", "amount", "leverage","entryPrice","markPrice", "pnl", "roe","updateTimeStamp"]] | |
| return itog | |
| def get_name(id: str): | |
| payload = json.dumps({ | |
| "encryptedUid": id | |
| }) | |
| response = requests.request("POST", url_name, headers=headers, data=payload) | |
| x = response.json()["data"]["nickName"] | |
| return x | |
| def get_table(id, name): | |
| df = get_data(id) | |
| gd= GridOptionsBuilder.from_dataframe(df) | |
| cellstyle_jscode = JsCode(""" | |
| function(params){ | |
| if (params.value < '0') { | |
| return{ | |
| 'color': 'red' | |
| } | |
| } | |
| if (params.value > '0') { | |
| return{ | |
| 'color': 'green' | |
| } | |
| } | |
| } | |
| """) | |
| gd.configure_default_column(min_column_width=1) | |
| gd.configure_columns(column_names= ["pnl", "roe", "amount"], cellStyle= cellstyle_jscode) | |
| grid_options = gd.build() | |
| st.header(name) | |
| return AgGrid(df, gridOptions=grid_options, allow_unsafe_jscode=True, fit_columns_on_grid_load=True) | |
| with open("./links.txt", 'r') as f: | |
| links = f.readlines() | |
| links = [i.strip().replace("https://www.binance.com/fr/futures-activity/leaderboard/user?encryptedUid=", "") for i in links] | |
| links = {get_name(i):i for i in links} | |
| print(links) | |
| st.set_page_config(layout="wide") | |
| op = st.multiselect("traders", options=links.keys()) | |
| print(op) | |
| for i, name in enumerate(op): | |
| get_table(links[name], name) | |