Fix ROI
This commit is contained in:
@@ -46,7 +46,7 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
|
||||
// Set up reminder for daily snapshots using precise timing
|
||||
var now = DateTime.UtcNow;
|
||||
|
||||
|
||||
// Daily reminder - runs at midnight (00:00 UTC)
|
||||
var nextDailyTime = CandleHelpers.GetNextExpectedCandleTime(Timeframe.OneDay, now);
|
||||
var timeUntilNextDay = nextDailyTime - now;
|
||||
@@ -98,7 +98,7 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
_state.State.TotalActiveStrategies = totalActiveStrategies;
|
||||
_state.State.TotalPlatformVolume = totalVolume;
|
||||
_state.State.TotalPlatformPnL = totalPnL;
|
||||
_state.State.TotalOpenInterest = totalOpenInterest;
|
||||
_state.State.OpenInterest = totalOpenInterest;
|
||||
_state.State.TotalPositionCount = totalPositionCount;
|
||||
_state.State.LastUpdated = DateTime.UtcNow;
|
||||
_state.State.HasPendingChanges = false;
|
||||
@@ -225,7 +225,7 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
|
||||
public Task<decimal> GetTotalOpenInterest()
|
||||
{
|
||||
return Task.FromResult(_state.State.TotalOpenInterest);
|
||||
return Task.FromResult(_state.State.OpenInterest);
|
||||
}
|
||||
|
||||
public Task<int> GetTotalPositionCountAsync()
|
||||
@@ -282,21 +282,15 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
try
|
||||
{
|
||||
_logger.LogInformation("Position closed: {PositionId} for {Ticker} with PnL: {PnL}",
|
||||
evt.PositionId, evt.Ticker, evt.RealizedPnL);
|
||||
evt.PositionIdentifier, evt.Ticker, evt.RealizedPnL);
|
||||
|
||||
// Validate event data
|
||||
if (evt == null || evt.PositionId == Guid.Empty || evt.Ticker == Ticker.Unknown)
|
||||
if (evt == null || evt.PositionIdentifier == Guid.Empty || evt.Ticker == Ticker.Unknown)
|
||||
{
|
||||
_logger.LogWarning("Invalid PositionClosedEvent received: {Event}", evt);
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure position count doesn't go negative
|
||||
if (_state.State.TotalPositionCount > 0)
|
||||
{
|
||||
_state.State.TotalPositionCount--;
|
||||
}
|
||||
|
||||
_state.State.TotalPlatformVolume += evt.Volume;
|
||||
_state.State.TotalPlatformPnL += evt.RealizedPnL;
|
||||
|
||||
@@ -308,9 +302,9 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
}
|
||||
|
||||
_state.State.VolumeByAsset[asset] += evt.Volume;
|
||||
|
||||
|
||||
// Update open interest (subtract the closed position's volume)
|
||||
_state.State.TotalOpenInterest = Math.Max(0, _state.State.TotalOpenInterest - evt.Volume);
|
||||
_state.State.OpenInterest = Math.Max(0, _state.State.OpenInterest - evt.Volume);
|
||||
|
||||
_state.State.HasPendingChanges = true;
|
||||
await _state.WriteStateAsync();
|
||||
@@ -321,17 +315,17 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
}
|
||||
}
|
||||
|
||||
public async Task OnTradeExecutedAsync(TradeExecutedEvent evt)
|
||||
public async Task OnPositionOpenAsync(PositionOpenEvent evt)
|
||||
{
|
||||
try
|
||||
{
|
||||
_logger.LogInformation("Trade executed: {TradeId} for {Ticker} with volume: {Volume}",
|
||||
evt.TradeId, evt.Ticker, evt.Volume);
|
||||
_logger.LogInformation("Position opened: {PositionIdentifier} for {Ticker} with volume: {Volume}",
|
||||
evt.PositionIdentifier, evt.Ticker, evt.Volume);
|
||||
|
||||
// Validate event data
|
||||
if (evt == null || evt.Ticker == Ticker.Unknown || evt.Volume <= 0)
|
||||
{
|
||||
_logger.LogWarning("Invalid TradeExecutedEvent received: {Event}", evt);
|
||||
_logger.LogWarning("Invalid PositionOpenEvent received: {Event}", evt);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -344,18 +338,20 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
{
|
||||
_state.State.VolumeByAsset[asset] = 0;
|
||||
}
|
||||
|
||||
_state.State.VolumeByAsset[asset] += evt.Volume;
|
||||
|
||||
// Update open interest and position count
|
||||
// Since this is called only when position is fully open on broker, we always increase counts
|
||||
_state.State.TotalPositionCount++;
|
||||
_state.State.TotalOpenInterest += evt.Volume;
|
||||
_state.State.OpenInterest += evt.Volume;
|
||||
|
||||
// Update position count by asset
|
||||
if (!_state.State.PositionCountByAsset.ContainsKey(asset))
|
||||
{
|
||||
_state.State.PositionCountByAsset[asset] = 0;
|
||||
}
|
||||
|
||||
_state.State.PositionCountByAsset[asset]++;
|
||||
|
||||
// Update position count by direction
|
||||
@@ -363,13 +359,8 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
{
|
||||
_state.State.PositionCountByDirection[evt.Direction] = 0;
|
||||
}
|
||||
_state.State.PositionCountByDirection[evt.Direction]++;
|
||||
|
||||
// Update PnL if provided
|
||||
if (evt.PnL != 0)
|
||||
{
|
||||
_state.State.TotalPlatformPnL += evt.PnL;
|
||||
}
|
||||
_state.State.PositionCountByDirection[evt.Direction]++;
|
||||
|
||||
// Update fees if provided
|
||||
if (evt.Fee > 0)
|
||||
@@ -409,7 +400,7 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
_state.State.TotalActiveStrategies24hAgo = _state.State.TotalActiveStrategies;
|
||||
_state.State.TotalPlatformPnL24hAgo = _state.State.TotalPlatformPnL;
|
||||
_state.State.TotalPlatformVolume24hAgo = _state.State.TotalPlatformVolume;
|
||||
_state.State.TotalOpenInterest24hAgo = _state.State.TotalOpenInterest;
|
||||
_state.State.TotalOpenInterest24hAgo = _state.State.OpenInterest;
|
||||
_state.State.TotalPositionCount24hAgo = _state.State.TotalPositionCount;
|
||||
_state.State.TotalPlatformFees24hAgo = _state.State.TotalPlatformFees;
|
||||
|
||||
@@ -421,7 +412,7 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
TotalStrategies = _state.State.TotalActiveStrategies,
|
||||
TotalVolume = _state.State.TotalPlatformVolume,
|
||||
TotalPnL = _state.State.TotalPlatformPnL,
|
||||
TotalOpenInterest = _state.State.TotalOpenInterest,
|
||||
TotalOpenInterest = _state.State.OpenInterest,
|
||||
TotalPositionCount = _state.State.TotalPositionCount,
|
||||
TotalFees = _state.State.TotalPlatformFees
|
||||
};
|
||||
@@ -462,7 +453,7 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
TotalPlatformPnL = state.TotalPlatformPnL,
|
||||
TotalPlatformVolume = state.TotalPlatformVolume,
|
||||
TotalPlatformVolumeLast24h = state.TotalPlatformVolume - state.TotalPlatformVolume24hAgo,
|
||||
TotalOpenInterest = state.TotalOpenInterest,
|
||||
TotalOpenInterest = state.OpenInterest,
|
||||
TotalPositionCount = state.TotalPositionCount,
|
||||
TotalPlatformFees = state.TotalPlatformFees,
|
||||
|
||||
@@ -471,7 +462,7 @@ public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
|
||||
StrategiesChange24h = state.TotalActiveStrategies - state.TotalActiveStrategies24hAgo,
|
||||
PnLChange24h = state.TotalPlatformPnL - state.TotalPlatformPnL24hAgo,
|
||||
VolumeChange24h = state.TotalPlatformVolume - state.TotalPlatformVolume24hAgo,
|
||||
OpenInterestChange24h = state.TotalOpenInterest - state.TotalOpenInterest24hAgo,
|
||||
OpenInterestChange24h = state.OpenInterest - state.TotalOpenInterest24hAgo,
|
||||
PositionCountChange24h = state.TotalPositionCount - state.TotalPositionCount24hAgo,
|
||||
FeesChange24h = state.TotalPlatformFees - state.TotalPlatformFees24hAgo,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user