Fix MGSH Position Edit/Close for Hedge

This commit is contained in:
2025-08-04 22:15:35 -04:00
parent 0b717a5e8e
commit e66352595e
2 changed files with 16 additions and 6 deletions

View File

@@ -103,10 +103,12 @@ namespace MarketData.Generator.MGSHMomentum
if(!BackupSession())return false;
MGSHPositions activePositions = ActivePositions.GetPositions();
MGSHPosition position = activePositions.Where(x => x.Symbol.Equals(symbol) && x.PurchaseDate.Equals(purchaseDate)).FirstOrDefault();
bool isHedgePosition=false;
if (null == position) // if it's not in the active positions then look in the hedge positions
{
MGSHPositions hedgePositions = HedgePositions;
position = hedgePositions.Where(x => x.Symbol.Equals(symbol) && x.PurchaseDate.Equals(purchaseDate)).FirstOrDefault();
isHedgePosition=true;
if (null == position)
{
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Cannot locate position for symbol '{0}' purchased on {1}.", symbol, purchaseDate.ToShortDateString()));
@@ -120,7 +122,8 @@ namespace MarketData.Generator.MGSHMomentum
{
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Adjusting Cash for Position for symbol '{0}' purchased on {1}. Original Price: {2} New Price: {3} Change in Cash: {4}", symbol, purchaseDate.ToShortDateString(), Utility.FormatCurrency(position.PurchasePrice), Utility.FormatCurrency(purchasePrice), Utility.FormatCurrency((position.PurchasePrice - purchasePrice) * position.Shares)));
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Adjusting R for Position for symbol '{0}' purchased on {1}. Original R: {2} New R: {3} ", symbol, purchaseDate.ToShortDateString(), Utility.FormatNumber(position.R, 2), Utility.FormatNumber(position.PositionRiskPercentDecimal * purchasePrice)));
CashBalance += (position.PurchasePrice - purchasePrice) * position.Shares;
if(isHedgePosition)HedgeCashBalance += (position.PurchasePrice - purchasePrice) * position.Shares;
else CashBalance += (position.PurchasePrice - purchasePrice) * position.Shares;
position.Comment = (String.IsNullOrEmpty(position.Comment) ? "" : position.Comment + ".") + String.Format("Price changed on {0} from {1} to {2}", DateTime.Now.ToShortDateString(), Utility.FormatCurrency(position.PurchasePrice), Utility.FormatCurrency(purchasePrice));
position.PurchasePrice = purchasePrice;
}
@@ -185,9 +188,16 @@ namespace MarketData.Generator.MGSHMomentum
position.SellDate=sellDate;
position.CurrentPrice=price;
position.Comment="Manual close.";
CashBalance+=position.MarketValue;
if(!isHedgePosition)ActivePositions.Remove(position);
else HedgePositions.Remove(position);
if(isHedgePosition)
{
HedgeCashBalance+=position.MarketValue;
HedgePositions.Remove(position);
}
else
{
CashBalance+=position.MarketValue;
ActivePositions.Remove(position);
}
AllPositions.Add(position);
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Position for symbol '{0}' purchased on {1} is now closed.",symbol,purchaseDate.ToShortDateString()));
SaveSession();