/// <summary> /// Places orders to follow the conversions /// </summary> /// <param name="chain"></param> /// <param name="realTrading">Whether to place the orders for real or not</param> private void FollowChain(List <ArbitrageAction> chain, bool realTrading) { OnReportProgress("=============================="); OnReportProgress(DateTime.Now.ToString("HH:mm:ss")); for (int i = 1; i < chain.Count; i++) { if (_mustStop) { return; } var ac = chain[i].Data; var stepMsg = string.Format("Step {1}/{2} - {0}", ac.Description, i, chain.Count - 1); OnReportProgress(stepMsg); int orderId = 0; if (realTrading) { var orderRes = ac.IsBuyOrder ? _proxy.Trade(ac.Pair, TradeType.Buy, ac.Rate, ac.UnitsCurrency2) : _proxy.Trade(ac.Pair, TradeType.Sell, ac.Rate, ac.UnitsCurrency1); orderId = orderRes.OrderId; } else { orderId = new Random().Next(300); } OnReportProgress(string.Format("Order #{0} placed. Waiting for its execution", orderId)); while (!_mustStop) { System.Threading.Thread.Sleep(500); var openOrders = _proxy.GetOpenOrders(ac.Pair); if (!openOrders.List.Any(o => o.Key == orderId)) { OnReportProgress(string.Format("Order #{0} executed", orderId)); break; } else { System.Diagnostics.Debug.WriteLine(string.Format("Waiting for order #{0} to be executed", orderId)); } } } OnReportProgress(string.Format("Finished")); }
/// <summary> /// Gets all open orders /// </summary> /// <param name="pair">The currency pair</param> /// <returns>A list of open orders</returns> public CallResult <OpenOrders> GetOpenOrders(CurrencyPair pair) { return(CallProxy(() => _proxy.GetOpenOrders(pair.ToBtcePair()), orders => new OpenOrders { List = orders.List.Select(o => new OrderDetails { Amount = o.Value.Amount, Id = o.Key, Price = o.Value.Rate, DateTime = BtcE.Utils.UnixTime.ConvertToDateTime(o.Value.TimestampCreated), Type = o.Value.Type == TradeType.Sell ? OrderType.Sell : OrderType.Buy }).ToList() })); }