public void runMinute(int i, TestResult tr, IBarDay barday, int dayNumber, IDayCandle prev, IDayCandle today) { //Console.WriteLine($"dayno={dayNumber} minteNumber={i}"); this.today = today; this.prev = prev; if (i == 3) { string ip = inPosition ? "t" : "f"; string oif = orderInForce ? "t" : "f"; //results.Add($"{today.Symbol} {today.Open} {today.Date} {i} {ip} {oif}"); } if (today.Symbol == "XOM") { } this.i = i; if (i == 0) { //inPosition = false; orderInForce = false; orderInForceExpiry = 0; enterLimitPrice = 0; //exitLimitPrice = 0; //enterExecPrice = 0; exitExecPrice = 0; //stopTime = 0; } bd = barday; //Console.WriteLine($"{i} {bd.Symbol}"); underflow = false; Test.messages.Clear(); if (!inPosition && !orderInForce) { //double tt = MinuteOpen(1, 0); int minuteNumber = i; CheckEntryCriteria(results, barday, ref orderInForce, ref orderInForceExpiry, ref enterLimitPrice, dayNumber, minuteNumber); } else if (!inPosition) { if (orderInForce) { if (i < orderInForceExpiry) { //ProcessTradeEntry(results, barday, ref inPosition, ref orderInForce, enterLimitPrice, ref exitLimitPrice, ref enterExecPrice, ref stopTime); ProcessTradeEntry(results, barday);// ref inPosition, ref orderInForce, enterLimitPrice, ref exitLimitPrice, ref enterExecPrice, ref stopTime); } else //tif expired { orderInForce = false; results.Add($"{barday.Symbol} tif expired {i}"); } } } else if (inPosition) { ProcessTradeExit(results, barday);//, ref inPosition, exitLimitPrice, enterExecPrice, ref exitExecPrice, stopTime); } }
public static TestResult TestDay(ILookup <DateTime, IBarDay> bdl, DateTime date, string[] dates, string[] symbols, float[][] arrs, Dictionary <string, IDayCandle> dcPrev, Dictionary <string, IDayCandle> dcToday) { TestResult tr = new TestResult(); Test.testResult = tr; tr.Date = date; string dateString = date.ToString("MM/dd/yyyy"); int dayNumber = Array.BinarySearch(dates, dateString); for (int i = 0; i < 390; i++) { foreach (IBarDay bd in bdl[date]) { string symbol = bd.Symbol; Test t; if (!testDictionary.ContainsKey(symbol)) { t = (Test)Activator.CreateInstance(type); t.symbolNumber = Array.BinarySearch(symbols, symbol); t.symbolCount = symbols.Count(); t.minutesPerDay = 390; t.shortsPerBar = 7; t.calcBPD(); t.dates = dates; t.symbols = symbols; t.arr = arrs[0]; testDictionary[symbol] = t; } t = testDictionary[symbol]; try { if (dcPrev.ContainsKey(symbol) && dcToday.ContainsKey(symbol)) { IDayCandle prev = dcPrev[symbol]; IDayCandle today = dcToday[symbol]; t.runMinute(i, tr, bd, dayNumber, prev, today); } else { if (i == 0) { results.Add($"missing day candle for {symbol} + {date}"); Console.WriteLine($"missing day candle for {symbol} + {date}"); } } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); //Console.WriteLine($"crap {symbol} {t.dates[0]}" ); } } } foreach (Test t in testDictionary.Values) { if (t.inPosition && t.maxOvernights > 0) { t.inPositionDays++; } } return(tr); }