diff --git a/MarketDataLib/Generator/CMMomentum/CMBacktest.cs b/MarketDataLib/Generator/CMMomentum/CMBacktest.cs index a135d4a..b0c48be 100644 --- a/MarketDataLib/Generator/CMMomentum/CMBacktest.cs +++ b/MarketDataLib/Generator/CMMomentum/CMBacktest.cs @@ -449,8 +449,12 @@ namespace MarketData.Generator.CMMomentum // *************************************************************************************************************************************************** // **************************************************************** S E L L P O S I T I O N S ***************************************************** // *************************************************************************************************************************************************** -// These make the monthly process a bit easier to read - private void DisplaySales(Positions positions,DateTime tradeDate) + /// + /// This makes for easier reading of the sales + /// + /// + /// + private static void DisplaySales(Positions positions,DateTime tradeDate) { MDTrace.WriteLine(LogLevel.DEBUG,"********* S E L L S *********"); foreach (Position position in positions) @@ -459,12 +463,17 @@ namespace MarketData.Generator.CMMomentum } } - private void DisplayPurchases(Positions positions, DateTime tradeDate) + /// + /// This makes for easier reading of the purchases + /// + /// + /// + private static void DisplayPurchases(Positions positions, DateTime tradeDate) { MDTrace.WriteLine(LogLevel.DEBUG,"********* B U Y S *********"); foreach (Position position in positions) { - MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Buy {0} {1} @ {2} on {3}",position.Symbol,Utility.FormatNumber(position.Shares,3),Utility.FormatCurrency(position.PurchasePrice,2),TradeDate.ToShortDateString())); + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Buy {0} {1} @ {2} on {3}",position.Symbol,Utility.FormatNumber(position.Shares,3),Utility.FormatCurrency(position.PurchasePrice,2),tradeDate.ToShortDateString())); } } diff --git a/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs b/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs index 75461d2..7cbba41 100644 --- a/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs +++ b/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs @@ -652,6 +652,7 @@ namespace MarketData.Generator.CMTrend return result; } ActivePositions.Add(positions); + DisplayPurchases(positions, TradeDate); CashBalance-=positions.GetExposure(); } DisplayRealtimeBlotter(TradeDate); @@ -753,6 +754,7 @@ namespace MarketData.Generator.CMTrend return result; } ActivePositions.Add(positions); + DisplayPurchases(positions, TradeDate); CashBalance-=positions.GetExposure(); } MDTrace.WriteLine(LogLevel.DEBUG,"\n"); @@ -884,7 +886,8 @@ namespace MarketData.Generator.CMTrend private void ManageOpenPositions(DateTime tradeDate) { if(0==ActivePositions.Count) return; - List closedPositions=new List(); + Positions closedPositions = new Positions(); + // List closedPositions=new List(); foreach(Position position in ActivePositions) { Price price=GBPriceCache.GetInstance().GetPrice(position.Symbol,tradeDate); @@ -948,6 +951,7 @@ namespace MarketData.Generator.CMTrend } if(0!=closedPositions.Count) { + DisplaySales(closedPositions, TradeDate); MDTrace.WriteLine(LogLevel.DEBUG,"********************* S E L L *********************"); foreach(Position closedPosition in closedPositions) { @@ -1788,5 +1792,33 @@ namespace MarketData.Generator.CMTrend sessionParams.NonTradeableCash=NonTradeableCash; return CMTSessionManager.SaveSession(sessionParams,backupFileName); } + + /// + /// This makes for easier reading of the sales + /// + /// + /// + private static void DisplaySales(Positions positions,DateTime tradeDate) + { + MDTrace.WriteLine(LogLevel.DEBUG,"********* S E L L S *********"); + foreach (Position position in positions) + { + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Sell {0} {1} @ {2} on {3}",position.Symbol,Utility.FormatNumber(position.Shares,3),Utility.FormatCurrency(position.CurrentPrice,2),tradeDate.ToShortDateString())); + } + } + + /// + /// This makes for easier reading of the purchases + /// + /// + /// + private static void DisplayPurchases(Positions positions, DateTime tradeDate) + { + MDTrace.WriteLine(LogLevel.DEBUG,"********* B U Y S *********"); + foreach (Position position in positions) + { + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Buy {0} {1} @ {2} on {3}",position.Symbol,Utility.FormatNumber(position.Shares,3),Utility.FormatCurrency(position.PurchasePrice,2),tradeDate.ToShortDateString())); + } + } } } diff --git a/MarketDataLib/Generator/MGSHMomentum/MGSHBacktest.cs b/MarketDataLib/Generator/MGSHMomentum/MGSHBacktest.cs index e040d0f..6102bf9 100644 --- a/MarketDataLib/Generator/MGSHMomentum/MGSHBacktest.cs +++ b/MarketDataLib/Generator/MGSHMomentum/MGSHBacktest.cs @@ -497,6 +497,7 @@ namespace MarketData.Generator.MGSHMomentum MDTrace.WriteLine(LogLevel.DEBUG,String.Format("********** Insufficient funds to make additional purchases.**************")); return; } + DisplayPurchases(positions,TradeDate); ActivePositions.Add(slotIndex,positions); CashBalance-=positions.Exposure; SetInitialStopLimitsForNewPositions(TradeDate, positions); @@ -511,6 +512,7 @@ namespace MarketData.Generator.MGSHMomentum if(!Configuration.KeepSlotPositions) // if we are not configured to KeepSlotPositions then don't sell anything just buy to the max positions allowed for the slot { SellPositions(slotPositions,TradeDate); + DisplaySales(slotPositions, TradeDate); MDTrace.WriteLine(LogLevel.DEBUG,"********************* S E L L *********************"); slotPositions.Display(); AllPositions.Add(slotPositions); @@ -532,6 +534,7 @@ namespace MarketData.Generator.MGSHMomentum MDTrace.WriteLine(LogLevel.DEBUG,"********************** B U Y ********************"); if(!ActivePositions.ContainsKey(slotIndex))ActivePositions.Add(slotIndex, positions); else ActivePositions[slotIndex].AddRange(positions); + DisplayPurchases(positions, TradeDate); CashBalance-=positions.Exposure; SetInitialStopLimitsForNewPositions(TradeDate, positions); ActivePositions[slotIndex].Display(); @@ -1398,5 +1401,35 @@ namespace MarketData.Generator.MGSHMomentum sessionParams.HedgeCashBalance=HedgeCashBalance; return MGSHSessionManager.SaveSession(sessionParams,backupFileName); } + + /// + /// This makes for easier reading of the sales + /// + /// + /// + private static void DisplaySales(MGSHPositions positions,DateTime tradeDate) + { + if(null == positions || 0==positions.Count)return; + MDTrace.WriteLine(LogLevel.DEBUG,"********* S E L L S *********"); + foreach (MGSHPosition position in positions) + { + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Sell {0} {1} @ {2} on {3}",position.Symbol,Utility.FormatNumber(position.Shares,3),Utility.FormatCurrency(position.CurrentPrice,2),tradeDate.ToShortDateString())); + } + } + + /// + /// This makes for easier reading of the purchases + /// + /// + /// + private static void DisplayPurchases(MGSHPositions positions, DateTime tradeDate) + { + if(null == positions || 0==positions.Count)return; + MDTrace.WriteLine(LogLevel.DEBUG,"********* B U Y S *********"); + foreach (MGSHPosition position in positions) + { + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Buy {0} {1} @ {2} on {3}",position.Symbol,Utility.FormatNumber(position.Shares,3),Utility.FormatCurrency(position.PurchasePrice,2),tradeDate.ToShortDateString())); + } + } } } diff --git a/MarketDataLib/Generator/Momentum/Backtest.cs b/MarketDataLib/Generator/Momentum/Backtest.cs index 419c977..69ad222 100644 --- a/MarketDataLib/Generator/Momentum/Backtest.cs +++ b/MarketDataLib/Generator/Momentum/Backtest.cs @@ -228,6 +228,7 @@ namespace MarketData.Generator.Momentum MDTrace.WriteLine(LogLevel.DEBUG, "********************* S E L L *********************"); slotPositions.Display(); AllPositions.Add(slotPositions); + DisplaySales(slotPositions, TradeDate); CashBalance += slotPositions.MarketValue; ActivePositions[slotIndex].Clear(); } @@ -372,6 +373,7 @@ namespace MarketData.Generator.Momentum } positions.Display(); ActivePositions.Add(slotIndex,positions); + DisplayPurchases(positions,TradeDate); CashBalance-=positions.Exposure; DisplayBalance(); } @@ -382,6 +384,7 @@ namespace MarketData.Generator.Momentum MDTrace.WriteLine(LogLevel.DEBUG,"********************* S E L L *********************"); slotPositions.Display(); AllPositions.Add(slotPositions); + DisplaySales(slotPositions, TradeDate); CashBalance+=slotPositions.MarketValue; ActivePositions[slotIndex].Clear(); DisplayBalance(); @@ -398,6 +401,7 @@ namespace MarketData.Generator.Momentum break; } ActivePositions[slotIndex]=positions; + DisplayPurchases(positions, TradeDate); CashBalance-=positions.Exposure; DisplayBalance(); } @@ -415,6 +419,7 @@ namespace MarketData.Generator.Momentum MDTrace.WriteLine(LogLevel.DEBUG,"********************* S E L L ********************"); slotPositions.Display(); AllPositions.Add(slotPositions); + DisplaySales(slotPositions, TradeDate); CashBalance+=slotPositions.MarketValue; ActivePositions[slotIndex].Clear(); } @@ -720,5 +725,33 @@ namespace MarketData.Generator.Momentum sessionParams.NonTradeableCash = NonTradeableCash; return MGSessionManager.SaveSession(sessionParams,backupFileName); } + + /// + /// This makes for easier reading of the sales + /// + /// + /// + private static void DisplaySales(Positions positions,DateTime tradeDate) + { + MDTrace.WriteLine(LogLevel.DEBUG,"********* S E L L S *********"); + foreach (Position position in positions) + { + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Sell {0} {1} @ {2} on {3}",position.Symbol,Utility.FormatNumber(position.Shares,3),Utility.FormatCurrency(position.CurrentPrice,2),tradeDate.ToShortDateString())); + } + } + + /// + /// This makes for easier reading of the purchases + /// + /// + /// + private static void DisplayPurchases(Positions positions, DateTime tradeDate) + { + MDTrace.WriteLine(LogLevel.DEBUG,"********* B U Y S *********"); + foreach (Position position in positions) + { + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Buy {0} {1} @ {2} on {3}",position.Symbol,Utility.FormatNumber(position.Shares,3),Utility.FormatCurrency(position.PurchasePrice,2),tradeDate.ToShortDateString())); + } + } } }