отключение продаж и покупок
test / deploy_trader_prod (push) Has been cancelled Details

dev
vlad zverzhkhovskiy 2025-09-10 09:26:32 +03:00
parent ac32d89ad4
commit 8b217f6cb9
5 changed files with 81 additions and 35 deletions

View File

@ -71,7 +71,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
if (isCrossing.res) if (isCrossing.res)
{ {
crossings.Add(i2); crossings.Add(i2);
if (crossings.Count == 4 || (shift + 1 == size - 1 || shift + 1 == prices.Length - 1)) if (crossings.Count == 6 || (shift + 1 == size - 1 || shift + 1 == prices.Length - 1))
{ {
if ((shift + 1 == size - 1 || shift + 1 == prices.Length - 1)) if ((shift + 1 == size - 1 || shift + 1 == prices.Length - 1))
{ {
@ -81,7 +81,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
for (int crossingShift = 1; crossingShift < crossings.Count - 2; crossingShift++) for (int crossingShift = 1; crossingShift < crossings.Count - 2; crossingShift++)
{ {
var diff = pricesForFinalComparison[crossings[crossingShift]] - pricesForFinalComparison[crossings[crossingShift + 1]]; var diff = pricesForFinalComparison[crossings[crossingShift]] - pricesForFinalComparison[crossings[crossingShift + 1]];
if (diff >= 0) if (diff >= -0.5m)
{ {
diffTotal += diff; diffTotal += diff;
} }

View File

@ -29,4 +29,30 @@ namespace KLHZ.Trader.Core.DataLayer.Entities.Orders
public OrderbookItemType ItemType { get; set; } public OrderbookItemType ItemType { get; set; }
} }
[Table("orderbook_items_reserve")]
public class OrderbookItemr: IOrderbookItem
{
[Column("id")]
public long Id { get; set; }
[Column("time")]
public DateTime Time { get; set; }
[Column("price")]
public decimal Price { get; set; }
[Column("count")]
public long Count { get; set; }
[Column("figi")]
public required string Figi { get; set; }
[Column("ticker")]
public required string Ticker { get; set; }
[Column("item_type")]
public OrderbookItemType ItemType { get; set; }
}
} }

View File

@ -16,6 +16,7 @@ namespace KLHZ.Trader.Core.DataLayer
public DbSet<ProcessedPrice> ProcessedPrices { get; set; } public DbSet<ProcessedPrice> ProcessedPrices { get; set; }
public DbSet<Candle> Candles { get; set; } public DbSet<Candle> Candles { get; set; }
public DbSet<OrderbookItem> OrderbookItems { get; set; } public DbSet<OrderbookItem> OrderbookItems { get; set; }
public DbSet<OrderbookItemr> OrderbookItemsReserve { get; set; }
public TraderDbContext(DbContextOptions<TraderDbContext> options) public TraderDbContext(DbContextOptions<TraderDbContext> options)
: base(options) : base(options)
{ {
@ -71,6 +72,15 @@ namespace KLHZ.Trader.Core.DataLayer
v => DateTime.SpecifyKind(v, DateTimeKind.Utc)); v => DateTime.SpecifyKind(v, DateTimeKind.Utc));
}); });
modelBuilder.Entity<OrderbookItemr>(entity =>
{
entity.HasKey(e1 => e1.Id);
entity.Property(e => e.Time)
.HasConversion(
v => v.ToUniversalTime(),
v => DateTime.SpecifyKind(v, DateTimeKind.Utc));
});
modelBuilder.Entity<ProcessedPrice>(entity => modelBuilder.Entity<ProcessedPrice>(entity =>
{ {
entity.HasKey(e1 => e1.Id); entity.HasKey(e1 => e1.Id);

View File

@ -98,7 +98,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
var data = await _tradeDataProvider.GetData(message.Figi, windowMaxSize); var data = await _tradeDataProvider.GetData(message.Figi, windowMaxSize);
var state = ExchangeScheduler.GetCurrentState(message.Time); var state = ExchangeScheduler.GetCurrentState(message.Time);
await ProcessClearing(data, state, message); await ProcessClearing(data, state, message);
await SellOldAssetsIfCan(message); //await SellOldAssetsIfCan(message);
ProcessOpeningStops(message, currentTime); ProcessOpeningStops(message, currentTime);
await ProcessNewPriceIMOEXF(data, state, message, windowMaxSize); await ProcessNewPriceIMOEXF(data, state, message, windowMaxSize);

View File

@ -24,11 +24,12 @@ namespace KLHZ.Trader.Service.Controllers
{ {
try try
{ {
var time = DateTime.UtcNow.AddDays(-7); var time1 = DateTime.UtcNow.AddDays(-7);
var time2 = DateTime.UtcNow.AddMinutes(-30);
using var context1 = await _dbContextFactory.CreateDbContextAsync(); using var context1 = await _dbContextFactory.CreateDbContextAsync();
context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
var data = await context1.PriceChanges var data = await context1.PriceChanges
.Where(c => c.Figi == figi && c.Time >= time) .Where(c => c.Figi == figi && c.Time >= time1 && c.Time <= time2)
.OrderBy(c => c.Time) .OrderBy(c => c.Time)
.Select(c => new NewPriceMessage() .Select(c => new NewPriceMessage()
{ {
@ -51,38 +52,47 @@ namespace KLHZ.Trader.Service.Controllers
} }
} }
//[HttpGet] [HttpGet]
//public async Task LoadTradesToHistory() public async Task LoadTradesToHistory()
//{ {
// try try
// { {
// using var context1 = await _dbContextFactory.CreateDbContextAsync(); using var context1 = await _dbContextFactory.CreateDbContextAsync();
// context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
// var data = await context1.InstrumentTrades var data = await context1.OrderbookItemsReserve
// //.Where(c => c.Figi == figi) //.Where(c => c.Figi == figi)
// //.OrderBy(c => c.BoughtAt) //.OrderBy(c => c.BoughtAt)
// .Select(c => new PriceChange() .ToArrayAsync();
// { data = data.DistinctBy(d => new { d.Figi, d.Time, d.ItemType}).ToArray();
// Figi = c.Figi, //await context1.PriceChanges.Where(p => p.Figi == figi).ExecuteDeleteAsync();
// Ticker = c.Ticker, var data2 = data.Select(d => new Core.DataLayer.Entities.Orders.OrderbookItem()
// Time = c.BoughtAt, {
// Value = c.Price, Figi = d.Figi,
// IsHistoricalData = true, Time = d.Time,
// Count = (long)c.Count, ItemType = d.ItemType,
// Direction = (int)c.Direction, Ticker = d.Ticker,
Count = d.Count,
Price = d.Price,
// }) }).ToArray();
// .ToArrayAsync(); int count = 0;
// data = data.DistinctBy(d => new { d.Figi, d.Time }).ToArray(); foreach(var mess in data2)
// //await context1.PriceChanges.Where(p => p.Figi == figi).ExecuteDeleteAsync(); {
// await context1.PriceChanges.AddRangeAsync(data); count++;
// await context1.SaveChangesAsync(); await context1.OrderbookItems.AddAsync(mess);
// } if (count > 10000)
// catch (Exception ex) {
// { await context1.SaveChangesAsync();
count = 0;
}
}
await context1.SaveChangesAsync();
}
catch (Exception ex)
{
// } }
//} }
////[HttpGet] ////[HttpGet]
//public async Task LoadTradesToHistory(string figi) //public async Task LoadTradesToHistory(string figi)
//{ //{