Example #1
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/Public/LiveTickers", "GET");

            var tickersResponse = JsonConvert.DeserializeObject <TickerResponse>(response);

            foreach (var item in tickersResponse.tickers)
            {
                if (item.currencyPair.Equals(Utilities.GatecoinSymbol(instr)))
                {
                    result.BidPrice   = item.bid;
                    result.AskPrice   = item.ask;
                    result.BidSize    = item.bidQ;
                    result.AskSize    = item.askQ;
                    result.LastPrice  = item.last;
                    result.LastSize   = item.lastQ;
                    result.LocalTime  = DateTime.Now;
                    result.ServerTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToDouble(item.createDateTime));
                }
            }

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #2
0
        static void PlaceBets(MarketCatalogue mc, MarketBook mb, List <CoreLib.Betfair.TO.Runner> runnersToBack)
        {
            var     betPlaced = false;
            decimal unitSize  = decimal.Parse(ConfigurationManager.AppSettings["UnitSize"]);

            Log.Info($"Unit size for {mc.MarketId}-:{unitSize:c2}");

            foreach (var runner in runnersToBack)
            {
                var betAmount = unitSize;

                List <PlaceInstruction> placeInstructions = new List <PlaceInstruction>();
                var placeInstructionBack = new PlaceInstruction();
                placeInstructionBack.Handicap    = 0;
                placeInstructionBack.SelectionId = runner.SelectionId;

                placeInstructionBack.OrderType                    = OrderType.MARKET_ON_CLOSE;
                placeInstructionBack.MarketOnCloseOrder           = new MarketOnCloseOrder();
                placeInstructionBack.MarketOnCloseOrder.Liability = (double)betAmount;
                placeInstructionBack.Side = Side.BACK;
                placeInstructions.Add(placeInstructionBack);

                var customerRef          = Guid.NewGuid().ToString().Substring(0, 20);
                var placeExecutionReport = Program.Client.placeOrders(mc.MarketId, customerRef, placeInstructions);
                Log.Info($"Placement report for {mc.MarketId}-{runner.SelectionId} BACK bets\tStatus:{placeExecutionReport.Status}\tError Code:{placeExecutionReport.ErrorCode}");
                betPlaced = true;
            }

            if (betPlaced)
            {
                Console.Beep();
            }
        }
Example #3
0
 public SubscribeChannels(string Name, string Pair, MarketBook Market, string cId)
 {
     name   = Name;
     pair   = Pair;
     market = Market;
     Id     = cId;
 }
Example #4
0
 public Subscribe(Instrument instr, SubscriptionModel model, MarketBook markt, int lvl, int id)
 {
     this.pair   = instr;
     this.mode   = model;
     this.market = markt;
     this.lvl    = lvl;
     this.id     = id;
 }
Example #5
0
        private async Task ParseMessage(SocketEventHandlerArgs msg)
        {
            string symbol = msg.chnlName;

            switch (msg.type)
            {
            case StreamMessageType.Data:
            {
                var jsonResponse = Encoding.UTF8.GetString(msg.msg, 0, msg.msg.Length);
                if (String.IsNullOrEmpty(jsonResponse))
                {
                    _logger.Log(LogPriority.Warning, $"<--Report : Empty message received - '{jsonResponse}' : ", ExchName);
                    return;
                }

                if (symbol.Equals(BinanceClient.connectSymbol + "@ticker"))
                {
                    return;
                }

                JObject jToken     = JObject.Parse(jsonResponse);
                var     symbolItem = jToken["s"].ToString();

                MarketBook mb = new MarketBook()
                {
                    AskPrice   = jToken["a"].ToObject <double>(),
                    AskSize    = jToken["A"].ToObject <double>(),
                    BidPrice   = jToken["b"].ToObject <double>(),
                    BidSize    = jToken["B"].ToObject <double>(),
                    ServerTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(jToken["E"].ToObject <double>()),
                    LocalTime  = DateTime.Now
                };
                _client.OnReport(ExchName, ExchName + symbolItem, mb);
            }
            break;

            case StreamMessageType.Logon:
            {
                _client.OnEvent(ExchName, BrokerEvent.ConnectorStarted, string.Empty);
                using (await _lock.LockAsync())
                {
                    if (SubscribeList.Count > 0)
                    {
                        foreach (var i in SubscribeList)
                        {
                            chnl = new WebSocketWrapper(Uri + i.Key, i.Key, _logger, ExchName);
                            await chnl.Start(ParseMessage);
                        }
                    }
                }
            }
            break;

            default:
                break;
            }
        }
Example #6
0
 public void OnReport(string exchangeName, string symbol, MarketBook topOfBook)
 {
     _logger.Log(LogPriority.Debug, $"Broker({exchangeName}) " +
                 $"Pair: {symbol}  " +
                 $"Ask: {topOfBook.AskPrice} , " +
                 $" Bid: {topOfBook.BidPrice} ," +
                 $"AskSise: {topOfBook.AskSize} , " +
                 $" BidSise: {topOfBook.BidSize}");
 }
        private void TimeStamp(MarketBook book)
        {
            var runners   = book.Runners;
            var timeStamp = DateTime.Now;

            foreach (var runner in runners)
            {
                runner.BestBackOffer.OfferDateTime = timeStamp;
                runner.BestLayOffer.OfferDateTime  = timeStamp;
            }
        }
Example #8
0
        public string MarketSnapConsole(MarketBook marketSnap)
        {
            var timeToJump          = Convert.ToDateTime(DateTime.Now);
            var timeRemainingToJump = timeToJump.Subtract(DateTime.UtcNow);

            var sb = new StringBuilder()
                     .AppendFormat("{0} - {1}\n", marketSnap.GetGameName, marketSnap.GetGameId)
                     .AppendFormat("back: {0} | lay:{1}  ", marketSnap.GetMarketEfficiencyBack(), marketSnap.GetMarketEfficiencyLay())
                     .AppendFormat("Status: {0}", marketSnap.GetChannelStatus)
                     .AppendFormat(" | Round: {0}", marketSnap.GetRound)
                     .AppendFormat(" | Runners: {0}", marketSnap.GetSelection().Count)
                     .AppendFormat(" | TradedVolume: {0}", marketSnap.GetSelection().Sum(x => x.amountMatched).ToString().PadRight(50));

            sb.AppendLine();

            var Player   = marketSnap.GetOdds;
            var comunity = marketSnap.GetCardsCommunityCards.PlayerPocket();

            sb.AppendFormat("Status: {2}\nCommunity Cards: {0} | Time Next Round: {1} \n",
                            comunity,
                            marketSnap.GetGameChannel.bettingWindowPercentageComplete.ToString().PadRight(50),
                            marketSnap.GetMarket.status.ToString().PadRight(50));
            sb.AppendLine();

            if (marketSnap.GetSelection() != null && marketSnap.GetSelection().Count > 0)
            {
                foreach (var runner in marketSnap.GetOdds)
                {
                    //var _Current = marketSnap.GetBet(runner.id).FirstOrDefault();
                    //var Stake = _Current != null ? _Current.size : 0;
                    //var profit = _Current != null ? ((_Current.price - 1) * Stake)- marketSnap.GetBet(runner.id).Where(x=>x.selectionReference.selectionId != runner.id).Sum(x=>x.size) : 0;

                    //sb.AppendLine(string.Format("{0} Status: {1} Cards: {2} \n-> [{3}] {4} : {5} : {6} [{7}] | Stake: {8} | odd:{9}",
                    //    runner.name,
                    //    runner.status.ToString().PadLeft(7),
                    //    Player.Where(x => x.PlayerName == runner.name).FirstOrDefault().Hands.Count > 0 ? Player.Where(x => x.PlayerName == runner.name).FirstOrDefault().PlayerPocket().PadLeft(8) : "",
                    //    runner.bestAvailableToBackPrices.Sum(a => a.amountUnmatched).ToString("0").PadLeft(7),
                    //    runner.bestAvailableToBackPrices.Count > 0 ? runner.bestAvailableToBackPrices[0].Value.ToString("0.00").PadLeft(6) : "  0.00",
                    //    Math.Round(profit, 2).ToString(),
                    //    runner.bestAvailableToLayPrices.Count > 0 ? runner.bestAvailableToLayPrices[0].Value.ToString("0.00").PadLeft(6) : "  0.00",
                    //    runner.bestAvailableToLayPrices.Sum(a => a.amountUnmatched).ToString("0").PadLeft(7),
                    //    Stake.ToString().PadRight(20),
                    //    Player.Where(x=>x.PlayerId == runner.id)?.FirstOrDefault().AddPip()));

                    sb.Append(runner._ToString());
                    sb.AppendLine();
                    sb.AppendLine();
                }
            }

            return(sb.Append("\n\n\n").ToString());
        }
Example #9
0
        private static void PlaceTradesIfRequired(MarketCatalogue mc, MarketBook mb, List <CoreLib.Betfair.TO.Runner> runnersToBack, double marketPct)
        {
            if (marketPct > double.Parse(ConfigurationManager.AppSettings["MaxAllowableMarketPct"]))
            {
                Log.Info($"Market percentage for {mc.MarketId} is very high at {marketPct}.  Will not place bets");
                return;
            }

            if (!MarketsBetOn.Contains(mb.MarketId) && mc.Description.MarketTime < DateTime.UtcNow)
            {
                MarketsBetOn.Add(mb.MarketId);
                Log.Info($"Trade Placement for {mc.Event.Name} {mc.MarketName}");
                PlaceBets(mc, mb, runnersToBack);
            }
        }
Example #10
0
        public static IList <LineDTO> Convert(MarketCatalogue marketCatalogue, MarketBook marketBook, Action <LineDTO> action)
        {
            var lines = new List <LineDTO>();

            foreach (var runner in marketBook.Runners)
            {
                decimal?сoeffParam;
                var     coeffKind = GetCoeffKind(new GetCoeffKindParams(runner, marketCatalogue, runner.Handicap), out сoeffParam);

                if (string.IsNullOrEmpty(coeffKind))
                {
                    continue;
                }

                var coeffType = GetCoeffType(new GetCoeffKindParams(runner, marketCatalogue, runner.Handicap));

                //берем меньший кэф
                var price = runner.ExchangePrices.AvailableToBack.OrderBy(x => x.Price).FirstOrDefault(x => x.Size > 100.0);

                if (price != null)
                {
                    var line = new LineDTO
                    {
                        CoeffParam = сoeffParam,
                        CoeffKind  = coeffKind,
                        CoeffValue = (decimal)price.Price,
                        CoeffType  = coeffType
                    };


                    line.SerializeObject(new LineInfo
                    {
                        Size        = price.Size,
                        MarketId    = marketBook.MarketId,
                        SelectionId = runner.SelectionId,
                        Handicap    = runner.Handicap
                    });

                    //line.LineData = string.Join(",", runner.ExchangePrices.AvailableToLay.Where(x => x.Size > 10.0).Select(f => (decimal)f.Price));

                    action(line);
                    line.UpdateName();
                    lines.Add(line);
                }
            }

            return(lines);
        }
Example #11
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/ticker?symbol=" + Utilities.AllcoinSymbol(instr), "GET");

            var tickersResponse = JsonConvert.DeserializeObject <TickerResponse>(response);

            result.AskPrice  = Convert.ToDouble(tickersResponse.data.sell);
            result.BidPrice  = Convert.ToDouble(tickersResponse.data.buy);
            result.LocalTime = DateTime.Now;
            result.LastPrice = Convert.ToDouble(tickersResponse.data.last);
            result.LastSize  = Convert.ToDouble(tickersResponse.data.vol);

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #12
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/exchange/ticker?currencyPair=" + instr.First + "/" + instr.Second, "GET");

            var tickersResponse = JsonConvert.DeserializeObject <TickerResponse>(response);

            result.AskPrice  = tickersResponse.best_ask;
            result.BidPrice  = tickersResponse.best_bid;
            result.LastPrice = tickersResponse.last;
            result.LastSize  = tickersResponse.volume;
            result.LocalTime = DateTime.Now;

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #13
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/" + Utilities.BitcoinIndonesiaSymbol(instr) + "/ticker", "GET");

            var tickersResponse = JsonConvert.DeserializeObject <TickerResponse>(response);

            result.AskPrice   = Convert.ToDouble(tickersResponse.ticker.sell);
            result.BidPrice   = Convert.ToDouble(tickersResponse.ticker.buy);
            result.LocalTime  = DateTime.Now;
            result.ServerTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToDouble(tickersResponse.ticker.server_time));
            result.LastPrice  = Convert.ToDouble(tickersResponse.ticker.last);

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #14
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/orderbook?currency=" + instr.First, "GET");

            var tickersResponse = JsonConvert.DeserializeObject <TickerResponse>(response);

            result.AskPrice   = Convert.ToDouble(tickersResponse.ask.First().price);
            result.BidPrice   = Convert.ToDouble(tickersResponse.bid.First().price);
            result.AskSize    = Convert.ToDouble(tickersResponse.ask.First().qty);
            result.BidSize    = Convert.ToDouble(tickersResponse.bid.First().qty);
            result.LocalTime  = DateTime.Now;
            result.ServerTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToInt64(tickersResponse.timestamp));

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #15
0
        public void OnReport(string exchangeName, string symbol, MarketBook topOfBook)
        {
            if (_marketList.TryGetValue(symbol, out MarketBookResponse result))
            {
                if (result.Book.AskPrice != topOfBook.AskPrice ||
                    result.Book.AskSize != topOfBook.AskSize ||
                    result.Book.BidPrice != topOfBook.BidPrice ||
                    result.Book.BidSize != topOfBook.BidSize ||
                    result.Book.LastPrice != topOfBook.LastPrice ||
                    result.Book.LastSize != topOfBook.LastSize)
                {
                    result.Book      = topOfBook;
                    result.isUpdated = true;
                }

                Tick tick = new Tick()
                {
                    AskPrice   = topOfBook.AskPrice,
                    AskSize    = topOfBook.AskSize,
                    BidPrice   = topOfBook.BidPrice,
                    BidSize    = topOfBook.BidSize,
                    LastPrice  = topOfBook.LastPrice,
                    LastSize   = topOfBook.LastSize,
                    LocalTime  = topOfBook.LocalTime,
                    ServerTime = topOfBook.EstTime
                };

                try
                {
                    _tickStoreService.Add(result.Coin, tick);
                }
                catch (Exception ex)
                {
                    _globalLogger.Log(LogPriority.Error, $"OnEvent : {ex.Message}");
                }

                try
                {
                    _dbStoreService.Add(result.Coin, tick);
                }
                catch (Exception ex)
                {
                    _globalLogger.Log(LogPriority.Error, $"OnEvent : {ex.Message}");
                }
            }
        }
Example #16
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/Ticker?pair=" + Utilities.KrakenSymbol(instr), "GET");

            var tickersResponse = JsonConvert.DeserializeObject <GetTickerResponse>(response);
            var data            = tickersResponse.result.Values.First();

            result.AskPrice  = Convert.ToDouble(data.a.First());
            result.BidPrice  = Convert.ToDouble(data.b.First());
            result.LastPrice = Convert.ToDouble(data.c.First());
            result.LastSize  = Convert.ToDouble(data.v.First());
            result.LocalTime = DateTime.Now;

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #17
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            string response = await REST.SendRequest(rest_domain + "/ticker/" + instr.First, "GET");

            JObject jT   = JObject.Parse(response);
            var     data = jT["data"];

            MarketBook result = new MarketBook()
            {
                BidPrice   = (double)data["buy_price"],
                AskPrice   = (double)data["sell_price"],
                LocalTime  = DateTime.Now,
                ServerTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(Convert.ToDouble(data["date"]))
            };

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #18
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/bidandask/", "GET");

            var tickersResponse = JsonConvert.DeserializeObject <BidAsk>(response);

            var dataAsks = tickersResponse.asks.First();
            var dataBids = tickersResponse.bids.Last();

            result.AskPrice  = Convert.ToDouble(dataAsks[0]);
            result.AskSize   = Convert.ToDouble(dataAsks[1]);
            result.BidPrice  = Convert.ToDouble(dataBids[0]);
            result.BidSize   = Convert.ToDouble(dataBids[1]);
            result.LocalTime = DateTime.Now;

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #19
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/markets/" + Utilities.itBitSymbol(instr) + "/ticker", "GET");

            var tickersResponse = JsonConvert.DeserializeObject <TickerResponse>(response);

            result.AskPrice   = Convert.ToDouble(tickersResponse.ask);
            result.AskSize    = Convert.ToDouble(tickersResponse.askAmt);
            result.BidPrice   = Convert.ToDouble(tickersResponse.bid);
            result.BidSize    = Convert.ToDouble(tickersResponse.bidAmt);
            result.LastPrice  = Convert.ToDouble(tickersResponse.lastPrice);
            result.LastSize   = Convert.ToDouble(tickersResponse.lastAmt);
            result.LocalTime  = DateTime.Now;
            result.ServerTime = tickersResponse.serverTimeUTC;

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #20
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            var        symbol   = Utilities.WEXSymbol(instr);
            string     response = await REST.SendRequest(rest_domain + "/ticker/" + symbol, "GET");

            JObject jT = JObject.Parse(response);

            var data            = jT[symbol].ToString();
            var tickersResponse = JsonConvert.DeserializeObject <Ticker>(data);

            result.AskPrice   = Convert.ToDouble(tickersResponse.buy);
            result.BidPrice   = Convert.ToDouble(tickersResponse.sell);
            result.LocalTime  = DateTime.Now;
            result.ServerTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToDouble(tickersResponse.updated));

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #21
0
        private static void GenerateTrades(MarketCatalogue mc, MarketBook mb, out List <CoreLib.Betfair.TO.Runner> ret, out double marketPct)
        {
            ret       = null;
            marketPct = 0;
            var ratingMeeting = (from m in Ratings.meetings where m.name.ToUpper() == mc.Event.Venue.ToUpper() select m).FirstOrDefault();

            if (ratingMeeting == null)
            {
                Log.Info($"No ratings for {mc.Event.Name} {mc.MarketName}");
                return;
            }

            var ratingsRace = (from r in ratingMeeting.races where r.bfExchangeMarketId == mc.MarketId select r).FirstOrDefault();

            if (ratingsRace == null)
            {
                return;
            }

            ret = new List <CoreLib.Betfair.TO.Runner>();
            var overs = float.Parse(ConfigurationManager.AppSettings["OversNeeded"]);

            foreach (var runner in mb.Runners)
            {
                var catalogueRunner = (from r in mc.Runners where r.SelectionId == runner.SelectionId select r).FirstOrDefault();
                if (catalogueRunner != null)
                {
                    var modelRunner = (from runners in ratingsRace.runners where runners.name == catalogueRunner.RunnerName select runners).FirstOrDefault();
                    if (modelRunner != null)
                    {
                        if (runner.LastPriceTraded > modelRunner.ratedPrice * overs)
                        {
                            ret.Add(runner);
                        }
                    }
                }

                if (runner.LastPriceTraded.HasValue)
                {
                    marketPct += (1.0 / (double)runner.LastPriceTraded);
                }
            }
        }
Example #22
0
        private static MarketCatalogue GetNextRace(out MarketBook mb)
        {
            var meetingNames = (from m in Ratings.meetings select m.name).ToList();

            mb = null;
            var race = (from m in Markets where m.Description.MarketTime > DateTime.UtcNow.AddSeconds(-30) && meetingNames.Contains(m.Event.Venue.ToUpper())
                        orderby m.Description.MarketTime select m).FirstOrDefault();

            if (race != null)
            {
                var pp = new PriceProjection();
                pp.PriceData = new HashSet <PriceData> {
                    PriceData.EX_ALL_OFFERS, PriceData.EX_TRADED
                };
                var prices = Client.listMarketBook(new List <string> {
                    race.MarketId
                }, pp);
                mb = prices.FirstOrDefault();
            }

            return(race);
        }
Example #23
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook result   = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/ticker", "GET");

            var tickerResponse = JsonConvert.DeserializeObject <Dictionary <string, Symbol> >(response);

            foreach (var item in tickerResponse)
            {
                if (item.Key.Equals(Utilities.LakeBTCSymbol(instr)))
                {
                    result.BidPrice  = Convert.ToDouble(item.Value.bid);
                    result.AskPrice  = Convert.ToDouble(item.Value.ask);
                    result.LastPrice = Convert.ToDouble(item.Value.last);
                    result.LastSize  = Convert.ToDouble(item.Value.vol);
                    result.LocalTime = DateTime.Now;
                }
            }

            _client.OnReport(Name, instr.Id(), result);
            return(result);
        }
Example #24
0
        public async Task <MarketBook?> GetTicker(Instrument instr)
        {
            MarketBook mb       = new MarketBook();
            string     response = await REST.SendRequest(rest_domain + "/ticker/", "GET");

            var tickersResponse = JsonConvert.DeserializeObject <Dictionary <string, Ticker> >(response);

            foreach (var item in tickersResponse)
            {
                if (item.Key == Utilities.ExmoSymbol(instr))
                {
                    mb.AskPrice   = Convert.ToDouble(item.Value.sell_price);
                    mb.BidPrice   = Convert.ToDouble(item.Value.buy_price);
                    mb.LastPrice  = Convert.ToDouble(item.Value.last_trade);
                    mb.LastSize   = Convert.ToDouble(item.Value.vol);
                    mb.LocalTime  = DateTime.Now;
                    mb.ServerTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToDouble(item.Value.updated));

                    _client.OnReport(Name, SubscribeList[item.Key].pair.Id(), mb);
                }
            }
            return(mb);
        }
Example #25
0
        private async Task ParseMessage(SocketEventHandlerArgs msg)
        {
            switch (msg.type)
            {
            case StreamMessageType.Data:
            {
                var jsonResponse = Encoding.UTF8.GetString(msg.msg, 0, msg.msg.Length);
                if (jsonResponse == "[]")
                {
                    return;
                }

                string  evnt   = "";
                JObject jToken = JObject.Parse(jsonResponse);
                evnt = jToken["event"]?.Value <string>();
                var data = jToken["data"].ToString();

                if (evnt == "updated")
                {
                    var    result = JsonConvert.DeserializeObject <Ticker>(data);
                    string symbol = result.currency_pair_code.ToLower();

                    Subscribe dataItem;
                    if (SubscribeList.TryGetValue(symbol, out dataItem))
                    {
                        MarketBook mb = new MarketBook()
                        {
                            AskPrice  = Convert.ToDouble(result.market_ask),
                            BidPrice  = Convert.ToDouble(result.market_bid),
                            LastPrice = Convert.ToDouble(result.last_traded_price),
                            LastSize  = Convert.ToDouble(result.last_traded_quantity),
                            LocalTime = DateTime.Now,
                        };
                        _client.OnReport(Name, dataItem.pair.Id(), mb);
                    }
                }
            }
            break;

            case StreamMessageType.Error:
                break;

            case StreamMessageType.Logon:
            {
                var _pairs = await GetProducts();

                using (await _lock.LockAsync())
                {
                    foreach (var item in SubscribeList)
                    {
                        var symbol  = item.Key;
                        var chnlId  = _pairs[symbol];
                        var req     = "product_cash_" + symbol + "_" + chnlId;
                        var request = $"{{\"event\":\"pusher:subscribe\",\"data\":{{\"channel\":\"{req}\"}}}}";
                        await chnl.SendCommand(Encoding.UTF8.GetBytes(request));

                        _client.OnEvent(Name, BrokerEvent.CoinSubscribed, symbol);
                        _logger.Log(LogPriority.Info, "Coin Subscribed - " + symbol, Name);
                    }
                }
                _client.OnEvent(Name, BrokerEvent.ConnectorStarted, string.Empty);
            }
            break;

            case StreamMessageType.Logout:
                _client.OnEvent(Name, BrokerEvent.SessionLogout, "");
                break;

            default:
                break;
            }
        }
Example #26
0
        public static string MarketBookConsole(
            MarketCatalogue marketCatalogue,
            MarketBook marketBook,
            IEnumerable <RunnerCatalog> runnerDescriptions,
            Func <RunnerCatalog, Runner, string> backSide = null,
            Func <RunnerCatalog, Runner, string> laySide  = null)
        {
            var nearestBacks = marketBook.Runners
                               .Where(c => c.Status == RunnerStatus.ACTIVE)
                               .Select(c => c.ExchangePrices.AvailableToBack.Count > 0 ? c.ExchangePrices.AvailableToBack.First().Price : 0.0);
            var nearestLays = marketBook.Runners
                              .Where(c => c.Status == RunnerStatus.ACTIVE)
                              .Select(c => c.ExchangePrices.AvailableToLay.Count > 0 ? c.ExchangePrices.AvailableToLay.First().Price : 0.0);

            var timeToJump          = Convert.ToDateTime(marketCatalogue.Event.OpenDate);
            var timeRemainingToJump = timeToJump.Subtract(DateTime.UtcNow);

            var sb = new StringBuilder()
                     .AppendFormat("{0} {1}", marketCatalogue.Event.Name, marketCatalogue.MarketName)
                     .AppendFormat(" : {0}% {1}%", BFHelpers.GetMarketEfficiency(nearestBacks).ToString("0.##"), BFHelpers.GetMarketEfficiency(nearestLays).ToString("0.##"))
                     .AppendFormat(" : Status={0}", marketBook.Status)
                     .AppendFormat(" : IsInplay={0}", marketBook.IsInplay)
                     .AppendFormat(" : Runners={0}", marketBook.NumberOfActiveRunners)
                     .AppendFormat(" : Matched={0}", marketBook.TotalMatched.ToString("C0"))
                     .AppendFormat(" : Avail={0}", marketBook.TotalAvailable.ToString("C0"));

            sb.AppendLine();
            sb.AppendFormat("Time To Jump: {0}h {1}:{2}",
                            timeRemainingToJump.Hours + (timeRemainingToJump.Days * 24),
                            timeRemainingToJump.Minutes.ToString("##"),
                            timeRemainingToJump.Seconds.ToString("##"));
            sb.AppendLine();

            if (marketBook.Runners != null && marketBook.Runners.Count > 0)
            {
                foreach (var runner in marketBook.Runners.Where(c => c.Status == RunnerStatus.ACTIVE))
                {
                    var runnerName = runnerDescriptions?.FirstOrDefault(c => c.SelectionId == runner.SelectionId);
                    var bsString   = backSide != null?backSide(runnerName, runner) : "";

                    var lyString = laySide != null?laySide(runnerName, runner) : "";

                    string consoleRunnerName = runnerName != null ? runnerName.RunnerName : "null";

                    sb.AppendLine(string.Format("{0} {9} [{1}] {2},{3},{4}  ::  {5},{6},{7} [{8}] {10}",
                                                consoleRunnerName.PadRight(25),
                                                runner.ExchangePrices.AvailableToBack.Sum(a => a.Size).ToString("0").PadLeft(7),
                                                runner.ExchangePrices.AvailableToBack.Count > 2 ? runner.ExchangePrices.AvailableToBack[2].Price.ToString("0.00").PadLeft(6) : "  0.00",
                                                runner.ExchangePrices.AvailableToBack.Count > 1 ? runner.ExchangePrices.AvailableToBack[1].Price.ToString("0.00").PadLeft(6) : "  0.00",
                                                runner.ExchangePrices.AvailableToBack.Count > 0 ? runner.ExchangePrices.AvailableToBack[0].Price.ToString("0.00").PadLeft(6) : "  0.00",
                                                runner.ExchangePrices.AvailableToLay.Count > 0 ? runner.ExchangePrices.AvailableToLay[0].Price.ToString("0.00").PadLeft(6) : "  0.00",
                                                runner.ExchangePrices.AvailableToLay.Count > 1 ? runner.ExchangePrices.AvailableToLay[1].Price.ToString("0.00").PadLeft(6) : "  0.00",
                                                runner.ExchangePrices.AvailableToLay.Count > 2 ? runner.ExchangePrices.AvailableToLay[2].Price.ToString("0.00").PadLeft(6) : "  0.00",
                                                runner.ExchangePrices.AvailableToLay.Sum(a => a.Size).ToString("0").PadLeft(7),
                                                bsString,
                                                lyString));
                }
            }

            return(sb.ToString());
        }
Example #27
0
        private async Task ParseMessage(SocketEventHandlerArgs msg)
        {
            switch (msg.type)
            {
            case StreamMessageType.Data:
            {
                var jsonResponse = Encoding.UTF8.GetString(msg.msg, 0, msg.msg.Length);
                if (jsonResponse == "[]")
                {
                    return;
                }

                string  evnt   = "";
                JObject jToken = JObject.Parse(jsonResponse);
                evnt = jToken["event"]?.Value <string>();
                var data = jToken["data"];

                if (evnt == "data")
                {
                    string symbol = jToken["channel"].ToString().Remove(0, 11);
                    var    result = JsonConvert.DeserializeObject <OrderBookResponse>(data.ToString());

                    Subscribe dataItem;
                    if (SubscribeList.TryGetValue(symbol, out dataItem))
                    {
                        MarketBook mb = new MarketBook()
                        {
                            AskPrice   = Convert.ToDouble(result.asks[0][0]),
                            BidPrice   = Convert.ToDouble(result.bids[0][0]),
                            LocalTime  = DateTime.Now,
                            ServerTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToDouble(result.timestamp))
                        };
                        _client.OnReport(Name, dataItem.pair.Id(), mb);
                    }
                }
            }
            break;

            case StreamMessageType.Error:
                break;

            case StreamMessageType.Logon:
            {
                _client.OnEvent(Name, BrokerEvent.ConnectorStarted, string.Empty);
                using (await _lock.LockAsync())
                {
                    foreach (var item in SubscribeList)
                    {
                        var symbol  = item.Key;
                        var request = "{\"event\":\"pusher:subscribe\",\"data\":{\"channel\":\"order_book_" + symbol + "\"}}";
                        await chnl.SendCommand(Encoding.UTF8.GetBytes(request));

                        _client.OnEvent(Name, BrokerEvent.CoinSubscribed, symbol);
                        _logger.Log(LogPriority.Info, "Coin Subscribed - " + symbol, Name);
                    }
                }
            }
            break;

            case StreamMessageType.Logout:
                _client.OnEvent(Name, BrokerEvent.SessionLogout, "");
                break;

            default:
                break;
            }
        }
Example #28
0
        private void Bot(MarketBook Game)
        {
            if (Game.GetChannelStatus != channelStatusEnum.RUNNING)
            {
                return;
            }

            if (Game.GetMarketStatus != marketStatusEnum.ACTIVE || Game.GetMarketStatus == marketStatusEnum.SUSPENDED_GAME_ROUND_OVER)
            {
                return;
            }


            if (Game.CurrentBets.Count > 0)//se existir
            {
                var hands = Game.GetOdds;

                var HandNobet = hands.Where(x => !x.Isbet).ToList();


                var t = (from w1 in MarketBookPR.GetOdds where HandNobet.Any(w2 => w1.BestOddback() < w2.BestOddback()) select w1.PlayerId).ToList();

                if (t.Count > 0)
                {
                    t.ForEach(item =>
                    {
                        // hands.Find(x => x.PlayerId == item).Isbet = true;
                    });

                    Game.Bet_CloseBackDutching(hands);
                }

                return;//se nao fechar começa de novo
            }



            if (Game.GetRound >= 4)//se round =4 e nao existe apostas começa de novo
            {
                return;
            }


            var FindBet = Game.GetOdds.ToList();//procura pelas odds altas

            FindBet.ForEach(x =>
            {
                if (x.DecimalOdd() < x.BestOddback())
                {
                    x.Isbet = true;
                }
            });

            var FindBet1 = Game.GetOdds.Where(x => x.BestOddback() > x.DecimalOdd()).ToList();//procura pelas odds altas

            if (FindBet1.Count > 0)
            {
            }



            if (FindBet.Where(x => x.Isbet == true).Count() > 0)//se existir 1 odd alta
            {
                Game.Bet_BackDutching(FindBet);
                MarketBookPR = Game;
            }
        }
Example #29
0
        private async Task ParseMessage(SocketEventHandlerArgs msg)
        {
            switch (msg.type)
            {
            case StreamMessageType.Data:
            {
                var jsonResponse = Encoding.UTF8.GetString(msg.msg, 0, msg.msg.Length);
                if (jsonResponse.Contains("error"))
                {
                    JObject jToken;
                    jToken = JObject.Parse(jsonResponse);
                    var dict = jToken["error"].ToObject <Dictionary <string, string> >();
                    _client.OnEvent(Name, BrokerEvent.InternalError, "Message: " + dict["message"] + ", Description: " + dict["description"]);
                }
                else if (jsonResponse.Contains("method"))
                {
                    var response = JsonConvert.DeserializeObject <TickerResponse>(jsonResponse);
                    var method   = response.method;
                    var symbol   = [email protected];
                    var data     = response.@params;
                    if (method == "ticker" && SubscribeList.ContainsKey(symbol))
                    {
                        MarketBook mb = new MarketBook()
                        {
                            LocalTime  = DateTime.Now,
                            ServerTime = data.timestamp,
                            AskPrice   = Convert.ToDouble(data.ask),
                            BidPrice   = Convert.ToDouble(data.bid),
                            LastPrice  = Convert.ToDouble(data.last),
                            LastSize   = Convert.ToDouble(data.volume),
                        };
                        _client.OnReport(Name, SubscribeList[symbol].pair.Id(), mb);
                    }
                }
            }
            break;

            case StreamMessageType.Error:
                break;

            case StreamMessageType.Logon:
            {
                _client.OnEvent(Name, BrokerEvent.ConnectorStarted, string.Empty);
                using (await _lock.LockAsync())
                {
                    foreach (var item in SubscribeList)
                    {
                        var symbol = item.Key;

                        var request = $"{{\"method\":\"subscribeTicker\",\"params\":{{ \"symbol\":\"{item.Value.pair.Symbol}\"}}, \"id\": \"123\"}}";

                        await chnl.SendCommand(Encoding.UTF8.GetBytes(request));
                    }
                }
            }
            break;

            case StreamMessageType.Logout:
                _client.OnEvent(Name, BrokerEvent.SessionLogout, "");
                break;

            default:
                break;
            }
        }
Example #30
0
        private async Task ParseMessage(SocketEventHandlerArgs msg)
        {
            switch (msg.type)
            {
            case StreamMessageType.Data:
            {
                var jsonResponse = Encoding.UTF8.GetString(msg.msg, 0, msg.msg.Length);
                if (jsonResponse == "[]")
                {
                    return;
                }
                if (jsonResponse.Contains("1002"))
                {
                    JArray token = JArray.Parse(jsonResponse);
                    if (token[2].HasValues)
                    {
                        var chnlKey = Convert.ToInt32(token[2][0]);

                        if (SubscribeList.ContainsKey(chnlKey))
                        {
                            MarketBook mb = new MarketBook()
                            {
                                AskPrice  = token[2][2].ToObject <double>(),
                                BidPrice  = token[2][3].ToObject <double>(),
                                LastSize  = token[2][1].ToObject <double>(),
                                LocalTime = DateTime.Now
                            };
                            _client.OnReport(Name, SubscribeList[chnlKey].pair.Id(), mb);
                        }
                    }
                }
            }
            break;

            case StreamMessageType.Logon:
                _client.OnEvent(Name, BrokerEvent.ConnectorStarted, string.Empty);
                using (await _lock.LockAsync())
                {
                    foreach (var item in SubscribeList)
                    {
                        var symbol = item.Key;

                        if (item.Value.mode == SubscriptionModel.TopBook)
                        {
                            string paramData = $"{{\"command\":\"subscribe\",\"channel\":\"1002\"}}";
                            await chnl.SendCommand(Encoding.UTF8.GetBytes(paramData));
                        }
                    }
                }
                break;

            case StreamMessageType.Logout:
                _client.OnEvent(Name, BrokerEvent.SessionLogout, "");
                break;

            case StreamMessageType.Error:
                break;

            default:
                break;
            }
        }