отключение продаж и покупок
test / deploy_trader_prod (push) Has been cancelled
Details
test / deploy_trader_prod (push) Has been cancelled
Details
parent
ac32d89ad4
commit
8b217f6cb9
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
//{
|
//{
|
||||||
|
|
Loading…
Reference in New Issue