Пример #1
0
        static IDictionary <string, Tuple <float, float> > UpdateDistributionTable(IList <string> trackedAssets, IDictionary <string, float> targetDistribution)
        {
            spotAccountInformation = GetSpotAccountInformation();

            Console.WriteLine("Initial balances in Bitcoin: ");
            IDictionary <string, float> assetBalancesInBitcoin = new Dictionary <string, float>();

            foreach (string asset in trackedAssets)
            {
                assetBalancesInBitcoin.Add(asset, GetValueInBitcoin(asset));
            }
            foreach (KeyValuePair <string, float> kvp in assetBalancesInBitcoin)
            {
                Console.WriteLine(kvp.Key + " : " + kvp.Value);
            }
            Console.WriteLine();

            Console.WriteLine("Distribution table: ");
            float totalBitcoinValue = assetBalancesInBitcoin.Sum(x => x.Value);

            IDictionary <string, Tuple <float, float> > distribuitonTable = new Dictionary <string, Tuple <float, float> >();

            foreach (string asset in trackedAssets)
            {
                distribuitonTable.Add(asset, new Tuple <float, float>(targetDistribution[asset], ((float)assetBalancesInBitcoin[asset]) / totalBitcoinValue));
            }

            return(distribuitonTable);
        }
Пример #2
0
        static void Trade(string side, string pair, string quantityParam, float quantity)
        {
            var           client = new RestClient("https://api.binance.com/");
            IRestResponse response;
            var           request = new RestRequest("/api/v3/order/test", Method.POST);

            request.AddParameter("symbol", pair);
            request.AddParameter("side", side);
            request.AddParameter("type", "MARKET");
            request.AddParameter(quantityParam, Math.Round(quantity, 8).ToString("N8"));
            request.AddParameter("timestamp", GetTimestamp() - 2000);
            request.AddParameter("recvWindow", 60000);
            string parameterlist = "";

            foreach (Parameter p in request.Parameters)
            {
                parameterlist = parameterlist + p.ToString() + "&";
            }
            parameterlist = parameterlist.Substring(0, parameterlist.Length - 1);
            request.AddParameter("signature", GetHMAC(parameterlist, secretKey));
            request.AddHeader("X-MBX-APIKEY", apiKey);
            response = client.Execute(request);
            var           content       = response.Content;
            ErrorResponse errorResponse = JsonConvert.DeserializeObject <ErrorResponse>(content);

            if (errorResponse.code < 0)
            {
                Console.WriteLine("Failed order: Side: {0}; Pair: {1}; {2}: {3}", side, pair, quantityParam, quantity.ToString("N8"));
                throw new ErrorResponseException(errorResponse);
            }
            else
            {
                Console.WriteLine("Order passed filter: Side: {0}; Pair: {1}; {2}: {3}.. Do you want to continue? (y/n)", side, pair, quantityParam, quantity.ToString("N8"));
                if (Console.ReadLine().Equals("y"))
                {
                    request.Resource = "/api/v3/order";
                    response         = client.Execute(request);
                    content          = response.Content;
                    errorResponse    = JsonConvert.DeserializeObject <ErrorResponse>(content);
                    if (errorResponse.code < 0)
                    {
                        Console.WriteLine("Failed order: Side: {0}; Pair: {1}; {2}: {3}", side, pair, quantityParam, quantity.ToString("N8"));
                        throw new ErrorResponseException(errorResponse);
                    }
                    else
                    {
                        spotAccountInformation = GetSpotAccountInformation();
                    }
                }
                else
                {
                    Console.WriteLine("Order aborted.");
                    return;
                }
                Console.WriteLine("Successful order: Side: {0}; Pair: {1}; {2}: {3}", side, pair, quantityParam, quantity.ToString("N8"));
            }
        }
Пример #3
0
        static SpotAccountInformation GetSpotAccountInformation()
        {
            var client  = new RestClient("https://api.binance.com/");
            var request = new RestRequest("/api/v3/account", Method.GET);

            AddSpotAccountRequestParams(ref request);
            request.AddHeader("X-MBX-APIKEY", apiKey);

            IRestResponse response = client.Execute(request);

            if (!response.IsSuccessful)
            {
                Console.WriteLine("Unsuccesful account information GET request.");
                // throw new
                Environment.Exit(-2);
            }
            var content = response.Content;
            SpotAccountInformation spotAccountInformation = JsonConvert.DeserializeObject <SpotAccountInformation>(content);

            return(spotAccountInformation);
        }
Пример #4
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("No parameters are provided. \nPlease enter them now in the following format: [apiKey] [secretKey] [primary asset] [seconday asset] [asset1] [target1] [asset2] [target2]..");
                string inputText = Console.ReadLine();
                args = inputText.Split(' ');
            }

            try
            {
                apiKey    = args[0];
                secretKey = args[1];
            } catch (ArgumentNullException)
            {
                Console.WriteLine("Not all keys are provided.");
                Environment.Exit(-1);
            }

            try
            {
                primaryAsset   = args[2];
                secondaryAsset = args[3];
            } catch (ArgumentNullException)
            {
                Console.WriteLine("The primary or secondary asset is not provided.");
                Environment.Exit(-1);
            }

            spotAccountInformation = GetSpotAccountInformation();

            IList <string> trackedAssets = new List <string>();
            IDictionary <string, float> targetDistribution = new Dictionary <string, float>();

            if ((args.Length % 2) != 0 || args.Length == 2)
            {
                Console.Write("The list of distribution targets is incomplete or empty. Entered list: ");
                for (int i = 2; i <= args.Length; i++)
                {
                    Console.Write(args[i] + " ");
                }
                Environment.Exit(-1);
            }

            for (int i = 4; i < args.Length; i += 2)
            {
                trackedAssets.Add(args[i].ToString());
                targetDistribution.Add(args[i].ToString(), float.Parse(args[i + 1]) / 100);
            }

            Console.WriteLine("Initial balances in Bitcoin: ");
            IDictionary <string, float> assetBalancesInBitcoin = new Dictionary <string, float>();

            foreach (string asset in trackedAssets)
            {
                Console.WriteLine("Enter additional amount for " + asset + " in BTC: ");
                float additionalAmound = 0;
                try
                {
                    additionalAmound = float.Parse(Console.ReadLine());
                }
                catch (System.FormatException)
                {
                    // ignore
                }
                assetBalancesInBitcoin.Add(asset, GetValueInBitcoin(asset) + additionalAmound);
            }
            foreach (KeyValuePair <string, float> kvp in assetBalancesInBitcoin)
            {
                Console.WriteLine(kvp.Key + " : " + kvp.Value);
            }
            Console.WriteLine();

            Console.WriteLine("Distribution table: ");
            Console.WriteLine("Asset: target, current percentage -> deviation(Δ)");
            float totalBitcoinValue = assetBalancesInBitcoin.Sum(x => x.Value);

            IDictionary <string, Tuple <float, float> > distribuitonTable = new Dictionary <string, Tuple <float, float> >();

            foreach (string asset in trackedAssets)
            {
                distribuitonTable.Add(asset, new Tuple <float, float>(targetDistribution[asset], ((float)assetBalancesInBitcoin[asset]) / totalBitcoinValue));
            }
            foreach (KeyValuePair <string, Tuple <float, float> > kvp in distribuitonTable)
            {
                Console.WriteLine(kvp.Key + " : " + kvp.Value.ToString() + " -> " + (kvp.Value.Item2 - kvp.Value.Item1) * 100 + "%");
            }
            Console.WriteLine("Total balance in Bitcoin: " + totalBitcoinValue);

            Console.WriteLine("Press any key to continue.");
            Console.ReadKey();
            Console.WriteLine();

            foreach (string asset in trackedAssets)
            {
                HandleDifference(asset, ((distribuitonTable[asset].Item2 - distribuitonTable[asset].Item1) * totalBitcoinValue));
            }

            Console.WriteLine("Press any key to continue.");
            Console.ReadKey();
        }