Пример #1
0
        // Candlestick
        private void CacheCandle(BinanceStreamKlineData stream, int interval)
        {
            var instrument = stream.Symbol;
            var data       = stream.Data;

            CacheResult(BINANCE_CANDLE, instrument, RtdFields.EVENT, interval, stream.Event);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.EVENT_TIME, interval, stream.EventTime.ToLocalTime());

            CacheResult(BINANCE_CANDLE, instrument, RtdFields.FIRST_ID, interval, data.FirstTrade);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.LAST_ID, interval, data.LastTrade);

            CacheResult(BINANCE_CANDLE, instrument, RtdFields.HIGH, interval, data.High);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.LOW, interval, data.Low);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.OPEN_TIME, interval, data.OpenTime.ToLocalTime());
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.OPEN, interval, data.Open);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.CLOSE_TIME, interval, data.CloseTime.ToLocalTime());
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.CLOSE, interval, data.Close);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.FINAL, interval, data.Final);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.INTERVAL, interval, data.Interval.ToString());

            CacheResult(BINANCE_CANDLE, instrument, RtdFields.TRADES, interval, data.TradeCount);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.QUOTE_VOL, interval, data.QuoteAssetVolume);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.VOL, interval, data.Volume);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.TAKE_BUY_VOL, interval, data.TakerBuyBaseAssetVolume);
            CacheResult(BINANCE_CANDLE, instrument, RtdFields.TAKE_BUY_QUOTE_VOL, interval, data.TakerBuyQuoteAssetVolume);
        }
Пример #2
0
        public void SubscribingToKlineStream_Should_TriggerWhenKlineStreamMessageIsReceived()
        {
            // arrange
            var socket = new Mock <IWebsocket>();

            socket.Setup(s => s.Close());
            socket.Setup(s => s.Connect()).Returns(Task.FromResult(true));
            socket.Setup(s => s.SetEnabledSslProtocols(It.IsAny <System.Security.Authentication.SslProtocols>()));

            var factory = new Mock <IWebsocketFactory>();

            factory.Setup(s => s.CreateWebsocket(It.IsAny <Log>(), It.IsAny <string>())).Returns(socket.Object);

            BinanceStreamKlineData result = null;
            var client = new BinanceSocketClient {
                SocketFactory = factory.Object
            };

            client.SubscribeToKlineStream("test", KlineInterval.OneMinute, (test) => result = test);

            var data = new BinanceCombinedStream <BinanceStreamKlineData>()
            {
                Stream = "test",
                Data   = new BinanceStreamKlineData()
                {
                    Event     = "TestKlineStream",
                    EventTime = new DateTime(2017, 1, 1),
                    Symbol    = "test",
                    Data      = new BinanceStreamKline()
                    {
                        TakerBuyBaseAssetVolume = 0.1m,
                        Close      = 0.2m,
                        CloseTime  = new DateTime(2017, 1, 2),
                        Final      = true,
                        FirstTrade = 10000000000,
                        High       = 0.3m,
                        Interval   = KlineInterval.OneMinute,
                        LastTrade  = 2000000000000,
                        Low        = 0.4m,
                        Open       = 0.5m,
                        TakerBuyQuoteAssetVolume = 0.6m,
                        QuoteAssetVolume         = 0.7m,
                        OpenTime   = new DateTime(2017, 1, 1),
                        Symbol     = "test",
                        TradeCount = 10,
                        Volume     = 0.8m
                    }
                }
            };

            // act
            socket.Raise(r => r.OnMessage += null, JsonConvert.SerializeObject(data));

            // assert
            Assert.IsNotNull(result);
            Assert.IsTrue(TestHelpers.PublicInstancePropertiesEqual(data.Data, result, "Data"));
            Assert.IsTrue(TestHelpers.PublicInstancePropertiesEqual(data.Data.Data, result.Data));
        }
Пример #3
0
 /// <summary>
 /// Converts a binance sourced candle to an internal model.
 /// </summary>
 /// <param name="candle">The candle to convert.</param>
 /// <returns><see cref="BacktestingCandle"/> instance.</returns>
 public static BacktestingCandle ToInternal(BinanceStreamKlineData candle)
 {
     return(new BacktestingCandle(
                openTimestamp: candle.Data.OpenTime.ToUnixTimestampMilliseconds(),
                open: candle.Data.Open,
                close: candle.Data.Close,
                high: candle.Data.High,
                low: candle.Data.Low,
                volume: candle.Data.Volume,
                tradingPair: candle.Symbol));
 }
Пример #4
0
 private void KL1Min(BinanceStreamKlineData obj)
 {
     //this.IsAllowedIntoRange = obj.Data.Open > obj.Data.Close;
     //CurrentCumulativeDelta = (obj.Data.Volume - obj.Data.TakerBuyQuoteAssetVolume);
     //Logger.Info(string.Format("CVD : {0}", CurrentCumulativeDelta));
     //Logger.Info(string.Format("VOL : {0}", obj.Data.Volume));
     if (obj.Data.Final)
     {
         CurrentCumulativeDelta = 0;
     }
 }
Пример #5
0
        /// <summary>
        /// Get Data From Date X to Date Y on Symbol V
        /// </summary>
        /// <param name="From"></param>
        /// <param name="To"></param>
        /// <param name="Symbol"></param>
        public void GetDataFromTo(DateTime From, DateTime To, string Symbol)
        {
            Console.WriteLine("Core - Loading data for : {0}", Symbol);

            if (From > To)
            {
                throw new Exception(string.Format("From : {0} is superior to To : {1}", From, To));
            }



            var CandleMin = this.bclient.Client.GetKlines(Symbol, KlineInterval.OneMinute, startTime: From, endTime: To, limit: int.MaxValue);

            foreach (var data in CandleMin.Data)
            {
                BinanceStreamKlineData formated = new BinanceStreamKlineData();
                formated.Data           = new BinanceStreamKline();
                formated.EventTime      = data.CloseTime;
                formated.Symbol         = Symbol;
                formated.Data.Close     = data.Close;
                formated.Data.CloseTime = data.CloseTime;
                formated.Data.Final     = true;
                formated.Data.High      = data.High;
                formated.Data.Low       = data.Low;
                formated.Data.OpenTime  = data.OpenTime;
                formated.Data.Symbol    = Symbol;
                formated.Data.Open      = data.Open;
                formated.Data.Volume    = data.Volume;
                formated.Data.TakerBuyBaseAssetVolume  = data.TakerBuyBaseAssetVolume;
                formated.Data.TakerBuyQuoteAssetVolume = data.TakerBuyQuoteAssetVolume;
                formated.Data.TradeCount = data.TradeCount;
                var           sourcedata  = new Trady.Core.Candle(formated.Data.CloseTime, formated.Data.Open, formated.Data.High, formated.Data.Low, formated.Data.Close, formated.Data.Volume);
                BinanceCandle Standardize = new BinanceCandle(sourcedata);
                Standardize.Last   = formated.Data.Final;
                Standardize.Name   = formated.Symbol;
                Standardize.Candle = sourcedata;
                Type myType = formated.Data.GetType();

                //Extract all exchanger candle properties
                IList <PropertyInfo> props = new List <PropertyInfo>(myType.GetProperties());
                foreach (PropertyInfo prop in props)
                {
                    object propValue = prop.GetValue(formated.Data, null);
                    Standardize.Properties.Add(prop.Name, propValue);
                }
                Standardize.Update();
                this.Candles.Add(Standardize);
            }
            Console.WriteLine("Core - Finished to load from {0} to {1} for symbol {2}", From, To, Symbol);
        }
        public void SubscribingToKlineStream_Should_TriggerWhenKlineStreamMessageIsReceived()
        {
            // arrange
            var socket = new TestSocket();
            var client = TestHelpers.CreateSocketClient(socket);

            BinanceStreamKlineData result = null;

            client.Spot.SubscribeToKlineUpdatesAsync("ETHBTC", KlineInterval.OneMinute, (test) => result = test);

            var data = new BinanceCombinedStream <BinanceStreamKlineData>()
            {
                Stream = "test",
                Data   = new BinanceStreamKlineData()
                {
                    Event     = "TestKlineStream",
                    EventTime = new DateTime(2017, 1, 1),
                    Symbol    = "ETHBTC",
                    Data      = new BinanceStreamKline()
                    {
                        TakerBuyBaseAssetVolume = 0.1m,
                        Close      = 0.2m,
                        CloseTime  = new DateTime(2017, 1, 2),
                        Final      = true,
                        FirstTrade = 10000000000,
                        High       = 0.3m,
                        Interval   = KlineInterval.OneMinute,
                        LastTrade  = 2000000000000,
                        Low        = 0.4m,
                        Open       = 0.5m,
                        TakerBuyQuoteAssetVolume = 0.6m,
                        QuoteAssetVolume         = 0.7m,
                        OpenTime   = new DateTime(2017, 1, 1),
                        Symbol     = "test",
                        TradeCount = 10,
                        Volume     = 0.8m
                    }
                }
            };

            // act
            socket.InvokeMessage(data);

            // assert
            Assert.IsNotNull(result);
            Assert.IsTrue(TestHelpers.AreEqual(data.Data, result, "Data"));
            Assert.IsTrue(TestHelpers.AreEqual(data.Data.Data, result.Data));
        }
Пример #7
0
 private void KL1Min(BinanceStreamKlineData obj)
 {
     //Periodic reset (Temporary)
     if (obj.Data.Final)
     {
         CurrentCumulativeDelta = 0;
         MapHistory.AddMap(Map);
         Map.Clear();
         Map.Update.Clear();
         BookSnapshot.OrderBookSnap.Clear();
         SellerMatcher.Clear();
         BuyerMatcher.Clear();
         OrderFlowAnalyseService.Orders.Clear();
         MamaBot.GlobalShared.Vars.OrderChannel.Queue.Clear();
         Debug.WriteLine("Cleared all Temporary data");
     }
 }
Пример #8
0
        private object DecodeCandle(BinanceStreamKlineData stream, string field)
        {
            var data = stream.Data;

            switch (field)
            {
            case RtdFields.SYMBOL: return(stream.Symbol);

            case RtdFields.EVENT: return(stream.Event);

            case RtdFields.EVENT_TIME: return(stream.EventTime.ToLocalTime());

            case RtdFields.FIRST_ID: return(data.FirstTrade);

            case RtdFields.LAST_ID: return(data.LastTrade);

            case RtdFields.HIGH: return(data.High);

            case RtdFields.LOW: return(data.Low);

            case RtdFields.OPEN: return(data.Open);

            case RtdFields.CLOSE: return(data.Close);

            case RtdFields.OPEN_TIME: return(data.OpenTime.ToLocalTime());

            case RtdFields.CLOSE_TIME: return(data.CloseTime.ToLocalTime());

            case RtdFields.FINAL: return(data.Final);

            case RtdFields.INTERVAL: return(data.Interval.ToString());

            case RtdFields.TRADES: return(data.TradeCount);

            case RtdFields.QUOTE_VOL: return(data.QuoteAssetVolume);

            case RtdFields.VOL: return(data.Volume);

            case RtdFields.TAKE_BUY_VOL: return(data.TakerBuyBaseAssetVolume);

            case RtdFields.TAKE_BUY_QUOTE_VOL: return(data.TakerBuyQuoteAssetVolume);
            }
            return(SubscriptionManager.UnsupportedField);
        }
Пример #9
0
        /// <summary>
        /// Get Data From Date X to Date Y on Symbol V
        /// </summary>
        /// <param name="From"></param>
        /// <param name="To"></param>
        /// <param name="Symbol"></param>
        public List <BinanceStreamKlineData> GetDataFromTo(DateTime From, DateTime To, string Symbol)
        {
            Console.WriteLine("Core - Loading data for : {0}", Symbol);

            if (From > To)
            {
                throw new Exception(string.Format("From : {0} is superior to To : {1}", From, To));
            }

            var DayBetween   = (To - From).TotalDays;
            var CandleMin    = this.bclient.Client.GetKlines(Symbol, KlineInterval.OneMinute, From, To, int.MaxValue);
            var GroupPerHour = CandleMin.Data.GroupBy(y => y.CloseTime.Day);
            List <BinanceStreamKlineData> returned = new List <BinanceStreamKlineData>();

            foreach (var data in CandleMin.Data)
            {
                BinanceStreamKlineData formated = new BinanceStreamKlineData();
                formated.Data           = new BinanceStreamKline();
                formated.EventTime      = data.CloseTime;
                formated.Symbol         = Symbol;
                formated.Data.Close     = data.Close;
                formated.Data.CloseTime = data.CloseTime;
                formated.Data.Final     = true;
                formated.Data.High      = data.High;
                formated.Data.Low       = data.Low;
                formated.Data.OpenTime  = data.OpenTime;
                formated.Data.Symbol    = Symbol;
                formated.Data.Open      = data.Open;
                formated.Data.Volume    = data.Volume;
                formated.Data.TakerBuyBaseAssetVolume  = data.TakerBuyBaseAssetVolume;
                formated.Data.TakerBuyQuoteAssetVolume = data.TakerBuyQuoteAssetVolume;
                formated.Data.TradeCount = data.TradeCount;
                returned.Add(formated);
            }
            return(returned);


            //var data = IncomingBinance.bclient.Client.GetKlines(textBox2.Text, KlineInterval.OneHour, Data_Datestart.Value, Data_DateEnd.Value, int.MaxValue);
        }