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(); }
public void Observe(PriceListener listener) { lock (this) { if (listeners == null) { oandaApi = new OandaAPI(); listeners = delegate { }; client = oandaApi.GetPrices(ReceivePrice, instrument); } listeners += listener; } }
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 })); } }
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); } }); }