Add funding rate watcher (#2)
* Add FundingRate interfaces and worker * Add build on PR * Remove zip * Specify the solution path * Add build for worker too * Set up StatisticService.cs for funding rate * Add Fundingrate alerts * Send alert when big funding rate change + add SlashCommands.cs for fundingrate * Remove fixtures * Refact names * Renames
This commit is contained in:
@@ -16,7 +16,8 @@ public static class DiscordHelpers
|
||||
fields.Add(new EmbedFieldBuilder
|
||||
{
|
||||
Name = $"{GetExplorerUrl(trader.Address)}",
|
||||
Value = $"Avg Win / Avg Loss / Winrate / ROI \n {trader.AverageWin:#.##}$ / {trader.AverageLoss:#.##}$ / {trader.Winrate}% / {Convert.ToDecimal(trader.Roi) * 100:#.##}%",
|
||||
Value =
|
||||
$"Avg Win / Avg Loss / Winrate / ROI \n {trader.AverageWin:#.##}$ / {trader.AverageLoss:#.##}$ / {trader.Winrate}% / {Convert.ToDecimal(trader.Roi) * 100:#.##}%",
|
||||
});
|
||||
}
|
||||
|
||||
@@ -31,6 +32,48 @@ public static class DiscordHelpers
|
||||
return embed;
|
||||
}
|
||||
|
||||
public static Embed GetFundingRateEmbed(FundingRate fundingRate, string title, FundingRate? oldRate = null)
|
||||
{
|
||||
var fields = new List<EmbedFieldBuilder>();
|
||||
|
||||
decimal ratePerYear = fundingRate.Rate; // Rate per year
|
||||
decimal ratePerDay = ratePerYear / 365; // Rate per day
|
||||
decimal ratePerMonth = ratePerYear / 12; // Rate per month
|
||||
decimal ratePerHour = ratePerDay / 24; // Rate per hour
|
||||
|
||||
if (oldRate != null)
|
||||
{
|
||||
var oldRatePerYear = oldRate.Rate; // Rate per year
|
||||
var oldRatePerDay = oldRatePerYear / 365; // Rate per day
|
||||
var oldRatePerMonth = oldRatePerYear / 12; // Rate per month
|
||||
var oldRatePerHour = oldRatePerDay / 24; // Rate per hour
|
||||
|
||||
fields.Add(new EmbedFieldBuilder
|
||||
{
|
||||
Name = $"{fundingRate.Direction} - Previous Rate",
|
||||
Value =
|
||||
$"Hour: {oldRatePerHour:#.##}% / Day: {oldRatePerDay:#.##}% / Month: {oldRatePerMonth:#.##}% / Year: {oldRatePerYear:#.##}%",
|
||||
});
|
||||
}
|
||||
|
||||
fields.Add(new EmbedFieldBuilder
|
||||
{
|
||||
Name = $"{fundingRate.Direction} - Current rate",
|
||||
Value =
|
||||
$"Hour: {ratePerHour:#.##}% / Day: {ratePerDay:#.##}% / Month: {ratePerMonth:#.##}% / Year: {ratePerYear:#.##}%",
|
||||
});
|
||||
|
||||
var embed = new EmbedBuilder
|
||||
{
|
||||
Author = new EmbedAuthorBuilder() { Name = "GMX" },
|
||||
Title = $"{title} {DateTime.UtcNow:d}",
|
||||
Color = Color.DarkGreen,
|
||||
Fields = fields,
|
||||
}.Build();
|
||||
|
||||
return embed;
|
||||
}
|
||||
|
||||
public static Embed GetEmbed(string address, string title, List<EmbedFieldBuilder> fields, Color color)
|
||||
{
|
||||
return new EmbedBuilder
|
||||
@@ -57,14 +100,16 @@ public static class DiscordHelpers
|
||||
fields.Add(new EmbedFieldBuilder
|
||||
{
|
||||
Name = $"{GetExplorerUrl(trade.ExchangeOrderId)}",
|
||||
Value = $"Side / Ticker / Open / Qty / Leverage / LiqPrice \n {trade.Direction} / {trade.Ticker} / {trade.Price:#.##}$ / {trade.Quantity:#.##}$ / x{trade.Leverage:#.##} / {Convert.ToDecimal(trade.Message):#.##}$",
|
||||
Value =
|
||||
$"Side / Ticker / Open / Qty / Leverage / LiqPrice \n {trade.Direction} / {trade.Ticker} / {trade.Price:#.##}$ / {trade.Quantity:#.##}$ / x{trade.Leverage:#.##} / {Convert.ToDecimal(trade.Message):#.##}$",
|
||||
});
|
||||
}
|
||||
|
||||
fields.Add(new EmbedFieldBuilder
|
||||
{
|
||||
Name = "Summary",
|
||||
Value = $"Long / Short / \n {trades.Count(t => t.Direction == Common.Enums.TradeDirection.Long)} / {trades.Count(t => t.Direction == Common.Enums.TradeDirection.Short)}"
|
||||
Value =
|
||||
$"Long / Short / \n {trades.Count(t => t.Direction == Common.Enums.TradeDirection.Long)} / {trades.Count(t => t.Direction == Common.Enums.TradeDirection.Short)}"
|
||||
});
|
||||
|
||||
var embed = new EmbedBuilder
|
||||
@@ -77,4 +122,34 @@ public static class DiscordHelpers
|
||||
|
||||
return embed;
|
||||
}
|
||||
}
|
||||
|
||||
public static Embed GetFundingRatesEmbed(List<FundingRate> fundingRates, string leaderboardOpenPosition)
|
||||
{
|
||||
var fields = new List<EmbedFieldBuilder>();
|
||||
|
||||
foreach (var fundingRate in fundingRates)
|
||||
{
|
||||
decimal ratePerYear = fundingRate.Rate; // Rate per year
|
||||
decimal ratePerDay = ratePerYear / 365; // Rate per day
|
||||
decimal ratePerMonth = ratePerYear / 12; // Rate per month
|
||||
decimal ratePerHour = ratePerDay / 24; // Rate per hour
|
||||
|
||||
fields.Add(new EmbedFieldBuilder
|
||||
{
|
||||
Name = $"{fundingRate.Ticker}",
|
||||
Value =
|
||||
$"Hour: {ratePerHour:#.##}% / Day: {ratePerDay:#.##}% / Month: {ratePerMonth:#.##}% / Year: {ratePerYear:#.##}%",
|
||||
});
|
||||
}
|
||||
|
||||
var embed = new EmbedBuilder
|
||||
{
|
||||
Author = new EmbedAuthorBuilder() { Name = "GMX" },
|
||||
Title = $"Best Funding Rate {DateTime.UtcNow:d}",
|
||||
Color = Color.DarkGreen,
|
||||
Fields = fields,
|
||||
}.Build();
|
||||
|
||||
return embed;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user