обновление
test / deploy_trader_prod (push) Has been cancelled Details

dev
vlad zverzhkhovskiy 2025-09-29 17:38:53 +03:00
parent e11dfe8553
commit 3702a59d7e
2 changed files with 78 additions and 54 deletions

View File

@ -373,67 +373,62 @@ namespace KLHZ.Trader.Core.Exchange.Services
});
}
var buys = await _tradeDataProvider.GetDataFrom20SecondsWindowCache(message.Figi, "1");
var sells = await _tradeDataProvider.GetDataFrom20SecondsWindowCache(message.Figi, "2");
//var buys = await _tradeDataProvider.GetDataFrom20SecondsWindowCache(message.Figi, "1");
//var sells = await _tradeDataProvider.GetDataFrom20SecondsWindowCache(message.Figi, "2");
var buysSpeed = buys.Sum(p => p.Value) / 20;
var sellsSpeed = sells.Sum(p => p.Value) / 20;
//var buysSpeed = buys.Sum(p => p.Value) / 20;
//var sellsSpeed = sells.Sum(p => p.Value) / 20;
var orderBook = _tradeDataProvider.Orderbooks[message.Figi];
if (orderBook.Asks.Length>3 && orderBook.Bids.Length>3)
{
var asks = (decimal)(orderBook.Asks[0].Count + orderBook.Asks[1].Count + orderBook.Asks[2].Count);
//var asks = (decimal)(orderBook.Asks[0].Count + orderBook.Asks[1].Count + orderBook.Asks[2].Count + orderBook.Asks[3].Count);
var bids = (decimal)(orderBook.Bids[0].Count + orderBook.Bids[1].Count + orderBook.Bids[2].Count);
//var bids = (decimal)(orderBook.Bids[0].Count + orderBook.Bids[1].Count + orderBook.Bids[2].Count + orderBook.Bids[3].Count);
//var orderBook = _tradeDataProvider.Orderbooks[message.Figi];
//if (orderBook.Asks.Length>3 && orderBook.Bids.Length>3)
//{
// var asks = (decimal)(orderBook.Asks[0].Count + orderBook.Asks[1].Count + orderBook.Asks[2].Count);
// //var asks = (decimal)(orderBook.Asks[0].Count + orderBook.Asks[1].Count + orderBook.Asks[2].Count + orderBook.Asks[3].Count);
// var bids = (decimal)(orderBook.Bids[0].Count + orderBook.Bids[1].Count + orderBook.Bids[2].Count);
// //var bids = (decimal)(orderBook.Bids[0].Count + orderBook.Bids[1].Count + orderBook.Bids[2].Count + orderBook.Bids[3].Count);
if (buysSpeed > 0 && sellsSpeed > 0)
{
await LogPrice(message, "speed_relation", (sellsSpeed / (sellsSpeed + buysSpeed)));
}
// if (buysSpeed > 0 && sellsSpeed > 0)
// {
// await LogPrice(message, "speed_relation", (sellsSpeed / (sellsSpeed + buysSpeed)));
// }
//var diff = buysSpeed - sellsSpeed;
//await LogPrice(message, "speed_diff", diff);
//await LogPrice(message, "stabling", (asks+bids)/(sellsSpeed+buysSpeed));
// //var diff = buysSpeed - sellsSpeed;
// //await LogPrice(message, "speed_diff", diff);
// //await LogPrice(message, "stabling", (asks+bids)/(sellsSpeed+buysSpeed));
//if (buysSpeed > 0)
//{
// var asksLifetime = asks / buysSpeed;
// if (asksLifetime > 600) asksLifetime = 600;
// var asksLifetime2 = diff > 0?System.Math.Abs( asks / diff):0;
// await LogPrice(message, "asks_lifetime", asksLifetime);
// await LogPrice(message, "asks_lifetime2", asksLifetime2);
// await LogPrice(message, "asks_lifetime2", asksLifetime2);
// await LogPrice(message, "buys_speed", buysSpeed);
//}
// if (buysSpeed > 0)
// {
// var asksLifetime = asks / buysSpeed;
// if (asksLifetime > 600) asksLifetime = 600;
// await LogPrice(message, "asks_lifetime", asksLifetime);
// await LogPrice(message, "buys_speed", buysSpeed);
// }
//if (sellsSpeed > 0)
//{
// var bidsLifetime = bids / sellsSpeed;
// if (bidsLifetime > 600) bidsLifetime = 600;
// var bidsLifetime2 = diff < 0 ? System.Math.Abs(bids / diff) : 0;
// await LogPrice(message, "bids_lifetime", bidsLifetime);
// await LogPrice(message, "bids_lifetime2", System.Math.Abs(bidsLifetime2));
// await LogPrice(message, "sells_speed", sellsSpeed);
//}
// if (sellsSpeed > 0)
// {
// var bidsLifetime = bids / sellsSpeed;
// if (bidsLifetime > 600) bidsLifetime = 600;
// await LogPrice(message, "bids_lifetime", bidsLifetime);
// await LogPrice(message, "sells_speed", sellsSpeed);
// }
//var buys5min = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minBuyCacheKey);
//var sells5min = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minSellCacheKey);
//var buysSpeed5min = buys5min.Sum(p => p.Value) / 300;
//var sellsSpeed5min = sells5min.Sum(p => p.Value) / 300;
//var diff5min = buysSpeed5min - sellsSpeed5min;
//await LogPrice(message, "speed_diff_5min", diff5min);
// //var buys5min = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minBuyCacheKey);
// //var sells5min = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minSellCacheKey);
// //var buysSpeed5min = buys5min.Sum(p => p.Value) / 300;
// //var sellsSpeed5min = sells5min.Sum(p => p.Value) / 300;
// //var diff5min = buysSpeed5min - sellsSpeed5min;
// //await LogPrice(message, "speed_diff_5min", diff5min);
//var buys1min = await _tradeDataProvider.GetDataFrom1MinuteWindowCache(message.Figi, Constants._1minBuyCacheKey);
//var sells1min = await _tradeDataProvider.GetDataFrom1MinuteWindowCache(message.Figi, Constants._1minSellCacheKey);
//var buysSpeed1min = buys1min.Sum(p => p.Value) / 60;
//var sellsSpeed1min = sells1min.Sum(p => p.Value) / 60;
//var diff1min = buysSpeed1min - sellsSpeed1min;
//await LogPrice(message, "speed_diff_1min", diff1min);
}
// //var buys1min = await _tradeDataProvider.GetDataFrom1MinuteWindowCache(message.Figi, Constants._1minBuyCacheKey);
// //var sells1min = await _tradeDataProvider.GetDataFrom1MinuteWindowCache(message.Figi, Constants._1minSellCacheKey);
// //var buysSpeed1min = buys1min.Sum(p => p.Value) / 60;
// //var sellsSpeed1min = sells1min.Sum(p => p.Value) / 60;
// //var diff1min = buysSpeed1min - sellsSpeed1min;
// //await LogPrice(message, "speed_diff_1min", diff1min);
//}
}
@ -538,16 +533,45 @@ namespace KLHZ.Trader.Core.Exchange.Services
}
}
private async Task<ImmutableDictionary<TradingEvent, decimal>> CheckDivergency(INewPrice message)
{
var res = GetInitDict(1);
var buys = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minBuyCacheKey);
var sells = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minSellCacheKey);
var time1 = message.Time - TimeSpan.FromMinutes(4);
var time2 = message.Time - TimeSpan.FromMinutes(2);
var buysOld = buys.Where(b => b.Time < time2 && b.Time >= time1).ToArray();
var sellsOld = sells.Where(b => b.Time < time2 && b.Time >= time1).ToArray();
var buysNew = buys.Where(b => b.Time >= time2).ToArray();
var sellNew = sells.Where(b => b.Time >= time2).ToArray();
if (buysNew.Length>0 && buysOld.Length > 0)
{
var dpriceNew = buysNew.Sum(b => b.Value) / buysNew.Length;
var dpriceOld = buysOld.Sum(b => b.Value) / buysOld.Length;
}
return res.ToImmutableDictionary();
}
private async Task<ImmutableDictionary<TradingEvent, decimal>> GetSpeedResultantMods(INewPrice message)
{
var res = GetInitDict(1);
var buys5min = await _tradeDataProvider.GetDataFrom15MinuteWindowCache(message.Figi, Constants._15minBuyCacheKey);
var sells5min = await _tradeDataProvider.GetDataFrom15MinuteWindowCache(message.Figi, Constants._15minSellCacheKey);
var buysSpeed5min = buys5min.Sum(p => p.Value) / 300;
var sellsSpeed5min = sells5min.Sum(p => p.Value) / 300;
var buysSpeed5min = buys5min.Sum(p => p.Value) / 1500;
var sellsSpeed5min = sells5min.Sum(p => p.Value) / 1500;
var diff5min = buysSpeed5min - sellsSpeed5min;
await LogPrice(message, "speed_diff_15min", diff5min);
var orderBook = _tradeDataProvider.Orderbooks[message.Figi];
if (orderBook.Asks.Length > 3 && orderBook.Bids.Length > 3)
{
var asks = (decimal)(orderBook.Asks[0].Count + orderBook.Asks[1].Count + orderBook.Asks[2].Count);
//var asks = (decimal)(orderBook.Asks[0].Count + orderBook.Asks[1].Count + orderBook.Asks[2].Count + orderBook.Asks[3].Count);
var bids = (decimal)(orderBook.Bids[0].Count + orderBook.Bids[1].Count + orderBook.Bids[2].Count);
await LogPrice(message, "asks_lifetime", asks/ buysSpeed5min);
await LogPrice(message, "bids_lifetime", bids/ sellsSpeed5min);
}
if (diff5min < 0)
{
res[TradingEvent.UptrendStart] = Constants.BlockingCoefficient;

View File

@ -46,7 +46,7 @@ namespace KLHZ.Trader.Service.Controllers
context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
while (time1 < DateTime.UtcNow.Date)
while (time1 < DateTime.UtcNow)
{
var data = new List<TimeSeriesData>();
var data2 = new List<TimeSeriesData>();