Example #1
0
        public OrderBookCollector(EventServer eventServer)
        {
            this.eventServer = eventServer;

            oandaApi = new OandaAPI();


            this.connection = DBUtils.OpenConnection();

            foreach (var instrument in INSTRUMENTS)
            {
                var orderbook = oandaApi.GetOrderbookData(instrument, 3600);
                SaveOrderbook(orderbook, instrument);
            }

            var now         = DateTime.Now;
            var millisecond = (now.Minute * 60 + now.Second) * 1000 + now.Millisecond;

            var remainMillisecond = INTERVAL_MINUTE * 60 * 1000 - millisecond % (INTERVAL_MINUTE * 60 * 1000) + 60 * 1000;

            Trace.WriteLine("now:" + now);
            Trace.WriteLine("remain:" + remainMillisecond);
            Trace.Flush();
            var timer = new System.Timers.Timer()
            {
                Interval  = (double)remainMillisecond,
                AutoReset = false,
            };

            timer.Elapsed += Timer_FirstElapsed;
            timer.Start();
        }
Example #2
0
 public void Observe(PriceListener listener)
 {
     lock (this) {
         if (listeners == null)
         {
             oandaApi  = new OandaAPI();
             listeners = delegate { };
             client    = oandaApi.GetPrices(ReceivePrice, instrument);
         }
         listeners += listener;
     }
 }
Example #3
0
        private void ChartForm_Load(object sender, EventArgs e)
        {
            oandaApi = new OandaAPI();
            candles  = oandaApi.GetCandles(100, instrument, granularity).ToList();

            chart1.Series.Clear();
            chart1.ChartAreas.Clear();
            chart1.Titles.Clear();

            float low  = candles.Select(c => c.lowMid).Min();
            float high = candles.Select(c => c.highMid).Max();

            ChartArea chartArea = new ChartArea();

            chart1.ChartAreas.Add(chartArea);
            chartArea.AxisX.LabelStyle.Format = "T";

            double n = 0.1d;

            while (true)
            {
                double d = Math.Round((high - low) / n);
                if (d <= 2)
                {
                    break;
                }
                n *= 2;
            }

            chartArea.AxisY.Maximum = Math.Ceiling(high / n) * n;
            chartArea.AxisY.Minimum = Math.Floor(low / n) * n;

            Series candleSeries = new Series();

            chart1.Series.Add(candleSeries);
            candleSeries.XValueType = ChartValueType.DateTime;
            candleSeries.ChartType  = SeriesChartType.Candlestick;
            foreach (var candle in candles)
            {
                candleSeries.Points.Add(new DataPoint(candle.DateTime.ToOADate(), new double[] { candle.highMid, candle.lowMid, candle.openMid, candle.closeMid }));
            }
        }
Example #4
0
        private void オーダーブック取得(object sender, EventArgs ev)
        {
            RunTask(sender, (Report report) => {
                report.Version         = 1;
                report.IsForceOverride = true;

                DateTime current = DateTime.UtcNow;
                var data         = new OandaAPI().GetOrderbookData();
                var pricePoints  = data[data.Keys.Max()];

                report.Comment = data.Keys.Max().ToString().Replace('/', '-').Replace(':', '-').Replace(' ', '_');
                report.SetHeader("price", "order_long", "order_short", "pos_long", "pos_short");

                foreach (var e in pricePoints.price_points.Keys.OrderBy(k => k))
                {
                    var p = pricePoints.price_points[e];
                    report.WriteLine(e, p.ol, p.os, p.pl, p.ps);
                }
            });
        }