void Queue(StinkBid stinkBid) { Console.WriteLine($"Queued sb for execution: {stinkBid.CurrencyPair} at {stinkBid.TriggerPrice}"); var receiver = MyActorSystem.Current.GetExecutor(); receiver.Tell(stinkBid); }
bool OnStinkBidReceived(StinkBid stinkBid) { if (stinkBid == null) { return(false); } ExecuteOrder(stinkBid).PipeTo(Self); return(true); }
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); } }
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); }