예제 #1
0
 public void SettingEmptyValuesForDefaultAPICredentials_Should_ThrowException(string key, string secret)
 {
     // arrange
     // act
     // assert
     Assert.Throws(typeof(ArgumentException), () => BittrexDefaults.SetDefaultApiCredentials(key, secret));
 }
예제 #2
0
        // Assumes use of C# 7.1
        public static async Task Main()
        {
            BittrexDefaults.SetDefaultApiCredentials("APIKEY", "APISECRET");
            BittrexDefaults.SetDefaultLogOutput(Console.Out);
            BittrexDefaults.SetDefaultLogVerbosity(LogVerbosity.Debug);

            using (var client = new BittrexClient())
            {
                // public
                var markets = await client.GetMarketsAsync();

                var currencies = await client.GetCurrenciesAsync();

                var price = await client.GetTickerAsync("BTC-ETH");

                var marketSummary = await client.GetMarketSummaryAsync("BTC-ETH");

                var marketSummaries = await client.GetMarketSummariesAsync();

                var orderbook = await client.GetOrderBookAsync("BTC-ETH");

                var marketHistory = await client.GetMarketHistoryAsync("BTC-ETH");

                // private
                var placedOrder = await client.PlaceOrderAsync(OrderType.Sell, "BTC-NEO", 1, 1);

                var openOrders = await client.GetOpenOrdersAsync("BTC-NEO");

                var orderInfo = await client.GetOrderAsync(placedOrder.Result.Uuid);

                var canceledOrder = await client.CancelOrderAsync(placedOrder.Result.Uuid);

                var orderHistory = await client.GetOrderHistoryAsync("BTC-NEO");

                var balance = await client.GetBalanceAsync("NEO");

                var balances = await client.GetBalancesAsync();

                var depositAddress = await client.GetDepositAddressAsync("BTC");

                var withdraw = await client.WithdrawAsync("TEST", 1, "TEST", "TEST");

                var withdrawHistory = await client.GetWithdrawalHistoryAsync();

                var depositHistory = await client.GetDepositHistoryAsync();
            }

            // Websocket
            var socketClient = new BittrexSocketClient();
            var subcribtion  = socketClient.SubscribeToMarketDeltaStream("BTC-ETH", summary =>
            {
                Console.WriteLine($"BTC-ETH: {summary.Last}");
            });

            Console.ReadLine();
            socketClient.UnsubscribeFromStream(subcribtion.Result);
        }
예제 #3
0
        public BittrexAccount(string coin,
                              decimal tradingFee,
                              decimal bitcoinTransferFee)
        {
            BittrexDefaults.SetDefaultApiCredentials("APIKEY", "APISECRET");

            this.TradeCoin = new Coin {
                Token = coin
            };
            this.Bitcoin = new Coin {
                Token = "BTC", TransferFee = bitcoinTransferFee
            };
            this.TradingFee = tradingFee;
        }
예제 #4
0
        private async Task OnStarting()
        {
            var startupService = Container.Resolve <StartupCheckingService>();
            var context        = Container.Resolve <CryptoGramBotDbContext>();

            await DbInitializer.Initialize(context);

            var limiterTotal       = new RateLimiterPerEndpoint(1, TimeSpan.FromSeconds(1));
            var limiterPerEndpoint = new RateLimiterPerEndpoint(1, TimeSpan.FromSeconds(1));

            BittrexDefaults.AddDefaultRateLimiter(limiterTotal);
            BittrexDefaults.AddDefaultRateLimiter(limiterPerEndpoint);

            startupService.Start();
        }
예제 #5
0
        public void SettingDefaults_Should_ImpactNewClients()
        {
            // arrange
            var stringBuilder = new StringBuilder();

            BittrexDefaults.SetDefaultApiCredentials("test", "test");
            BittrexDefaults.SetDefaultLogOutput(new StringWriter(stringBuilder));
            BittrexDefaults.SetDefaultLogVerbosity(LogVerbosity.Debug);

            var client = PrepareClient(JsonConvert.SerializeObject(new BittrexPrice()));

            // act
            Assert.DoesNotThrow(() => client.GetBalances());

            // assert
            Assert.IsFalse(string.IsNullOrEmpty(stringBuilder.ToString()));
        }
예제 #6
0
        public BittrexAccount(string coin,
                              decimal tradingFee,
                              decimal bitcoinTransferFee,
                              string apiKey,
                              string apiSecret,
                              ILogger <BittrexAccount> logger)
        {
            BittrexDefaults.SetDefaultApiCredentials(apiKey, apiSecret);

            this.TradeCoin = new Coin {
                Token = coin
            };
            this.Bitcoin = new Coin {
                Token = "BTC", TransferFee = bitcoinTransferFee
            };
            this.TradingFee = tradingFee;
            this._logger    = logger;
        }
예제 #7
0
 public static void Setup(TestContext context)
 {
     BittrexDefaults.SetDefaultApiCredentials(
         ConfigurationManager.AppSettings["BittrexApiKey"],
         ConfigurationManager.AppSettings["BittrexApiSecret"]);
 }
예제 #8
0
 static BittrexExchange()
 {
     BittrexDefaults.SetDefaultApiCredentials(AppSettings.Default.BittrexKey, AppSettings.Default.BittrexSecret);
 }
예제 #9
0
        private static async Task <int> PlaceOrder(
            OrderType type,
            string workingCoin,
            CommandArgument amountToUseArgument,
            CommandArgument bidOrAskArgument)
        {
            BittrexDefaults.SetDefaultApiCredentials(Program.ApiKey.Value(), Program.ApiSecret.Value());
            var client = new BittrexClient();

            if (string.IsNullOrEmpty(workingCoin))
            {
                Console.WriteLine($"Speficy a valid Market.");
                return(-1);
            }
            const string referenceCoin = "BTC";

            Console.WriteLine("Getting market info ...");
            var marketSummary = await client.GetMarketSummaryAsync($"{referenceCoin}-{workingCoin}");

            if (!marketSummary.Success)
            {
                Console.WriteLine($"{referenceCoin}-{workingCoin} is not a valid Market.");
                Console.WriteLine(marketSummary.Error.ErrorMessage);
                return(-1);
            }

            var originCoin = type == OrderType.Buy ? referenceCoin : workingCoin;

            Console.WriteLine($"Getting your wallet balance for {originCoin}...");
            var originBalance = await client.GetBalanceAsync(originCoin);

            if (!originBalance.Success)
            {
                Console.WriteLine($"Something happened trying to get your balance for {originCoin}.");
                Console.WriteLine(originBalance.Error.ErrorMessage);
                return(-1);
            }

            if (0.000009m >= originBalance.Result.Available.GetValueOrDefault(0))
            {
                Console.WriteLine($"The available balance ({originBalance.Result.Available}) is too low.");
                return(-1);
            }
            Console.WriteLine($"Current available balance {originCoin} {originBalance.Result.Available}.");


            Console.WriteLine("General cheking of arguments ...");

            var amountToUse = originBalance.Result.Available.GetValueOrDefault();
            var useAll      = amountToUseArgument.Value.ToLowerInvariant() == "all";

            if (!useAll && (!decimal.TryParse(amountToUseArgument.Value, out amountToUse) || amountToUse <= 0.0m))
            {
                Console.WriteLine($"{workingCoin} {amountToUseArgument.Value} is not a valid quantity.");
                return(-1);
            }
            if (!useAll && amountToUse > originBalance.Result.Available)
            {
                Console.WriteLine(
                    $"The amount to use in the origin wallet ({amountToUse:N9}) " +
                    $"is greater than the available ({originBalance.Result.Available}).");
                return(-1);
            }

            Console.WriteLine("Verifying amounts ...");
            var useLast = bidOrAskArgument.Value.ToLowerInvariant() == "last";

            if ((!decimal.TryParse(bidOrAskArgument.Value, out var bidAmount) || bidAmount <= 0.0m) &&
                !useLast)
            {
                Console.WriteLine($"{bidOrAskArgument.Value} is not a valid bid amount.");
                return(-1);
            }

            if (useLast)
            {
                bidAmount = marketSummary.Result.Last.GetValueOrDefault(0);
            }

            var buyQuantity = amountToUse / bidAmount;

            buyQuantity /= 100;
            buyQuantity *= 25;
            var quantity = type == OrderType.Sell
                ? amountToUse
                : Math.Round(amountToUse / bidAmount - buyQuantity, 5, MidpointRounding.ToEven);

            if (quantity <= 0.000000m)
            {
                Console.WriteLine($"The quantity {workingCoin} {amountToUse} is too low to place an order.");
                return(-1);
            }

            Console.WriteLine($"Will {(type == OrderType.Buy ? "buy" : "sell")} {(type == OrderType.Buy ? workingCoin : referenceCoin)} {quantity} " +
                              $"using {originCoin} {amountToUse}. " +
                              $"Rate: {originCoin} {bidAmount}/{workingCoin} 1.");

            var market         = type == OrderType.Sell ? marketSummary.Result.MarketName : $"{workingCoin}-{referenceCoin}";
            var newOrderStatus = await client.PlaceOrderAsync(type, marketSummary.Result.MarketName, quantity, bidAmount);

            if (!newOrderStatus.Success)
            {
                Console.WriteLine($"Order can't be placed.");
                Console.WriteLine(newOrderStatus.Error.ErrorMessage);
                return(-1);
            }
            Console.WriteLine($"Order placed. UUID = {newOrderStatus.Result.Uuid}");
            return(0);
        }
예제 #10
0
 private static void SetBittrexCredentials()
 {
     BittrexDefaults.SetDefaultApiCredentials(
         ConfigurationManager.AppSettings["BittrexApiKey"],
         ConfigurationManager.AppSettings["BittrexApiSecret"]);
 }