diff --git a/KLHZ.Trader.Core/Exchange/Services/Trader.cs b/KLHZ.Trader.Core/Exchange/Services/Trader.cs index 40df5b9..52964c0 100644 --- a/KLHZ.Trader.Core/Exchange/Services/Trader.cs +++ b/KLHZ.Trader.Core/Exchange/Services/Trader.cs @@ -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> 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> 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; diff --git a/KLHZ.Trader.Service/Controllers/PlayController.cs b/KLHZ.Trader.Service/Controllers/PlayController.cs index bf493e8..12d54df 100644 --- a/KLHZ.Trader.Service/Controllers/PlayController.cs +++ b/KLHZ.Trader.Service/Controllers/PlayController.cs @@ -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(); var data2 = new List();