Пример #1
0
 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);
     }
 }
Пример #2
0
        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);
        }