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); }
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(); } }
public SubscribeChannels(string Name, string Pair, MarketBook Market, string cId) { name = Name; pair = Pair; market = Market; Id = cId; }
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; }
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; } }
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; } }
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()); }
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); } }
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); }
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); }
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); }
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); }
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); }
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}"); } } }
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); }
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); }
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); }
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); }
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); }
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); } } }
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); }
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); }
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); }
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; } }
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()); }
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; } }
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; } }
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; } }
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; } }