public async Task ExecuteStopLoss(StopLoss stopLoss) { if (!stopLoss.virtualSL) { var lowestRate = minimumTradeSatoshis / stopLoss.Quantity; LimitOrderResponse orderResp = await BtrexREST.PlaceLimitOrder(stopLoss.MarketDelta, "sell", stopLoss.Quantity, lowestRate); if (!orderResp.success) { Trace.WriteLine(string.Format(" !!!!ERR ExecuteStopLoss-PLACE-ORDER1>> " + orderResp.message)); Trace.WriteLine(string.Format(" QTY: {1} ... STOP-LOSS RATE: {2}", stopLoss.Quantity, stopLoss.StopRate)); //REDUNTANT (FAILSAFE) CALL ON INITIAL CALL FAILURE orderResp = await BtrexREST.PlaceLimitOrder(stopLoss.MarketDelta, "sell", stopLoss.Quantity, lowestRate); if (!orderResp.success) { Trace.WriteLine(" !!!!ERR ExecuteStopLoss-PLACE-ORDER1.2ndTry>> " + orderResp.message); Trace.WriteLine(string.Format(" QTY: {1} ... STOP-LOSS RATE: {2}", stopLoss.Quantity, stopLoss.StopRate)); return; } } Thread.Sleep(1500); var order = await BtrexREST.GetOrder(orderResp.result.uuid); if (!order.success) { Trace.WriteLine(" !!!!ERR ExecuteStopLoss-GET-ORDER: " + order.message); } stopLoss.ExecutionCallback(order.result, stopLoss.CandlePeriod); } else { var vSell = new GetOrderResult() { Exchange = stopLoss.MarketDelta, Quantity = stopLoss.Quantity, PricePerUnit = BtrexData.Markets[stopLoss.MarketDelta].TradeHistory.RecentFills.Last().Rate * 0.9975M, Closed = DateTime.UtcNow }; stopLoss.ExecutionCallback(vSell, stopLoss.CandlePeriod); } }
public async Task ExecuteNewOrder(NewOrder ord) { Trace.WriteLine(string.Format("%%%%PLACING ORDER1: {0} {1} ... QTY: {2} ... RATE: {3} ", ord.BUYorSELL, ord.MarketDelta, ord.Qty, ord.Rate)); //PLACE INITIAL ORDER: var orderResp = await BtrexREST.PlaceLimitOrder(ord.MarketDelta, ord.BUYorSELL, ord.Qty, ord.Rate); if (!orderResp.success) { orderResp = await BtrexREST.PlaceLimitOrder2(ord.MarketDelta, ord.BUYorSELL, ord.Qty, ord.Rate); if (!orderResp.success) { Trace.WriteLine(" !!!!ERR ExecuteNewOrder-PLACE-ORDER1>> " + orderResp.message); Trace.WriteLine(string.Format("{0} {3} QTY: {1} ... RATE: {2}", ord.MarketDelta, ord.Qty, ord.Rate, ord.BUYorSELL)); return; } } //Wait for server processing time and then call order data: Thread.Sleep(1000); var getOrder1 = await BtrexREST.GetOrder(orderResp.result.uuid); if (!getOrder1.success) { Trace.WriteLine(" !!!!ERR ExecuteNewOrder-GET-ORDER1: " + getOrder1.message); } var totalQty = 0M; var totalReserved = 0M; if (getOrder1.result.Type.ToUpper() == "LIMIT_SELL") { totalQty = getOrder1.result.Quantity; totalReserved = getOrder1.result.Price; } else if (getOrder1.result.Type.ToUpper() == "LIMIT_BUY") { totalReserved = getOrder1.result.Reserved; totalQty = getOrder1.result.Quantity - getOrder1.result.QuantityRemaining; } //Enter Order Data into Dictionary var order = new OpenOrder(getOrder1.result, totalQty, totalReserved, ord.DataUpdateCallback, ord.ExecutionCompleteCallback, ord.CandlePeriod); RegisterOpenOrder(order, ord.UniqueID); }