убрал проверку времени для сброса актива
test / deploy_trader_prod (push) Successful in 5m24s Details

dev
vlad zverzhkhovskiy 2025-09-17 09:53:56 +03:00
parent 61d63ee4f3
commit bcc084c49c
3 changed files with 59 additions and 51 deletions

View File

@ -15,7 +15,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
{
return ValueAmplitudePosition.UpperThen30Decil;
}
else if (value < fftData.Mediana)
else if (value < fftData.Mediana && System.Math.Sign(value2)>=0)
{
return ValueAmplitudePosition.LowerThenMediana;
}

View File

@ -92,7 +92,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
var currentTime = message.IsHistoricalData ? message.Time : DateTime.UtcNow;
var position = ValueAmplitudePosition.None;
var fft = await _tradeDataProvider.GetFFtResult(message.Figi);
var step = message.IsHistoricalData ? 90 : 10;
var step = message.IsHistoricalData ? 5 : 5;
if (fft.IsEmpty || (currentTime - fft.LastTime).TotalSeconds > step)
{
if (data.isFullIntervalExists)
@ -190,7 +190,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
try
{
if (message.Figi == "FUTIMOEXF000")
if (message.Figi == "FUTIMOEXF000" && message.Direction==1)
{
ProcessStops(message, currentTime);
var windowMaxSize = 2000;
@ -227,7 +227,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
var profit = TradingCalculator.CaclProfit(asset.BoughtPrice, message.Value,
GetComission(assetType), GetLeverage(message.Figi, asset.Count < 0), asset.Count < 0);
var stoppingKey = message.Figi + asset.AccountId;
if (message.Time - asset.BoughtAt > TimeSpan.FromMinutes(4) && profit < -66m)
if (profit < -66m)
{
var command = new TradeCommand()
{
@ -250,10 +250,10 @@ namespace KLHZ.Trader.Core.Exchange.Services
}
private async Task<TradingEvent> CheckByWindowAverageMean((DateTime[] timestamps, decimal[] prices) data,
INewPrice message, int windowMaxSize)
INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullStep = 0m, decimal uptrendEndingDetectionMeanfullStep = 3m)
{
var resultMoveAvFull = MovingAverage.CheckByWindowAverageMean(data.timestamps, data.prices,
windowMaxSize, 30, 180, TimeSpan.FromSeconds(20), -1m, 2m);
windowMaxSize, 30, 180, TimeSpan.FromSeconds(20), uptrendStartingDetectionMeanfullStep, uptrendEndingDetectionMeanfullStep);
if (resultMoveAvFull.bigWindowAv != 0)
{
await LogPrice(message, Constants.BigWindowCrossingAverageProcessor, resultMoveAvFull.bigWindowAv);
@ -262,6 +262,14 @@ namespace KLHZ.Trader.Core.Exchange.Services
return resultMoveAvFull.events;
}
private async Task<TradingEvent> CheckByWindowAverageMeanNolog((DateTime[] timestamps, decimal[] prices) data,
INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullStep = 0m, decimal uptrendEndingDetectionMeanfullStep = 3m)
{
var resultMoveAvFull = MovingAverage.CheckByWindowAverageMean(data.timestamps, data.prices,
windowMaxSize, 30, 180, TimeSpan.FromSeconds(20), uptrendStartingDetectionMeanfullStep, uptrendEndingDetectionMeanfullStep);
return resultMoveAvFull.events;
}
private async Task<TradingEvent> CheckByWindowAverageMeanForShotrs((DateTime[] timestamps, decimal[] prices) data,
INewPrice message, int windowMaxSize)
{
@ -351,17 +359,21 @@ namespace KLHZ.Trader.Core.Exchange.Services
var dsell = (sells / su - 0.5m) * 2;
var mavTask = CheckByWindowAverageMean(data, message, windowMaxSize);
var mavTask = CheckByWindowAverageMean(data, message, windowMaxSize, -1, 2m);
var mavTaskEnds = CheckByWindowAverageMeanNolog(data, message, windowMaxSize, -1, 1m);
var mavTaskShorts = CheckByWindowAverageMeanForShotrs(data, message, windowMaxSize);
var ltTask = CheckByLocalTrends(data, message, windowMaxSize);
var areasTask = GetAreasRelation(data, message);
var positionTask = CheckPosition(message);
var trendTask = CalcTrendDiff(message);
await Task.WhenAll(mavTask, ltTask, areasTask, positionTask, trendTask, mavTaskShorts);
var ends = mavTaskEnds.Result & TradingEvent.UptrendEnd;
await Task.WhenAll(mavTask, ltTask, areasTask, positionTask, trendTask, mavTaskShorts, mavTaskEnds);
var assetType = _tradeDataProvider.GetAssetTypeByFigi(message.Figi);
var res = mavTask.Result | ltTask.Result;
res |= ends;
if ((res & TradingEvent.UptrendStart) == TradingEvent.UptrendStart
&& !LongOpeningStops.ContainsKey(message.Figi)
&& trendTask.Result.HasValue
@ -409,8 +421,6 @@ namespace KLHZ.Trader.Core.Exchange.Services
await LogDeclision(DeclisionTradeAction.OpenLong, message);
}
if ((res & TradingEvent.UptrendEnd) == TradingEvent.UptrendEnd)
{
//if (dsell < 0.1m)
{
if (!message.IsHistoricalData && BotModeSwitcher.CanSell())
{
@ -460,8 +470,6 @@ namespace KLHZ.Trader.Core.Exchange.Services
await LogDeclision(DeclisionTradeAction.CloseLong, message);
}
}
if ((mavTaskShorts.Result & TradingEvent.UptrendEnd) == TradingEvent.UptrendEnd)
{
if (trendTask.Result.HasValue && trendTask.Result.Value < -4)

View File

@ -34,7 +34,7 @@ namespace KLHZ.Trader.Service.Controllers
//var figi1 = "BBG004730N88";
var figi2 = "BBG004730N88";
//var figi2 = "FUTIMOEXF000";
var time1 = DateTime.UtcNow.AddDays(-16.5);
var time1 = DateTime.UtcNow.AddDays(-17);
//var time2 = DateTime.UtcNow.AddMinutes(18);
using var context1 = await _dbContextFactory.CreateDbContextAsync();
context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;