Add logic to all models to avoid selling and immediately buying back the same security as this is considered a Wash Trade and is illegal.

This commit is contained in:
2026-03-19 19:46:19 -04:00
parent 682ba74241
commit 554f577803
7 changed files with 109 additions and 25 deletions

View File

@@ -392,6 +392,7 @@ namespace MarketData.Generator.CMMomentum
else
{
Positions slotPositions = ActivePositions[slotIndex];
List<String> slotSymbols = slotPositions.ConvertAll(x=>x.Symbol); // capture sell symbols to exclude from purchases to eliminate wash trades
SellPositions(slotPositions, TradeDate);
DisplaySales(slotPositions, TradeDate);
MDTrace.WriteLine(LogLevel.DEBUG, "********************* S E L L *********************");
@@ -401,7 +402,7 @@ namespace MarketData.Generator.CMMomentum
ActivePositions[slotIndex].Clear();
DisplayBalance();
double cashAllocation = Math.Min(CashBalance, (ActivePositions.GetExposure() + CashBalance) / HoldingPeriod); // Even out the cash allocation so that no one slot eats up all the cash
Positions positions=BuyPositions(slotIndex,TradeDate,AnalysisDate,cashAllocation,SymbolsHeld());
Positions positions=BuyPositions(slotIndex,TradeDate,AnalysisDate,cashAllocation,new List<String>(SymbolsHeld().Concat(slotSymbols)));
DisplayPurchases(positions, TradeDate);
MDTrace.WriteLine(LogLevel.DEBUG,"********************** B U Y ********************");
positions.Display();