Пример #1
0
 private void CheckEntryCriteria(List <string> results, IBarDay barday, ref bool orderInForce, ref int orderInForceExpiry, ref double enterLimitPrice, int i)
 {
     if (t(i))
     {
         IBar b = bd.GetMinuteBar(i, 1, 0);
         if (b == null)
         {
             underflow = true;
         }
         if (!underflow)
         {
             DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i);
             entering        = true;
             enterLimitPrice = exec();
             //double d = MinuteClose(5, 0);
             //double dd = bars[i].Close;
             entering = false;
             string str = $"{bd.Symbol} met: {barTime.ToString("MM-dd-yy HH:mm:ss")} {i} {b.ToString()} enterLimitPrice={enterLimitPrice}";
             results.Add(str);
             results.AddRange(Container.messages);
             orderInForce       = true;
             orderInForceExpiry = i + tif;
             //File.AppendAllText(@"c:\src\diag.txt", $"profitExit={profitExit} tif={tif}\r\n");
         }
     }
 }
Пример #2
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);
     }
 }
Пример #3
0
        //        private void ProcessTradeExit(List<string> results, BarDay barday, ref bool inPosition, double exitLimitPrice, double enterExecPrice, ref double exitExecPrice, int stopTime)
        private void ProcessTradeExit(List <string> results, IBarDay barday) //, ref bool inPosition, double exitLimitPrice, double enterExecPrice, ref double exitExecPrice, int stopTime)
        {
            IBar b = bd.GetMinuteBar(i, 1, 0);

            //File.AppendAllText(@"c:\src\diag.txt", $"profitExit={profitExit} tif={tif} exitLimitPrice{exitLimitPrice}\r\n");
            if (b != null)
            {
                if (b.Open > exitLimitPrice && activeOrderSide == 'B')
                {
                    DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i + 1);
                    exitExecPrice = exitLimitPrice;
                    double pandl = exitExecPrice - enterExecPrice;
                    testResult.NumTrades++;
                    testResult.PandL += pandl;
                    //testResults.Add(testResult);
                    string str = $"{bd.Symbol} exitlong:{barTime.ToString("MM-dd-yy HH:mm:ss")} {i} exitExecPrice={exitExecPrice.ToString("0.00")} p&l={(exitExecPrice - enterExecPrice).ToString("0.00")}";
                    results.Add(str);
                    results.AddRange(Test.messages);
                    inPosition = false;
                }
                else if (b.Open != 0 && b.Open < exitLimitPrice && activeOrderSide == 'S')
                {
                    DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i + 1);
                    exitExecPrice = exitLimitPrice;
                    double pandl = enterExecPrice - exitExecPrice;
                    testResult.NumTrades++;
                    testResult.PandL += pandl;
                    //testResults.Add(testResult);
                    string str = $"{bd.Symbol} exitsell:{barTime.ToString("MM-dd-yy HH:mm:ss")} {i} enterExecPrice={enterExecPrice.ToString("0.00")} exitExecPrice={exitExecPrice.ToString("0.00")} p&l={pandl.ToString("0.00")}";
                    results.Add(str);
                    results.AddRange(Test.messages);
                    inPosition = false;
                }
                else if ((i >= stopTime || (i >= CloseAll && inPositionDays >= maxOvernights)) && b.Open != 0)
                {
                    results.Add($"stop time{stopTime}");
                    //File.AppendAllText(@"c:\src\diag.txt", $"profitExit={profitExit} tif={tif} exitLimitPrice{exitLimitPrice} \r\n");
                    DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i + 1);
                    exitExecPrice = b.Open;
                    double pandl = enterExecPrice - exitExecPrice;
                    if (activeOrderSide == 'B')
                    {
                        pandl *= -1;
                    }
                    testResult.NumTrades++;
                    testResult.PandL += pandl;
                    //testResults.Add(testResult);
                    string str = $"{bd.Symbol} Stop Exit:{barTime.ToString("MM-dd-yy HH:mm:ss")} {i} enterExecPrice={enterExecPrice.ToString("0.00")} exitExecPrice={exitExecPrice.ToString("0.00")} p&l={(pandl).ToString("0.00")}";
                    results.Add(str);
                    results.AddRange(Test.messages);
                    inPosition = false;
                }
            }
        }
Пример #4
0
 private void CheckEntryCriteria(List <string> results, IBarDay barday, ref bool orderInForce, ref int orderInForceExpiry, ref double enterLimitPrice, int dayNumber, int minuteNumber)
 {
     if (CheckLongEntryCriteria(symbolNumber, dayNumber, minuteNumber))
     {
         IBar b = bd.GetMinuteBar(i, 1, 0);
         if (b == null)
         {
             underflow = true;
         }
         if (!underflow)
         {
             DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i + 1);
             entering        = true;
             enterLimitPrice = CalculateLongEntryLimitPrice();
             //double d = MinuteClose(5, 0);
             //double dd = bars[i].Close;
             entering = false;
             int    pid = System.Diagnostics.Process.GetCurrentProcess().Id;
             string str = $"{bd.Symbol} metlong: {barTime.ToString("MM-dd-yy HH:mm:ss")} {i} enterLimitPrice={enterLimitPrice.ToString("0.00")} pid={pid}";
             results.Add(str);
             results.AddRange(Test.messages);
             orderInForce       = true;
             activeOrderSide    = 'B';
             orderInForceExpiry = i + tif;
             //File.AppendAllText(@"c:\src\diag.txt", $"profitExit={profitExit} tif={tif}\r\n");
         }
     }
     if (CheckShortEntryCriteria(symbolNumber, dayNumber, minuteNumber))
     {
         IBar b = bd.GetMinuteBar(i, 1, 0);
         if (b == null)
         {
             underflow = true;
         }
         if (!underflow)
         {
             DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i + 1);
             entering        = true;
             enterLimitPrice = CalculateShortEntryLimitPrice();
             //double d = MinuteClose(5, 0);
             //double dd = bars[i].Close;
             entering = false;
             int    pid = System.Diagnostics.Process.GetCurrentProcess().Id;
             string str = $"{bd.Symbol} metshort: {barTime.ToString("MM-dd-yy HH:mm:ss")} {i} enterLimitPrice={enterLimitPrice.ToString("0.00")} pid={pid}";
             results.Add(str);
             results.AddRange(Test.messages);
             orderInForce       = true;
             activeOrderSide    = 'S';
             orderInForceExpiry = i + tif;
             //File.AppendAllText(@"c:\src\diag.txt", $"profitExit={profitExit} tif={tif}\r\n");
         }
     }
 }
Пример #5
0
        //        private void ProcessTradeEntry(List<string> results, BarDay barday, ref bool inPosition, ref bool orderInForce, double enterLimitPrice, ref double exitLimitPrice, ref double enterExecPrice, ref int stopTime)
        private void ProcessTradeEntry(List <string> results, IBarDay barday) //, ref bool inPosition, ref bool orderInForce, double enterLimitPrice, ref double exitLimitPrice, ref double enterExecPrice, ref int stopTime)
        {
            IBar b = bd.GetMinuteBar(i, 1, 0);

            if (b.Open == 0 && b.Volume == 0)
            {
                return;
            }
            if (b.Open < enterLimitPrice && activeOrderSide == 'B')
            {
                DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i + 1);

                inPosition     = true;
                inPositionDays = 0;
                enterExecPrice = b.Open;
                double mc1 = MinuteClose(1, 1);
                double elp = mc1 + (prev.ATR * .1);
                exitLimitPrice = CalculateLongExitLimitPrice();
                b = bd.GetMinuteBar(i, 1, 0);
                string str = $"{bd.Symbol} enterlong:{barTime.ToString("MM-dd-yy HH:mm:ss")} {i} enterExecPrice={enterExecPrice.ToString("0.00")} exitLimitPrice={exitLimitPrice.ToString("0.00")}";
                results.Add(str);
                results.AddRange(Test.messages);
                orderInForce = false;
                stopTime     = i + StopTimeInterval;
                //File.AppendAllText(@"c:\src\diag.txt", $"stopTime={stopTime} i={i}\r\n");
            }
            if (b.Open > enterLimitPrice && activeOrderSide == 'S')
            {
                DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i + 1);

                inPosition     = true;
                inPositionDays = 0;
                enterExecPrice = b.Open;
                double mc1 = MinuteClose(1, 1);
                double elp = mc1 + (prev.ATR * .1);
                exitLimitPrice = CalculateShortExitLimitPrice();
                b = bd.GetMinuteBar(i, 1, 0);
                string str = $"{bd.Symbol} entershort:{barTime.ToString("MM-dd-yy HH:mm:ss")} {i} enterExecPrice={enterExecPrice.ToString("0.00")} exitLimitPrice={exitLimitPrice.ToString("0.00")}";
                results.Add(str);
                results.AddRange(Test.messages);
                orderInForce = false;
                stopTime     = i + StopTimeInterval;
                results.Add($"current time {i} stop time {stopTime}");
                //File.AppendAllText(@"c:\src\diag.txt", $"stopTime={stopTime} i={i}\r\n");
            }
        }
Пример #6
0
 public void runMinute(int i, TestResult tr, IBarDay barday)
 {
     this.i = i;
     if (i == 0)
     {
         //inPosition = false;
         orderInForce       = false;
         orderInForceExpiry = 0;
         enterLimitPrice    = 0;
         //exitLimitPrice = 0;
         //enterExecPrice = 0;
         exitExecPrice = 0;
         //stopTime = 0;
     }
     bd        = barday;
     underflow = false;
     Container.messages.Clear();
     if (!inPosition && !orderInForce)
     {
         //double tt = MinuteOpen(1, 0);
         CheckEntryCriteria(Container.results, barday, ref orderInForce, ref orderInForceExpiry, ref enterLimitPrice, i);
     }
     else if (!inPosition)
     {
         if (orderInForce)
         {
             if (i < orderInForceExpiry)
             {
                 //ProcessTradeEntry(results, barday, ref inPosition, ref orderInForce, enterLimitPrice, ref exitLimitPrice, ref enterExecPrice, ref stopTime);
                 ProcessTradeEntry(Container.results, barday);// ref inPosition, ref orderInForce, enterLimitPrice, ref exitLimitPrice, ref enterExecPrice, ref stopTime);
             }
             else //tif expired
             {
                 orderInForce = false;
                 Container.results.Add($"tif expired {i}");
             }
         }
     }
     else if (inPosition)
     {
         ProcessTradeExit(Container.results, barday);//, ref inPosition, exitLimitPrice, enterExecPrice, ref exitExecPrice, stopTime);
     }
 }
Пример #7
0
        //        private void ProcessTradeEntry(List<string> results, BarDay barday, ref bool inPosition, ref bool orderInForce, double enterLimitPrice, ref double exitLimitPrice, ref double enterExecPrice, ref int stopTime)
        private void ProcessTradeEntry(List <string> results, IBarDay barday) //, ref bool inPosition, ref bool orderInForce, double enterLimitPrice, ref double exitLimitPrice, ref double enterExecPrice, ref int stopTime)
        {
            IBar b = bd.GetMinuteBar(i, 1, 1);

            if (b.Open < enterLimitPrice)
            {
                DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i);

                inPosition     = true;
                inPositionDays = 0;
                enterExecPrice = b.Open;
                exitLimitPrice = enterExecPrice + profitExit;
                b = bd.GetMinuteBar(i, 1, 0);
                string str = $"{bd.Symbol} enter:{barTime.ToString("MM-dd-yy HH:mm:ss")} {i} {b.ToString()} enterExecPrice={enterExecPrice} exitLimitPrice={exitLimitPrice}";
                results.Add(str);
                results.AddRange(Container.messages);
                orderInForce = false;
                stopTime     = i + StopTimeInterval;
                //File.AppendAllText(@"c:\src\diag.txt", $"stopTime={stopTime} i={i}\r\n");
            }
        }
Пример #8
0
        //        private void ProcessTradeExit(List<string> results, BarDay barday, ref bool inPosition, double exitLimitPrice, double enterExecPrice, ref double exitExecPrice, int stopTime)
        private void ProcessTradeExit(List <string> results, IBarDay barday) //, ref bool inPosition, double exitLimitPrice, double enterExecPrice, ref double exitExecPrice, int stopTime)
        {
            IBar b = bd.GetMinuteBar(i, 1, 0);

            //File.AppendAllText(@"c:\src\diag.txt", $"profitExit={profitExit} tif={tif} exitLimitPrice{exitLimitPrice}\r\n");
            if (b != null)
            {
                if (b.Open > exitLimitPrice)
                {
                    DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i);
                    exitExecPrice = exitLimitPrice;
                    double pandl = exitExecPrice - enterExecPrice;
                    Container.testResult.NumTrades++;
                    Container.testResult.PandL += pandl;
                    //testResults.Add(testResult);
                    string str = $"{bd.Symbol} exit:{barTime.ToString("MM-dd-yy HH:mm:ss")} {i} {b.ToString()} exitExecPrice={exitExecPrice} p&l={(exitExecPrice - enterExecPrice).ToString("0.00")}";
                    results.Add(str);
                    results.AddRange(Container.messages);
                    inPosition = false;
                }
                else if (i >= stopTime || (i >= CloseAll && inPositionDays >= maxOvernights))
                {
                    //File.AppendAllText(@"c:\src\diag.txt", $"profitExit={profitExit} tif={tif} exitLimitPrice{exitLimitPrice} \r\n");
                    DateTime barTime = barday.Date.AddHours(9.5).AddMinutes(i);
                    exitExecPrice = b.Open;
                    double pandl = exitExecPrice - enterExecPrice;
                    Container.testResult.NumTrades++;
                    Container.testResult.PandL += pandl;
                    //testResults.Add(testResult);
                    string str = $"{bd.Symbol} Stop Exit:{barTime.ToString("MM-dd-yy HH:mm:ss")} {i} {b.ToString()} exitExecPrice={exitExecPrice} p&l={(exitExecPrice - enterExecPrice).ToString("0.00")}";
                    results.Add(str);
                    results.AddRange(Container.messages);
                    inPosition = false;
                }
            }
        }