Fix leaderboard (#3)
This commit is contained in:
@@ -31,13 +31,12 @@ public class TradaoService : ITradaoService
|
||||
public TradaoService()
|
||||
{
|
||||
_httpClient = new HttpClient();
|
||||
;
|
||||
}
|
||||
|
||||
public async Task<List<Trader>> GetBadTrader()
|
||||
{
|
||||
var bestTraders = await _httpClient.GetFromJsonAsync<TradaoList>(
|
||||
$"https://api.tradao.xyz/v1/td/dashboard/42161/gmx/pnlTop/500/asc/2592000/0/?current=1&limit=500&order=asc&window=2592000&chain=42161&exchange=gmx&openPosition=0");
|
||||
$"https://api.tradao.xyz/v2/td/dashboard/pnlTop/12/asc/604800/0/?exchangeId=gmx_42161&exchangeId=gmx_43114&exchangeId=gmxv2_42161&exchangeId=gmxv2_43114¤t=1&limit=20&order=desc&window=2592000&exchangeDic=exchangeId%3Dgmx_42161%26exchangeId%3Dgmx_43114%26exchangeId%3Dgmxv2_42161%26exchangeId%3Dgmxv2_43114&chain=0&exchange=gmx&openPosition=0");
|
||||
|
||||
if (bestTraders == null || bestTraders.row.Count == 0)
|
||||
{
|
||||
@@ -47,11 +46,10 @@ public class TradaoService : ITradaoService
|
||||
return await GetTraderDetails(bestTraders);
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<Trader>> GetBestTrader()
|
||||
{
|
||||
var bestTraders = await _httpClient.GetFromJsonAsync<TradaoList>(
|
||||
$"https://api.tradao.xyz/v1/td/dashboard/42161/gmx/pnlTop/500/desc/2592000/0/?current=1&limit=500&order=desc&window=2592000&chain=42161&exchange=gmx&openPosition=0");
|
||||
$"https://api.tradao.xyz/v2/td/dashboard/roiTop/12/desc/2592000/0/?exchangeId=gmxv2_42161¤t=1&limit=12&order=desc&window=2592000&exchangeDic=exchangeId%3Dgmxv2_42161&chain=42161&exchange=gmxv2&openPosition=0&volumeL=100000&tradeTimesL=10&tradeTimesH=50&winRateL=0.6");
|
||||
|
||||
if (bestTraders == null || bestTraders.row.Count == 0)
|
||||
{
|
||||
@@ -65,24 +63,27 @@ public class TradaoService : ITradaoService
|
||||
{
|
||||
var response =
|
||||
await _httpClient.GetFromJsonAsync<TradaoUserDetails>(
|
||||
$"https://api.tradao.xyz/v1/td/trader/42161/gmx/insights/{address}");
|
||||
$"https://api.tradao.xyz/v2/td/trader/insightsV2/{address}?exchangeId=gmx_42161&exchangeId=gmx_43114&exchangeId=gmxv2_42161&exchangeId=gmxv2_43114");
|
||||
|
||||
var trades = new List<Trade>();
|
||||
|
||||
if (response == null) return trades;
|
||||
|
||||
foreach (var position in response.openPositions)
|
||||
foreach (var record in response.gmxv2_42161.records.Where(p => p.isOpen))
|
||||
{
|
||||
var computedData = GetComputedData(record.records);
|
||||
var marketPrice = response.gmxv2_42161.prices.FirstOrDefault(p => p.Key == record.indexToken).Value;
|
||||
|
||||
var trade = new Trade(
|
||||
DateTime.UtcNow,
|
||||
position.isLong ? Common.Enums.TradeDirection.Long : Common.Enums.TradeDirection.Short,
|
||||
record.isLong ? Common.Enums.TradeDirection.Long : Common.Enums.TradeDirection.Short,
|
||||
Common.Enums.TradeStatus.Filled,
|
||||
Common.Enums.TradeType.Market,
|
||||
TokenService.GetTicker(position.indexTokenAddress),
|
||||
Convert.ToDecimal(position.collateral),
|
||||
Convert.ToDecimal(position.averagePrice),
|
||||
Convert.ToDecimal(position.position) / Convert.ToDecimal(position.collateral),
|
||||
address, position.liqPrice
|
||||
TokenService.GetTicker(record.indexToken),
|
||||
Convert.ToDecimal(computedData.Collateral) / Convert.ToDecimal(marketPrice),
|
||||
Convert.ToDecimal(record.averagePrice),
|
||||
Convert.ToDecimal(computedData.Size) / Convert.ToDecimal(computedData.Collateral),
|
||||
record.positionId, record.liqPrice
|
||||
);
|
||||
|
||||
trades.Add(trade);
|
||||
@@ -91,6 +92,28 @@ public class TradaoService : ITradaoService
|
||||
return trades;
|
||||
}
|
||||
|
||||
private (decimal Collateral, decimal Size) GetComputedData(List<RecordDetail> positionRecords)
|
||||
{
|
||||
decimal computedCollateral = 0;
|
||||
decimal computedSize = 0;
|
||||
|
||||
foreach (var record in positionRecords)
|
||||
{
|
||||
if (record.eventType == 1) // Increase
|
||||
{
|
||||
computedCollateral += Convert.ToDecimal(record.collateralDelta);
|
||||
computedSize += Convert.ToDecimal(record.sizeDelta);
|
||||
}
|
||||
else if (record.eventType == 2) // Decrease
|
||||
{
|
||||
computedCollateral -= Convert.ToDecimal(record.collateralDelta);
|
||||
computedSize -= Convert.ToDecimal(record.sizeDelta);
|
||||
}
|
||||
}
|
||||
|
||||
return (computedCollateral, computedSize);
|
||||
}
|
||||
|
||||
|
||||
private async Task<List<Trader>> GetTraderDetails(TradaoList traders)
|
||||
{
|
||||
@@ -99,7 +122,7 @@ public class TradaoService : ITradaoService
|
||||
{
|
||||
var response =
|
||||
await _httpClient.GetFromJsonAsync<TradaoUserDetails>(
|
||||
$"https://api.tradao.xyz/v1/td/trader/42161/gmx/insights/{trader.user}");
|
||||
$"https://api.tradao.xyz/v2/td/trader/insightsV2/{trader.user}?exchangeId=gmx_42161&exchangeId=gmx_43114&exchangeId=gmxv2_42161&exchangeId=gmxv2_43114");
|
||||
|
||||
if (response != null)
|
||||
result.Add(Map(response, trader.user));
|
||||
@@ -113,12 +136,12 @@ public class TradaoService : ITradaoService
|
||||
return new Trader
|
||||
{
|
||||
Address = address,
|
||||
Winrate = (int)(response.summary.winRate * 100),
|
||||
Pnl = Convert.ToDecimal(response.summary.pnl),
|
||||
TradeCount = response.summary.trades,
|
||||
AverageWin = Convert.ToDecimal(response.summary.averageWin),
|
||||
AverageLoss = Convert.ToDecimal(response.summary.averageLoss),
|
||||
Roi = Convert.ToDecimal(response.summary.roi)
|
||||
Winrate = (int)(response.gmxv2_42161.summary.winRate * 100),
|
||||
Pnl = response.gmxv2_42161.summary.pnl,
|
||||
TradeCount = response.gmxv2_42161.summary.trades,
|
||||
AverageWin = response.gmxv2_42161.summary.averageWin,
|
||||
AverageLoss = response.gmxv2_42161.summary.averageLoss,
|
||||
Roi = response.gmxv2_42161.summary.roi * 100
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user