trading / app.py
Paulbri's picture
Upload 5 files
53568ba
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)