コード例 #1
0
ファイル: SignalForm.cs プロジェクト: tuyonwu/Candlesticks
        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);
                    }
                }
            }
        }
コード例 #2
0
        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"));
            });
        }
コード例 #3
0
        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"));
            });
        }
コード例 #4
0
        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);
        }