Пример #1
0
 private static void exampleThreadLoop()
 {
     try
     {
         Console.WriteLine(" >>> Thread test >>> ");
         Console.WriteLine(" * get BTC price from various Stock Exchanges simultaneously (*10)");
         var binance = new Binance(String.Empty, String.Empty);
         var kucoin  = new Kucoin(String.Empty, String.Empty);
         var huobi   = new Huobi(String.Empty, String.Empty);
         var gate    = new Gate(String.Empty, String.Empty);
         for (int i = 0; i < 10; i++)
         {
             // Get OrderBooks
             binance.sendReq("GET /api/v1/depth !symbol=BTCUSDT&limit=50");
             kucoin.sendReq("GET /v1/open/orders symbol=BTC-USDT");
             huobi.sendReq("GET /market/depth symbol=btcusdt&type=step1");
             gate.sendReq("GET 1/orderBook/btc_usdt");
             while (isSomeStockWaiting(new dynamic[] { binance, kucoin, huobi, gate }))
             {
                 Thread.Sleep(1);
             }
             // Get best Purchase price for BTC from OrderBooks
             string result = $"{i}. ";
             result += $"Binance:{binance.responseData.getJsonValueAfterKeys(new string[] { "asks" }).getInnerFloat().ToString(" 0.00 ")} ";
             result += $"Kucoin:{kucoin.responseData.getJsonValueAfterKeys(new string[] { "data", "SELL" }).getInnerFloat().ToString(" 0.00 ")} ";
             result += $"Huobi:{huobi.responseData.getJsonValueAfterKeys(new string[] { "asks" }).getInnerFloat().ToString(" 0.00 ")} ";
             result += $"Gate:{gate.responseData.getJsonValueAfterKeys(new string[] { "asks" }).getInnerFloat(", ", helpers.way.reverse).ToString(" 0.00 ")} ";
             Console.WriteLine(result);
         }
         Console.WriteLine($" >>> End >>> ");
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Error: {ex.Message}");
     }
     finally
     {
         exampleThread = null;
     }
 }
Пример #2
0
        static void Main()
        {
            // attach graph renderer
            Rendering renderer    = new Rendering(800, 400);
            long      lastTradeId = -1;

            var marketAccesses =
                JsonConvert.DeserializeObject <List <MarketAccess> >(File.ReadAllText("accessKeys.txt"));

            var huobiAccess = marketAccesses.First(e => e.Name == "Huobi");
            var btceAccess  = marketAccesses.First(e => e.Name == "BTCE");

            IMarket huobi = new Huobi(huobiAccess.AccessKey, huobiAccess.SecretKey);
            //huobi = new BTCeMarket(btceAccess.AccessKey, btceAccess.SecretKey);

            AlgoBase alogo      = new NaiveMarketMaker(huobi, HuobiMarket.btc, renderer);
            BcwTrade lastTrade  = null;
            TimeSpan timeOffset = new TimeSpan();
            DateTime lastTime   = new DateTime();

            while (true)
            {
                try
                {
                    List <BcwTrade> newTrades = huobi.GetPublicTrades(BcwMarket.huobibtccny, lastTradeId);
                    newTrades.Reverse();

                    HuobiMarketSummary depth  = huobi.GetMarketSummary(HuobiMarket.btc);
                    BcwTicker          ticker = huobi.GetTicker(BcwMarket.huobibtccny);
                    DateTime           now    = UnixTime.ConvertToDateTime(ticker.date) + timeOffset;

                    if (newTrades.Count > 0)
                    {
                        if (timeOffset.TotalSeconds == 0)
                        {
                            DateTime firstTradeDate = UnixTime.ConvertToDateTime(newTrades[0].date);
                            if (firstTradeDate < lastTime)
                            {
                                timeOffset = firstTradeDate - lastTime;
                            }
                        }

                        foreach (BcwTrade t in newTrades)
                        {
                            if (t.trade_type == BcwOrderType.ask)
                            {
                                // this condition means that a BUY ORDER was filled
                            }
                            else
                            {
                                // this condition means that a SELL ORDER was filled
                            }

                            renderer.AddDataPoint(depth.GetBidPrice(0), depth.GetAskPrice(0), t.price, UnixTime.ConvertToDateTime(t.date));
                        }

                        lastTrade   = newTrades.Last();
                        lastTradeId = newTrades.Last().tid;
                        now         = UnixTime.ConvertToDateTime(lastTrade.date);
                    }
                    else
                    {
                        renderer.AddDataPoint(depth.GetBidPrice(0), depth.GetAskPrice(0), lastTrade.price, now);
                    }


                    //
                    // update the algorithm
                    //

                    alogo.Update(now);
                }
                catch (HuobiApi.RetryCountExceededException)
                {
                }
                catch (Newtonsoft.Json.JsonReaderException e)
                {
                    Console.WriteLine(e.ToString());
                }

                Thread.Sleep(5000);
            }
        }
Пример #3
0
        static void Main(string[] args)
        {
            try
            {
                Console.SetBufferSize(200, 1000);

                #region Console Text
                Console.WriteLine(" >>> Crypto Stock Exchanges console >>> ");
                Console.WriteLine("");
                Console.WriteLine("Set current Api-Key: \"key key-string\"");
                Console.WriteLine("Set current Api-Secret: \"secret secret-string\"");
                Console.WriteLine("Format of api-request: \"apiName method endpoint parameters\"");
                Console.WriteLine("Launch thread example: \"cycle\"");
                Console.WriteLine("Set nonce amendment: \"amendment IntValue\"");
                Console.WriteLine("");
                Console.WriteLine(" Examples: ");

                Console.WriteLine("binance GET /api/v3/ticker/price !symbol=BTCUSDT");
                Console.WriteLine("binance DELETE /api/v3/order symbol=ETHUSDT&orderId=1");
                Console.WriteLine("binance GET /api/v1/depth !symbol=ETHUSDT&limit=50");
                Console.WriteLine("binance POST /api/v3/order symbol=ETHUSDT&timeInForce=GTC&side=BUY&type=LIMIT&quantity=1&price=1");

                Console.WriteLine("gate GET 1/orderBook/eth_usdt");
                Console.WriteLine("gate POST 1/private/buy currencyPair=eth_usdt&amount=1&rate=1");
                Console.WriteLine("gate POST 1/private/balances");

                Console.WriteLine("huobi GET /market/trade symbol=btcusdt");
                Console.WriteLine("huobi GET /v1/order/orders symbol=ethusdt&states=filled");

                Console.WriteLine("kucoin GET /v1/open/currencies");
                Console.WriteLine("kucoin GET /v1/account/USDT/balance");
                Console.WriteLine("kucoin POST /v1/order?symbol=ETH-USDT amount=1&price=1&type=BUY");

                Console.WriteLine("hitbtc GET /api/2/public/orderbook/BTCUSD?limit=5");
                Console.WriteLine("hitbtc AUTH-GET /api/2/trading/balance");
                Console.WriteLine("hitbtc AUTH-POST /api/2/order {\"symbol\":\"ethbtc\",\"side\":\"sell\",\"quantity\":0.063,\"price\":0.046016}");

                Console.WriteLine("");
                Console.WriteLine("Enter empty string for exit");
                #endregion

                string line;

                // Set your api-key & api-secret here (for signature-type requests) or use console
                string key    = String.Empty;
                string secret = String.Empty;

                string response = String.Empty;
                Int64  noncAm   = 0;

                do
                {
                    line = Console.ReadLine();
                    var parts = line.Trim(new char[] { '\t', ' ' }).Split(' ');
                    parts[0] = parts[0].ToLower();
                    string content = parts.buildString(" ", 1);
                    switch (parts[0])
                    {
                    case "amendment":
                        noncAm = Convert.ToInt64(content);
                        break;

                    case "cycle":
                        exampleThread          = new Thread(exampleThreadLoop);
                        exampleThread.Priority = ThreadPriority.Highest;
                        exampleThread.Start();
                        break;

                    case "key":
                        key = content;
                        break;

                    case "secret":
                        secret = content;
                        break;

                    case "binance":
                        using (var binance = new Binance(key, secret))
                        {
                            binance.OnResponseReceived += Api_OnResponseReceived;
                            binance.nonceAmendment      = noncAm;
                            binance.sendReq(content);
                        }
                        break;

                    case "gate":
                        using (var gate = new Gate(key, secret))
                        {
                            gate.OnResponseReceived += Api_OnResponseReceived;
                            gate.sendReq(content);
                        }
                        break;

                    case "huobi":
                        using (var huobi = new Huobi(key, secret))
                        {
                            huobi.OnResponseReceived += Api_OnResponseReceived;
                            huobi.sendReq(content);
                        }
                        break;

                    case "kucoin":
                        using (var kucoin = new Kucoin(key, secret))
                        {
                            kucoin.OnResponseReceived += Api_OnResponseReceived;
                            kucoin.nonceAmendment      = noncAm;
                            kucoin.sendReq(content);
                        }
                        break;

                    case "hitbtc":
                        using (var hitbtc = new Hitbtc(key, secret))
                        {
                            hitbtc.OnResponseReceived += Api_OnResponseReceived;
                            hitbtc.sendReq(content);
                        }
                        break;

                    default:
                        Console.WriteLine("Wrong command");
                        break;
                    }
                } while (line.Length > 0);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
                Console.ReadLine();
            }
        }
Пример #4
0
		static void Main()
		{
			// attach graph renderer
			Rendering renderer = new Rendering(800, 400);
            long lastTradeId = -1;

		    var marketAccesses =
                JsonConvert.DeserializeObject<List<MarketAccess>>(File.ReadAllText("accessKeys.txt"));

		    var huobiAccess = marketAccesses.First(e => e.Name == "Huobi");
		    var btceAccess = marketAccesses.First(e => e.Name == "BTCE");

            IMarket huobi = new Huobi(huobiAccess.AccessKey, huobiAccess.SecretKey);
            //huobi = new BTCeMarket(btceAccess.AccessKey, btceAccess.SecretKey);
       
			AlgoBase alogo = new NaiveMarketMaker(huobi, HuobiMarket.btc, renderer);
			BcwTrade lastTrade = null;
			TimeSpan timeOffset = new TimeSpan();
			DateTime lastTime = new DateTime();

			while (true)
			{
				try
				{
					List<BcwTrade> newTrades = huobi.GetPublicTrades(BcwMarket.huobibtccny, lastTradeId);
					newTrades.Reverse();

					HuobiMarketSummary depth = huobi.GetMarketSummary(HuobiMarket.btc);
					BcwTicker ticker = huobi.GetTicker(BcwMarket.huobibtccny);
					DateTime now = UnixTime.ConvertToDateTime(ticker.date) + timeOffset;

					if (newTrades.Count > 0)
					{
						if (timeOffset.TotalSeconds == 0)
						{
							DateTime firstTradeDate = UnixTime.ConvertToDateTime(newTrades[0].date);
							if (firstTradeDate < lastTime)
							{
								timeOffset = firstTradeDate - lastTime;
							}
						}

						foreach (BcwTrade t in newTrades)
						{
							if (t.trade_type == BcwOrderType.ask)
							{
								// this condition means that a BUY ORDER was filled
							}
							else
							{
								// this condition means that a SELL ORDER was filled
							}

							renderer.AddDataPoint(depth.GetBidPrice(0), depth.GetAskPrice(0), t.price, UnixTime.ConvertToDateTime(t.date));
						}

						lastTrade = newTrades.Last();
						lastTradeId = newTrades.Last().tid;
						now = UnixTime.ConvertToDateTime(lastTrade.date);
					}
					else
					{
						renderer.AddDataPoint(depth.GetBidPrice(0), depth.GetAskPrice(0), lastTrade.price, now);
					}
				

					//
					// update the algorithm
					//

					alogo.Update(now);
				}
				catch (HuobiApi.RetryCountExceededException)
				{
				}
				catch (Newtonsoft.Json.JsonReaderException e)
				{
					Console.WriteLine(e.ToString());
				}

				Thread.Sleep(5000);
			}		
		}