165 lines
7.1 KiB
C#
165 lines
7.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using System.Runtime.Serialization.Formatters.Binary;
|
|
using MarketData.Utils;
|
|
|
|
namespace MarketData.Generator.Momentum
|
|
{
|
|
// *****************************************************************************
|
|
public class MGSessionManager
|
|
{
|
|
public bool SaveSession(MGSessionParams 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("SESSIONv1.00");
|
|
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());
|
|
|
|
NVPCollection configurationCollection=sessionParams.Configuration.ToNVPCollection();
|
|
streamWriter.WriteLine(configurationCollection.ToString());
|
|
List<NVPCollections> nvpCollectionsList=sessionParams.ActivePositions.ToNVPCollections();
|
|
int totalPositions=0;
|
|
foreach(NVPCollections nvpCollections in nvpCollectionsList)
|
|
{
|
|
List<String> nvpCollectionsStringList=nvpCollections.ToList();
|
|
totalPositions+=nvpCollectionsStringList.Count;
|
|
}
|
|
streamWriter.WriteLine((new NVP("TotalActivePositions",totalPositions.ToString())).ToString());
|
|
foreach(NVPCollections nvpCollections in nvpCollectionsList)
|
|
{
|
|
List<String> nvpCollectionsStringList=nvpCollections.ToList();
|
|
foreach(String str in nvpCollectionsStringList)
|
|
{
|
|
streamWriter.WriteLine(str);
|
|
}
|
|
}
|
|
NVPCollections allPositionsCollections=sessionParams.AllPositions.ToNVPCollections();
|
|
List<String> nvpAllCollectionsStringList=allPositionsCollections.ToList();
|
|
streamWriter.WriteLine((new NVP("TotalPositions",nvpAllCollectionsStringList.Count.ToString())).ToString());
|
|
foreach(String str in nvpAllCollectionsStringList)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 MGSessionParams RestoreSession(String pathSessionFile)
|
|
{
|
|
FileStream inStream =null;
|
|
StreamReader streamReader=null;
|
|
try
|
|
{
|
|
if(!SessionAvailable(pathSessionFile))return null;
|
|
MGSessionParams sessionParams=new MGSessionParams();
|
|
inStream =new FileStream(pathSessionFile,FileMode.Open);
|
|
streamReader=new StreamReader(inStream);
|
|
String versionInfo=streamReader.ReadLine();
|
|
double version=double.Parse(Utility.BetweenString(versionInfo,"v",null));
|
|
if(1.00!=version)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());
|
|
sessionParams.LastUpdated=lastUpdated.Get<DateTime>();
|
|
sessionParams.TradeDate=tradeDate.Get<DateTime>();
|
|
sessionParams.StartDate=startDate.Get<DateTime>();
|
|
sessionParams.AnalysisDate=analysisDate.Get<DateTime>();
|
|
sessionParams.Cycle=cycle.Get<int>();
|
|
sessionParams.CashBalance=cashBalance.Get<double>();
|
|
sessionParams.NonTradeableCash=nonTradeableCash.Get<double>();
|
|
NVPCollection configurationCollection=new NVPCollection(streamReader.ReadLine());
|
|
sessionParams.Configuration=MGConfiguration.FromNVPCollection(configurationCollection);
|
|
int totalActivePositions=(new NVP(streamReader.ReadLine())).Get<int>();
|
|
sessionParams.ActivePositions=new ActivePositions();
|
|
for(int positionIndex=0;positionIndex<totalActivePositions;positionIndex++)
|
|
{
|
|
NVPCollection nvpCollection=new NVPCollection(streamReader.ReadLine());
|
|
sessionParams.ActivePositions.AddFromNVPCollection(nvpCollection);
|
|
}
|
|
int totalPositions=(new NVP(streamReader.ReadLine())).Get<int>();
|
|
NVPCollections nvpCollections=new NVPCollections();
|
|
for(int positionIndex=0;positionIndex<totalPositions;positionIndex++)
|
|
{
|
|
NVPCollection nvpCollection=new NVPCollection(streamReader.ReadLine());
|
|
nvpCollections.Add(nvpCollection);
|
|
}
|
|
sessionParams.AllPositions=Positions.FromNVPCollections(nvpCollections);
|
|
inStream.Close();
|
|
inStream.Dispose();
|
|
inStream = null;
|
|
streamReader.Close();
|
|
streamReader.Dispose();
|
|
streamReader = null;
|
|
return sessionParams;
|
|
}
|
|
finally
|
|
{
|
|
if(null!=streamReader)streamReader.Close();
|
|
if(null!=inStream)inStream.Close();
|
|
}
|
|
}
|
|
public static String GetSessionFileName(String pathSessionFile)
|
|
{
|
|
if (null == pathSessionFile) return null;
|
|
String directory = Path.GetDirectoryName(pathSessionFile);
|
|
if ("".Equals(directory)) directory = Directory.GetCurrentDirectory();
|
|
return directory + "\\" + Path.GetFileNameWithoutExtension(pathSessionFile) + ".txt";
|
|
}
|
|
public static bool SessionAvailable(String pathSessionFile)
|
|
{
|
|
return IsValidSessionFile(pathSessionFile);
|
|
}
|
|
public static bool IsValidSessionFile(String pathSessionFile)
|
|
{
|
|
FileStream inStream =null;
|
|
StreamReader streamReader=null;
|
|
try
|
|
{
|
|
if(null==pathSessionFile)return false;
|
|
pathSessionFile=pathSessionFile.ToLower();
|
|
if(!pathSessionFile.EndsWith(".txt"))pathSessionFile+=".txt";
|
|
if(!File.Exists(pathSessionFile))return false;
|
|
inStream =new FileStream(pathSessionFile,FileMode.Open);
|
|
streamReader=new StreamReader(inStream);
|
|
String versionInfo=streamReader.ReadLine();
|
|
double version=double.Parse(Utility.BetweenString(versionInfo,"v",null));
|
|
if(1.00!=version)return false;
|
|
return true;
|
|
}
|
|
catch(Exception)
|
|
{
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
if(null!=streamReader)streamReader.Close();
|
|
if(null!=inStream)inStream.Close();
|
|
}
|
|
}
|
|
}
|
|
}
|