protected virtual void OnKlineItemRecv(Ticker ticker, string[] item) { long dt = FastValueConverter.ConvertPositiveLong(item[0]); DateTime time = FromUnixTime(dt); CandleStickIntervalInfo info = null; for (int ci = 0; ci < AllowedCandleStickIntervals.Count; ci++) { CandleStickIntervalInfo i = AllowedCandleStickIntervals[ci]; if (i.Command == item[3]) { info = i; break; } } if (ticker.CandleStickPeriodMin != info.Interval.TotalMinutes) { return; } //Debug.WriteLine(item[6] + " " + item[7] + " " + item[8] + " " + item[9]); lock (ticker.CandleStickData) { CandleStickData data = new CandleStickData(); data.Time = time; data.Open = FastValueConverter.Convert(item[6]); data.Close = FastValueConverter.Convert(item[7]); data.High = FastValueConverter.Convert(item[8]); data.Low = FastValueConverter.Convert(item[9]); data.Volume = FastValueConverter.Convert(item[10]); data.QuoteVolume = FastValueConverter.Convert(item[13]); ticker.UpdateCandleStickData(data); } }
protected override string GetKlineSocketAddress(Ticker ticker) { CandleStickIntervalInfo klineInfo = ticker.GetCandleStickIntervalInfo(); string adress = "wss://stream.binance.com:9443/ws/" + ticker.Name.ToLower() + "@kline_" + klineInfo.Command; return(adress); }
public override BindingList <CandleStickData> GetCandleStickData(Ticker ticker, int candleStickPeriodMin, DateTime startUtc, long periodInSeconds) { long startSec = (long)(startUtc.Subtract(epoch)).TotalSeconds; long end = startSec + periodInSeconds; CandleStickIntervalInfo info = AllowedCandleStickIntervals.FirstOrDefault(i => i.Interval.TotalMinutes == candleStickPeriodMin); string address = string.Format("https://api.binance.com/api/v1/klines?symbol={0}&interval={1}&startTime={2}&endTime={3}&limit=10000", Uri.EscapeDataString(ticker.CurrencyPair), info.Command, startSec * 1000, end * 1000); byte[] bytes = null; try { bytes = GetDownloadBytes(address); } catch (Exception) { return(null); } if (bytes == null || bytes.Length == 0) { return(null); } DateTime startTime = epoch; BindingList <CandleStickData> list = new BindingList <CandleStickData>(); int startIndex = 0; List <string[]> res = JSonHelper.Default.DeserializeArrayOfArrays(bytes, ref startIndex, 12); if (res == null) { return(list); } foreach (string[] item in res) { CandleStickData data = new CandleStickData(); data.Time = startTime.AddMilliseconds(FastValueConverter.ConvertPositiveLong(item[0])).ToLocalTime(); data.Open = FastValueConverter.Convert(item[1]); data.High = FastValueConverter.Convert(item[2]); data.Low = FastValueConverter.Convert(item[3]); data.Close = FastValueConverter.Convert(item[4]); data.Volume = FastValueConverter.Convert(item[5]); data.QuoteVolume = FastValueConverter.Convert(item[7]); data.BuyVolume = FastValueConverter.Convert(item[9]); data.SellVolume = data.Volume - data.BuyVolume; data.BuySellVolume = data.BuyVolume - data.SellVolume; list.Add(data); } //List<TradeInfoItem> trades = GetTradeVolumesForCandleStick(ticker, startSec * 1000, end * 1000); //CandleStickChartHelper.InitializeVolumes(list, trades, ticker.CandleStickPeriodMin); return(list); }
void comboBoxEdit1_EditValueChanged(object sender, EventArgs e) { TripleRsiIndicatorStrategy s = (TripleRsiIndicatorStrategy)Strategy; CandleStickIntervalInfo info = comboBoxEdit1.EditValue as CandleStickIntervalInfo; if (info != null) { s.CandleStickIntervalMin = (int)info.Interval.TotalMinutes; } else { s.CandleStickIntervalMin = (int)TimeSpan.FromHours(4).TotalMinutes; } }
private void comboBoxEdit1_EditValueChanged(object sender, EventArgs e) { SignalNotificationStrategy s = (SignalNotificationStrategy)Strategy; CandleStickIntervalInfo info = (CandleStickIntervalInfo)this.comboBoxEdit1.EditValue; if (info != null) { s.CandleStickIntervalMin = (int)info.Interval.TotalMinutes; } else { s.CandleStickIntervalMin = (int)TimeSpan.FromHours(4).TotalMinutes; } }
protected virtual SocketConnectionInfo CreateKlineWebSocket(Ticker ticker, CandleStickIntervalInfo klineInfo) { SocketConnectionInfo info = new SocketConnectionInfo(); string adress = "wss://stream.binance.com:9443/ws/" + ticker.Name.ToLower() + "@kline_" + klineInfo.Command; info.Ticker = ticker; info.KlineInfo = klineInfo; info.Adress = adress; info.Socket = new WebSocket(adress, ""); info.Socket.Error += OnKlineSocketError; info.Socket.Opened += OnKlineSocketOpened; info.Socket.Closed += OnKlineSocketClosed; info.Socket.MessageReceived += OnKlineSocketMessageReceived; info.Open(); return(info); }
public override void StopListenKlineStream(Ticker ticker, CandleStickIntervalInfo klineInfo) { SocketConnectionInfo info = GetConnectionInfo(ticker, klineInfo, KlineSockets); if (info == null) { return; } info.Socket.Error -= OnKlineSocketError; info.Socket.Opened -= OnKlineSocketOpened; info.Socket.Closed -= OnKlineSocketClosed; info.Socket.MessageReceived -= OnKlineSocketMessageReceived; info.Close(); info.Dispose(); KlineSockets.Remove(info.Socket); }
protected virtual void OnKlineItemRecv(Ticker ticker, string[] item) { long dt = FastValueConverter.ConvertPositiveLong(item[0]); DateTime time = FromUnixTime(dt); CandleStickIntervalInfo info = AllowedCandleStickIntervals.FirstOrDefault(i => i.Command == item[3]); if (ticker.CandleStickPeriodMin != info.Interval.TotalMinutes) { return; } Debug.WriteLine(item[6] + " " + item[7] + " " + item[8] + " " + item[9]); lock (ticker.CandleStickData) { CandleStickData data = ticker.GetOrCreateCandleStickData(time); data.Open = FastValueConverter.Convert(item[6]); data.Close = FastValueConverter.Convert(item[7]); data.High = FastValueConverter.Convert(item[8]); data.Low = FastValueConverter.Convert(item[9]); data.Volume = FastValueConverter.Convert(item[10]); data.QuoteVolume = FastValueConverter.Convert(item[13]); ticker.RaiseCandleStickChanged(); } }
public override void StartListenKlineStream(Ticker ticker, CandleStickIntervalInfo klineInfo) { SocketConnectionInfo info = CreateKlineWebSocket(ticker, klineInfo); KlineSockets.Add(info.Socket, info); }