Смена источника данных + обновление стратегии
test / deploy_trader_prod (push) Successful in 1m57s
Details
test / deploy_trader_prod (push) Successful in 1m57s
Details
parent
f7e6b8080b
commit
8bfcb1968d
|
@ -5,8 +5,8 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache
|
|||
{
|
||||
public class PriceHistoryCacheUnit2 : IPriceHistoryCacheUnit
|
||||
{
|
||||
public const int CacheMaxLength = 500;
|
||||
private const int _arrayMaxLength = 1500;
|
||||
public const int CacheMaxLength = 1500;
|
||||
private const int _arrayMaxLength = 5000;
|
||||
|
||||
public string Figi { get; init; }
|
||||
|
||||
|
|
|
@ -95,7 +95,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
await ProcessDeferredLongCloses(message, currentTime);
|
||||
if (message.Figi == "FUTIMOEXF000")
|
||||
{
|
||||
var windowMaxSize = 100;
|
||||
var windowMaxSize = 1000;
|
||||
|
||||
var data = await _tradeDataProvider.GetData(message.Figi, windowMaxSize);
|
||||
var state = ExchangeScheduler.GetCurrentState(message.Time);
|
||||
|
@ -182,26 +182,80 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
|
||||
if (max - min < 15 && fullData.prices.Last() - fullData.prices.First() < 4)
|
||||
{
|
||||
var trade = new DeferredTrade()
|
||||
if (!message.IsHistoricalData && BotModeSwitcher.CanPurchase())
|
||||
{
|
||||
Figi = message.Figi,
|
||||
Price = message.Value,
|
||||
Time = message.Time.AddSeconds(15)
|
||||
};
|
||||
DeferredLongOpens[message.Figi] = trade;
|
||||
var accounts = _tradeDataProvider.Accounts
|
||||
.Where(a => !a.Value.Assets.ContainsKey(message.Figi))
|
||||
.ToArray();
|
||||
foreach (var acc in accounts)
|
||||
{
|
||||
if (IsBuyAllowed(acc.Value, message.Value, 1, _accountCashPartFutures, _accountCashPart))
|
||||
{
|
||||
if (RandomNumberGenerator.GetInt32(100) > 50)
|
||||
{
|
||||
await _dataBus.Broadcast(new TradeCommand()
|
||||
{
|
||||
AccountId = acc.Value.AccountId,
|
||||
Figi = message.Figi,
|
||||
CommandType = Contracts.Messaging.Dtos.Enums.TradeCommandType.MarketBuy,
|
||||
Count = 1,
|
||||
RecomendPrice = null,
|
||||
});
|
||||
}
|
||||
|
||||
await LogDeclision(DeclisionTradeAction.OpenLong, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await LogDeclision(DeclisionTradeAction.OpenLong, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((res & TradingEvent.UptrendEnd) == TradingEvent.UptrendEnd)
|
||||
{
|
||||
var trade = new DeferredTrade()
|
||||
var assetType = _tradeDataProvider.GetAssetTypeByFigi(message.Figi);
|
||||
if (!message.IsHistoricalData && BotModeSwitcher.CanSell())
|
||||
{
|
||||
Figi = message.Figi,
|
||||
Price = message.Value,
|
||||
Time = message.Time.AddSeconds(15)
|
||||
};
|
||||
DeferredLongCloses[message.Figi] = trade;
|
||||
var assetsForClose = _tradeDataProvider.Accounts
|
||||
.SelectMany(a => a.Value.Assets.Values)
|
||||
.Where(a => a.Figi == message.Figi && a.Count > 0)
|
||||
.ToArray();
|
||||
foreach (var asset in assetsForClose)
|
||||
{
|
||||
var profit = 0m;
|
||||
|
||||
if (assetType == AssetType.Common && asset.Count > 0)
|
||||
{
|
||||
profit = TradingCalculator.CaclProfit(asset.BoughtPrice, message.Value,
|
||||
GetComission(assetType), 1, false);
|
||||
}
|
||||
if (assetType == AssetType.Futures)
|
||||
{
|
||||
profit = TradingCalculator.CaclProfit(asset.BoughtPrice, message.Value,
|
||||
GetComission(assetType), GetLeverage(message.Figi, asset.Count < 0), asset.Count < 0);
|
||||
}
|
||||
if (profit > 0)
|
||||
{
|
||||
await _dataBus.Broadcast(new TradeCommand()
|
||||
{
|
||||
AccountId = asset.AccountId,
|
||||
Figi = message.Figi,
|
||||
CommandType = Contracts.Messaging.Dtos.Enums.TradeCommandType.MarketSell,
|
||||
Count = (long)asset.Count,
|
||||
RecomendPrice = null,
|
||||
});
|
||||
await LogDeclision(DeclisionTradeAction.CloseLong, message, profit);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await LogDeclision(DeclisionTradeAction.CloseLong, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -392,7 +392,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
{
|
||||
buffer2.Add(dec);
|
||||
}
|
||||
if ((buffer1.Count + buffer2.Count) > 10000 || _forSave.Reader.Count == 0)
|
||||
if ((buffer1.Count + buffer2.Count) > 50000 || _forSave.Reader.Count == 0)
|
||||
{
|
||||
using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using KLHZ.Trader.Core.Contracts.Messaging.Dtos;
|
||||
using KLHZ.Trader.Core.Contracts.Messaging.Interfaces;
|
||||
using KLHZ.Trader.Core.DataLayer;
|
||||
using KLHZ.Trader.Core.DataLayer.Entities.Prices;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
|
@ -24,7 +25,7 @@ namespace KLHZ.Trader.Service.Controllers
|
|||
{
|
||||
try
|
||||
{
|
||||
var time = DateTime.UtcNow.AddHours(-4);
|
||||
var time = DateTime.UtcNow.AddDays(-40);
|
||||
using var context1 = await _dbContextFactory.CreateDbContextAsync();
|
||||
context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
|
||||
var data = await context1.PriceChanges
|
||||
|
@ -50,5 +51,34 @@ namespace KLHZ.Trader.Service.Controllers
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task LoadTradesToHistory(string figi)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var context1 = await _dbContextFactory.CreateDbContextAsync();
|
||||
context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
|
||||
var data = await context1.InstrumentTrades
|
||||
.Where(c => c.Figi == figi)
|
||||
.OrderBy(c => c.BoughtAt)
|
||||
.Select(c => new PriceChange()
|
||||
{
|
||||
Figi = figi,
|
||||
Ticker = c.Ticker,
|
||||
Time = c.BoughtAt,
|
||||
Value = c.Price,
|
||||
IsHistoricalData = true
|
||||
})
|
||||
.ToArrayAsync();
|
||||
await context1.PriceChanges.Where(p => p.Figi == figi).ExecuteDeleteAsync();
|
||||
await context1.PriceChanges.AddRangeAsync(data);
|
||||
await context1.SaveChangesAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue