using System; using System.Collections.Generic; using System.IO; using MarketData.Utils; using StopLimits=MarketData.Generator.Model.StopLimits; namespace MarketData.Generator.MGSHMomentum { // ***************************************************************************** public static class MGSHSessionManager { private const String SIGNATURE="MGSHSESSIONv2.00"; public static bool SaveSession(MGSHSessionParams sessionParams,String pathSessionFile) { try { if(null==pathSessionFile)return false; pathSessionFile=GetSessionFileName(pathSessionFile); FileStream outStream=new FileStream(pathSessionFile,FileMode.Create); StreamWriter streamWriter=new StreamWriter(outStream); streamWriter.WriteLine(SIGNATURE); streamWriter.WriteLine((new NVP("LastUpdated",sessionParams.LastUpdated.ToString())).ToString()); streamWriter.WriteLine((new NVP("TradeDate",sessionParams.TradeDate.ToShortDateString())).ToString()); streamWriter.WriteLine((new NVP("StartDate",sessionParams.StartDate.ToShortDateString())).ToString()); streamWriter.WriteLine((new NVP("AnalysisDate",sessionParams.AnalysisDate.ToShortDateString())).ToString()); streamWriter.WriteLine((new NVP("Cycle",sessionParams.Cycle.ToString())).ToString()); streamWriter.WriteLine((new NVP("CashBalance",sessionParams.CashBalance.ToString())).ToString()); streamWriter.WriteLine((new NVP("NonTradeableCash",sessionParams.NonTradeableCash.ToString())).ToString()); streamWriter.WriteLine((new NVP("HedgeCashBalance",sessionParams.HedgeCashBalance.ToString())).ToString()); NVPCollection configurationCollection=sessionParams.Configuration.ToNVPCollection(); streamWriter.WriteLine(configurationCollection.ToString()); List nvpCollectionsList=sessionParams.ActivePositions.ToNVPCollections(); int totalPositions=0; foreach(NVPCollections nvpCollections in nvpCollectionsList) { List nvpCollectionsStringList=nvpCollections.ToList(); totalPositions+=nvpCollectionsStringList.Count; } streamWriter.WriteLine((new NVP("TotalActivePositions",totalPositions.ToString())).ToString()); foreach(NVPCollections nvpCollections in nvpCollectionsList) { List nvpCollectionsStringList=nvpCollections.ToList(); foreach(String str in nvpCollectionsStringList) { streamWriter.WriteLine(str); } } NVPCollections allPositionsCollections=sessionParams.AllPositions.ToNVPCollections(); List nvpAllCollectionsStringList=allPositionsCollections.ToList(); streamWriter.WriteLine((new NVP("TotalPositions",nvpAllCollectionsStringList.Count.ToString())).ToString()); foreach(String str in nvpAllCollectionsStringList)streamWriter.WriteLine(str); if(null == sessionParams.StopLimits)sessionParams.StopLimits = new StopLimits(); NVPCollections allStopLimitsCollections=sessionParams.StopLimits.ToNVPCollections(); List nvpStopLimitsCollectionsStringList=allStopLimitsCollections.ToList(); streamWriter.WriteLine((new NVP("TotalStopLimits",nvpStopLimitsCollectionsStringList.Count.ToString())).ToString()); foreach(String str in nvpStopLimitsCollectionsStringList) streamWriter.WriteLine(str); if(null == sessionParams.HedgePositions)sessionParams.HedgePositions = new MGSHPositions(); NVPCollections hedgePositionsCollections=sessionParams.HedgePositions.ToNVPCollections(); List nvpHedgePositionsStringList=hedgePositionsCollections.ToList(); streamWriter.WriteLine((new NVP("TotalHedgePositions",nvpHedgePositionsStringList.Count.ToString())).ToString()); foreach(String str in nvpHedgePositionsStringList)streamWriter.WriteLine(str); NVPCollections pricingExceptionsCollections=sessionParams.PricingExceptions.ToNVPCollections(); List nvpPricingExceptionsCollectionsStringList=pricingExceptionsCollections.ToList(); streamWriter.WriteLine((new NVP("TotalPricingExceptions",nvpPricingExceptionsCollectionsStringList.Count.ToString())).ToString()); foreach(String str in nvpPricingExceptionsCollectionsStringList)streamWriter.WriteLine(str); streamWriter.Flush(); outStream.Flush(); streamWriter.Close(); outStream.Close(); outStream.Dispose(); return true; } catch(Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("{0}",exception.ToString())); return false; } } public static MGSHSessionParams RestoreSession(String pathSessionFile) { FileStream inStream =null; StreamReader streamReader=null; try { if(!SessionAvailable(pathSessionFile))return null; MGSHSessionParams sessionParams=new MGSHSessionParams(); inStream =new FileStream(pathSessionFile,FileMode.Open); streamReader=new StreamReader(inStream); String versionInfo=streamReader.ReadLine(); double version=double.Parse(Utility.BetweenString(versionInfo,"v",null)); if(version>2.00)return null; NVP lastUpdated=new NVP(streamReader.ReadLine()); NVP tradeDate=new NVP(streamReader.ReadLine()); NVP startDate=new NVP(streamReader.ReadLine()); NVP analysisDate=new NVP(streamReader.ReadLine()); NVP cycle=new NVP(streamReader.ReadLine()); NVP cashBalance=new NVP(streamReader.ReadLine()); NVP nonTradeableCash=new NVP(streamReader.ReadLine()); NVP hedgeCashBalance=new NVP(streamReader.ReadLine()); sessionParams.LastUpdated=lastUpdated.Get(); sessionParams.TradeDate=tradeDate.Get(); sessionParams.StartDate=startDate.Get(); sessionParams.AnalysisDate=analysisDate.Get(); sessionParams.Cycle=cycle.Get(); sessionParams.CashBalance=cashBalance.Get(); sessionParams.NonTradeableCash=nonTradeableCash.Get(); if(2.00==version)sessionParams.HedgeCashBalance=hedgeCashBalance.Get(); NVPCollection configurationCollection=new NVPCollection(streamReader.ReadLine()); sessionParams.Configuration=MGSHConfiguration.FromNVPCollection(configurationCollection); int totalActivePositions=(new NVP(streamReader.ReadLine())).Get(); sessionParams.ActivePositions=new MGSHActivePositions(); for(int positionIndex=0;positionIndex(); NVPCollections nvpCollections=new NVPCollections(); for(int positionIndex=0;positionIndex(); sessionParams.StopLimits=new StopLimits(); for(int stopLimitIndex=0;stopLimitIndex(); NVPCollections nvpHedgeCollections=new NVPCollections(); for(int hedgePositionIndex=0;hedgePositionIndex(); NVPCollections nvpPricingExceptionsCollections=new NVPCollections(); for(int pricingExceptionIndex=0;pricingExceptionIndex