private void DoTrade(TradeOrders orders) { DateTime now = DateTime.Now; DateTime nowMinutes = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0, now.Kind); foreach (var order in orders) { var mouseClickPosition = GetMouseClickPosition(order.Instrument); if (order.TradeType == TradeType.Settle) { if (DateTime.Today.Add(order.Time) == nowMinutes && now.Second % 10 == randomSecond) { Cursor.Position = mouseClickPosition.Settle; mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); } } else { if (DateTime.Today.Add(order.Time) == nowMinutes && !havePositionSet.Contains(order)) { Cursor.Position = order.TradeType == TradeType.Ask ? mouseClickPosition.Ask : mouseClickPosition.Bid; mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); havePositionSet.Add(order); } } } }
private void USDJPY0550_0710_Click(object sender, EventArgs e) { RunTask(sender, (Report report) => { report.Version = 1; report.IsForceOverride = true; report.Comment = ""; var tradeOrders = new TradeOrders( new TimeTradeOrder() { Instrument = "USD_JPY", TradeType = TradeType.Ask, Time = new TimeSpan(5, 50, 0), }, new TimeTradeOrder() { Instrument = "USD_JPY", TradeType = TradeType.Settle, Time = new TimeSpan(7, 10, 0), } ); TradeCondition[] conditions = new TimeOfDayPattern[] { new TimeOfDayPattern() { Instrument = "USD_JPY", CheckStartTime = new TimeSpan(0, 30, 0), CheckEndTime = new TimeSpan(4, 50, 0), IsCheckUp = false, }, new TimeOfDayPattern() { Instrument = "USD_JPY", CheckStartTime = new TimeSpan(0, 20, 0), CheckEndTime = new TimeSpan(5, 40, 0), IsCheckUp = false, }, }; ReportMultiCondition(report, tradeOrders, conditions, GetM10Candles(new TimeSpan(365 * 5, 0, 0, 0), "USD_JPY")); }); }
private void EURUSD1100_1140_rev_Click(object sender, EventArgs e) { RunTask(sender, (Report report) => { report.Version = 2; report.IsForceOverride = true; report.Comment = ""; var tradeOrders = new TradeOrders( new TimeTradeOrder() { Instrument = "EUR_USD", TradeType = TradeType.Bid, Time = new TimeSpan(11, 00, 0), }, new TimeTradeOrder() { Instrument = "EUR_USD", TradeType = TradeType.Settle, Time = new TimeSpan(11, 40, 0), } ); TradeCondition[] conditions = new TimeOfDayPattern[] { new TimeOfDayPattern() { Instrument = "EUR_USD", CheckStartTime = new TimeSpan(8, 50, 0), CheckEndTime = new TimeSpan(11, 00, 0), IsCheckUp = true, }, new TimeOfDayPattern() { Instrument = "EUR_USD", CheckStartTime = new TimeSpan(6, 50, 0), CheckEndTime = new TimeSpan(7, 50, 0), IsCheckUp = false, }, }; ReportMultiCondition(report, tradeOrders, conditions, GetM10Candles(new TimeSpan(365 * 5, 0, 0, 0), "EUR_USD")); }); }
private void ReportMultiCondition(Report report, TradeOrders tradeOrders, TradeCondition[] conditions, IEnumerable <Candlestick> candles) { report.SetHeader("condition", "prifit rate", "profit count", "total match"); var dateTimePrice = new Dictionary <DateTime, float>(); var dateSet = new HashSet <DateTime>(); foreach (var c in candles) { if (c.IsNull) { continue; } dateTimePrice[c.DateTime] = c.Open; dateSet.Add(c.DateTime.Date); } Func <DateTime, float> getPrice = dateTime => dateTimePrice.ContainsKey(dateTime) ? dateTimePrice[dateTime] : float.NaN; int c1, c2, c3, c4, total; int r1, r2, r3, r4; r1 = r2 = r3 = r4 = c1 = c2 = c3 = c4 = total = 0; foreach (var date in dateSet) { var m = new List <bool>(); bool isValid = true; foreach (var condition in conditions) { TradeContext c = new TradeContext() { Instrument = tradeOrders[0].Instrument, Date = date, GetPrice = getPrice, }; Signal signal; m.Add(condition.IsMatch(out signal, c)); if (signal == null || signal.IsValid == false) { isValid = false; } } if (!isValid) { continue; } TradeContext context = new TradeContext() { Instrument = tradeOrders[0].Instrument, Date = date, GetPrice = getPrice, }; tradeOrders.DoTrade(context); if (context.IsValid == false) { continue; } bool isSuccess = context.Profit > 0f; total++; if (!m[0] && !m[1]) { c1++; r1 += isSuccess ? 1 : 0; } if (m[0] && !m[1]) { c2++; r2 += isSuccess ? 1 : 0; } if (!m[0] && m[1]) { c3++; r3 += isSuccess ? 1 : 0; } if (m[0] && m[1]) { c4++; r4 += isSuccess ? 1 : 0; } } report.WriteLine("!p1 && !p2", (float)r1 / c1, r1, c1); report.WriteLine("p1 && !p2", (float)r2 / c2, r2, c2); report.WriteLine("!p1 && p2", (float)r3 / c3, r3, c3); report.WriteLine("p1 && p2", (float)r4 / c4, r4, c4); report.WriteLine("total", (float)(r1 + r2 + r3 + r4) / (c1 + c2 + c3 + c4), r1 + r2 + r3 + r4, c1 + c2 + c3 + c4); }