public static void Start() { Console.WriteLine("Starting Simulator 2"); ShowGraphingForm(); while (true) { var am = ""; while (!(am == "a" || am == "m")) { Console.WriteLine("Enter m for manual a for automatic"); am = Console.ReadLine(); } if (am == "m") { //Simulator2.ManualSimulate2(); Simulator2.ManualSimulate2(); } else { //Simulator2.AutoSimulate2(); Simulator2.AutoSimulate2(); } } }
public static void ManualSimulate2() { int lastCommonInterval = 0; int lastBigSma = 0; int lastSmallSma = 0; Simulator2 S = null; var ProductName = "LTC-USD"; TickerClient Ticker = new TickerClient(ProductName); //wait for ticker to get ready Thread.Sleep(2 * 1000); try { Console.WriteLine("Enter simulation start date:"); var inDt = Console.ReadLine(); DateTime dt; DateTime.TryParse(inDt, out dt); Console.WriteLine("Enter Common time interval in minutes"); var inputCommonInterval = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Enter base price sma len: "); var basePriceSma = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Enter big sma length"); var inputBigSmaLen = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Enter small sma length"); var inputSmallSmaLen = Convert.ToInt16(Console.ReadLine()); //Console.WriteLine("Enter signal len: "); //var inputSmaLen = Convert.ToInt16(Console.ReadLine()); if (S == null) { S = new Simulator2(ref Ticker, ProductName, inputCommonInterval, inputBigSmaLen, inputSmallSmaLen, basePriceSma, true); S.GraphWindow = _GraphingWindow; } else { if (!(lastCommonInterval == inputCommonInterval && lastBigSma == inputBigSmaLen && lastSmallSma == inputSmallSmaLen)) { S.Dispose(); S = null; S = new Simulator2(ref Ticker, ProductName, inputCommonInterval, inputBigSmaLen, inputSmallSmaLen, basePriceSma); S.GraphWindow = _GraphingWindow; } } S.Calculate(dt, DateTime.Now, true, true); lastCommonInterval = inputCommonInterval; lastBigSma = inputBigSmaLen; lastSmallSma = inputSmallSmaLen; } catch (Exception ex) { Console.WriteLine("invalid input / error in calc: " + ex.Message); } }
private static List <ResultData> RunSim_ThreadSafe(ref TickerClient inputTicker, DateTime startDt, DateTime endDt, int inputSimCount) { int lastCommonInterval = 0; int lastBigSma = 0; int lastSmallSma = 0; Simulator2 S = null; TickerClient Ticker = inputTicker; DateTime autoStartDate = startDt; DateTime autoEndDate = endDt; List <ResultData> resultList = new List <ResultData>(); int simCount = inputSimCount; //Parallel.For(0, simCount, i => for (int i = 0; i < simCount; i++) { IntervalData interval = null; interval = getIntervalData(); try { if (S == null) { S = new Simulator2(ref Ticker, ProductName, interval.interval, interval.bigSmaLen, interval.smallSmaLen, interval.basePriceSmaLen, true); S.GraphWindow = _GraphingWindow; } else { if (!(lastCommonInterval == interval.interval && lastBigSma == interval.bigSmaLen && lastSmallSma == interval.smallSmaLen)) { S.Dispose(); S = null; S = new Simulator2(ref Ticker, ProductName, interval.interval, interval.bigSmaLen, interval.smallSmaLen, interval.basePriceSmaLen); S.GraphWindow = _GraphingWindow; } } var plResult = S.Calculate(autoStartDate, autoEndDate, false, true); resultList.Add(new ResultData { Pl = plResult, intervals = interval }); lastCommonInterval = interval.interval; lastBigSma = interval.bigSmaLen; lastSmallSma = interval.smallSmaLen; } catch (Exception ex) { Console.WriteLine("invalid input / error in calc"); } } return(resultList); }
public static void AutoSimulate2() { _TriedIntervalList.Clear(); TickerClient Ticker = new TickerClient(ProductName); //wait for ticker to get ready Thread.Sleep(2 * 1000); DateTime dtStart = DateTime.MinValue; while (dtStart == DateTime.MinValue) { Console.WriteLine("Enter simulation start date:"); var inDt = Console.ReadLine(); DateTime.TryParse(inDt, out dtStart); } DateTime autoStartDate = dtStart;// new DateTime(2017, 10, 1); //DateTime autoEndDate = new DateTime(2018, 2, 13);//DateTime.Now; DateTime dtEnd = DateTime.MinValue; while (dtEnd == DateTime.MinValue) { Console.WriteLine("Enter simulation end date, enter n to use todays date:"); var inDt = Console.ReadLine(); if (inDt == "n") { dtEnd = DateTime.Now; break; } DateTime.TryParse(inDt, out dtEnd); } DateTime autoEndDate = dtEnd; //DateTime.Now; List <ResultData> allCombinedResultList = new List <ResultData>(); var startTime = DateTime.Now; int simCount = 0; int Each_Sim_Count = 50;//50; while (simCount == 0) { Console.WriteLine("Enter number of simulation count, " + Each_Sim_Count + " minimun"); simCount = Convert.ToInt32(Console.ReadLine()); } List <Task> allSimTasks = new List <Task>(); var eachBatchCount = 1000; var lastBatchCompletionTime = DateTime.Now; Int32 SLEEP_TIME_SEC = 30 * 1000; for (int batch = eachBatchCount; batch < simCount + eachBatchCount; batch += eachBatchCount) { Console.WriteLine("starting batch: " + (batch - eachBatchCount) + " - " + batch); if (batch > eachBatchCount) { Thread.Sleep(SLEEP_TIME_SEC); } var threadCount = Math.Ceiling((eachBatchCount / (double)Each_Sim_Count)); for (int i = 0; i < threadCount; i++) { var curTask = Task.Factory.StartNew(() => { var returnedResult = RunSim_ThreadSafe(ref Ticker, autoStartDate, autoEndDate, Each_Sim_Count); allCombinedResultList.AddRange(returnedResult); }); allSimTasks.Add(curTask); } Task.WaitAll(allSimTasks.ToArray()); if (batch >= eachBatchCount) { var timeTakenLastBatch = (DateTime.Now - lastBatchCompletionTime).TotalMinutes; Console.WriteLine("Time taken to complete last batch (min): " + timeTakenLastBatch); var expectedCompletionTime = (timeTakenLastBatch + ((SLEEP_TIME_SEC / 1000) / 60)) * ((simCount - batch) / eachBatchCount); Console.WriteLine("Expected completion time: " + expectedCompletionTime + " min, " + DateTime.Now.AddMinutes(expectedCompletionTime)); lastBatchCompletionTime = DateTime.Now; } } Console.WriteLine("\nTop 5 profit results\n"); IntervalData bestValues = null; for (int i = 0; i < 5; i++) { var best = allCombinedResultList.Where(d => d.Pl == allCombinedResultList.Max(a => a.Pl)).First(); if (bestValues == null) { bestValues = best.intervals; } var resMsg = "best result: " + i + "\n" + "PL: " + best.Pl + "\n" + "Interval: " + best.intervals.interval + "\n" + "Base price sma: " + best.intervals.basePriceSmaLen + "\n" + "big sma: " + best.intervals.bigSmaLen + "\n" + "small sma: " + best.intervals.smallSmaLen + "\n"; Logger.WriteLog("\n" + resMsg); allCombinedResultList.Remove(best); } var S = new Simulator2(ref Ticker, ProductName, bestValues.interval, bestValues.bigSmaLen, bestValues.smallSmaLen, bestValues.basePriceSmaLen, false); S.GraphWindow = _GraphingWindow; S.Calculate(autoStartDate, autoEndDate, true, true); //Console.WriteLine("\nTop 5 loss results\n"); //for (int i = 0; i < 5; i++) //{ // var best = allCombinedResultList.Where(d => d.Pl == allCombinedResultList.Min(a => a.Pl)).First(); // var resMsg = "best result: " + i + "\n" // + "PL: " + best.Pl + "\n" // + "Interval: " + best.intervals.interval + "\n" // + "Base price sma: " + best.intervals.basePriceSmaLen + "\n" // + "big sma: " + best.intervals.bigSmaLen + "\n" // + "small sma: " + best.intervals.smallSmaLen + "\n"; // Logger.WriteLog("\n" + resMsg); // allCombinedResultList.Remove(best); //} Console.WriteLine("time taken for " + allSimTasks.Count() * Each_Sim_Count + " iterations (min): " + (DateTime.Now - startTime).TotalMinutes); //Console.ReadLine(); }