Esempio n. 1
0
        void Queue(StinkBid stinkBid)
        {
            Console.WriteLine($"Queued sb for execution: {stinkBid.CurrencyPair} at {stinkBid.TriggerPrice}");
            var receiver = MyActorSystem.Current.GetExecutor();

            receiver.Tell(stinkBid);
        }
Esempio n. 2
0
        bool OnStinkBidReceived(StinkBid stinkBid)
        {
            if (stinkBid == null)
            {
                return(false);
            }

            ExecuteOrder(stinkBid).PipeTo(Self);

            return(true);
        }
Esempio n. 3
0
        async Task <ulong> ExecuteOrder(StinkBid stinkBid)
        {
            // time roundtrip for getting wallet balance
            try
            {
                var sw = Stopwatch.StartNew();

                // TODO: update DB with stinkbid order status update to "Queued"
                var user = await GetUser(stinkBid.UserId);

                var auth   = new Authenticator(user.PublicKey, user.PrivateKey);
                var client = new ApiHttpClient(auth);

                var balances = await client.Wallet.GetCompleteBalances();

                var btcBalance   = balances["BTC"];
                var availableBtc = btcBalance.Available;

                var allowance      = Math.Min(stinkBid.AmountInBtc, availableBtc);
                var rate           = stinkBid.BuyPrice;
                var purchaseAmount = Math.Round(allowance / rate, 8);

                sw.Stop();
                var balanceRetrievalTime = sw.Elapsed;

                sw.Restart();
                var orderNumber = await client.Trading.Buy(stinkBid.CurrencyPair, rate, purchaseAmount);

                //TODO: update DB with stinkbid order status update to "Submitted"
                sw.Stop();

                var orderExecutiontime = sw.Elapsed;

                Console.WriteLine($"Order exec: User: {stinkBid.UserId} at {rate} for {purchaseAmount} units");
                Console.WriteLine($"diagnosits: balance retrieval: {balanceRetrievalTime}  orderExecution: {orderExecutiontime}\r\n\r\n");
                return(orderNumber);
            }
            catch (Exception ex)
            {
                Console.Write(ex);
                return(0);
            }
        }
Esempio n. 4
0
        bool OnStinkBidReceived(StinkBid stinkBid)
        {
            if (stinkBid == null || stinkBid.CurrencyPair != currencyPair)
            {
                return(false);
            }

            var binarySearchIndex = stinkBids.BinarySearch(stinkBid, stinkBidComparer);

            if (binarySearchIndex < 0)
            {
                stinkBids.Insert(~binarySearchIndex, stinkBid);
            }
            else
            {
                stinkBids.Insert(binarySearchIndex, stinkBid);
            }

            Console.WriteLine($"SB received for monitor {currencyPair}: {currencyPair} at TriggerPrice {stinkBid.TriggerPrice}");

            return(true);
        }