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"); } } }
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); } }
// 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; } } }
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"); } } }
// 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"); } }
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); } }
// 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"); } }
// 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; } } }