private MessageOpenOrder CreateOpenOrder(HitOrder hitOrder) { var message = new MessageOpenOrder(hitOrder.Symbol) { AccountId = ACCOUNT, ExpirationTime = hitOrder.ExpireTime, FilledQuantity = (double)hitOrder.CumulativeQuantity, LastUpdateTime = hitOrder.UpdatedAt == default ? hitOrder.CreatedAt : hitOrder.UpdatedAt, OrderId = hitOrder.ClientOrderId, OrderTypeId = this.ConvertOrderType(hitOrder.OrderType), Side = hitOrder.Side == HitSide.Buy ? Side.Buy : Side.Sell, Status = this.ConvertOrderStatus(hitOrder.Status), TimeInForce = this.ConvertTimeInForce(hitOrder.TimeInForce), TotalQuantity = (double)hitOrder.Quantity }; if (hitOrder.OrderType == HitOrderType.Limit || hitOrder.OrderType == HitOrderType.StopLimit) { message.Price = (double)hitOrder.Price; } if (hitOrder.OrderType == HitOrderType.StopMarket || hitOrder.OrderType == HitOrderType.StopLimit) { message.TriggerPrice = (double)hitOrder.StopPrice; } return(message); }
public void WalkPath(Path path) { SnapshotPath snapshot = GetSnapshotPath(path); if (!(snapshot.Percentage > 100)) { return; } if (!Tradable(snapshot)) { return; } if (!snapshot.Tradable(MinTotalTrade)) { return; } string tradeHistory = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "\t"; List <long> lstTimeElapsed = new List <long>(); for (int i = 0; i < 5; i++) { if (snapshot.LstStep.Count > i) { tradeHistory += snapshot.LstStep[i].Coin + "\t"; } else { tradeHistory += "\t"; } } tradeHistory += snapshot.Percentage.ToString("0.#####") + "\t" + snapshot.StartVolume.ToString("0.########") + "\t" + snapshot.FinalVolume.ToString("0.########") + "\t"; Stopwatch watch = new Stopwatch(); Stopwatch watchTrade = new Stopwatch(); Console.WriteLine(); Console.BackgroundColor = ConsoleColor.DarkCyan; Console.WriteLine("Path Selected: " + snapshot.ToString()); Console.ResetColor(); Console.WriteLine("Starting PATH..."); for (int i = 0; i < snapshot.LstStep.Count - 1; i++) { watch.Restart(); string output = (i + 1) + ") "; output += (snapshot.LstStep[i].Coin + (snapshot.LstStep[i + 1].Action == "BUY" ? "-->" : "<--") + snapshot.LstStep[i + 1].Coin).PadRight(20); output += ("Amount: " + (snapshot.LstStep[i + 1].Action == "BUY" ? (snapshot.LstStep[i + 1].AmountWithOutFee.ToString("0.######") + snapshot.LstStep[i + 1].Coin) : (snapshot.LstStep[i].Amount.ToString("0.######")) + snapshot.LstStep[i].Coin)).PadRight(25); output += ("Price: " + snapshot.LstStep[i + 1].Price.ToString("0.######") + (snapshot.LstStep[i + 1].Action == "BUY" ? snapshot.LstStep[i].Coin : snapshot.LstStep[i + 1].Coin)).PadRight(25); output += "Total: " + (snapshot.LstStep[i + 1].Action == "BUY" ? (snapshot.LstStep[i].Amount.ToString("0.######") + snapshot.LstStep[i].Coin) : (snapshot.LstStep[i + 1].Amount.ToString("0.######") + snapshot.LstStep[i + 1].Coin)); Console.WriteLine(output); HitOrder trade = null; watchTrade.Restart(); trade = DoTrade(snapshot.LstStep[i], snapshot.LstStep[i + 1]); watchTrade.Stop(); lstTimeElapsed.Add(watchTrade.ElapsedMilliseconds); HitOrder openOrder = null; bool isFilled = false; try { do { HitResponse <HitOrder> resultOpenOrder; if (trade.Status == HitOrderStatus.Filled) { isFilled = true; Console.WriteLine("ALL bought/selled"); continue; } else { resultOpenOrder = _hitbtcRestClient.GetActiveOrderByClientIdAsync(trade.ClientOrderId).Result; openOrder = resultOpenOrder.Result; if (resultOpenOrder.Result == null || openOrder.Status == HitOrderStatus.Filled) { isFilled = true; Console.WriteLine("ALL bought/selled"); continue; } Console.WriteLine(" Exchange: " + openOrder.Symbol + " OrderType: " + openOrder.OrderType + " isOpen: " + openOrder.Status); System.Threading.Thread.Sleep(200); } if (watch.ElapsedMilliseconds > _waitingTime) { // Reset(); tradeHistory += "NO" + "\t"; tradeHistory += UpdatedAmount + "\t"; foreach (var time in lstTimeElapsed) { tradeHistory += time + "\t"; } tradeHistory += "\r\n"; using (StreamWriter writetext = File.AppendText("C:\\log\\tradehistory.txt")) { writetext.Write(tradeHistory); writetext.Close(); } return; } } while (!isFilled); } catch (Exception e) { Console.WriteLine("Eccezione while: " + e.ToString()); // Reset(); tradeHistory += "NO" + "\t"; tradeHistory += UpdatedAmount + "\t"; foreach (var time in lstTimeElapsed) { tradeHistory += time + "\t"; } tradeHistory += "\r\n"; using (StreamWriter writetext = File.AppendText("C:\\log\\tradehistory.txt")) { writetext.Write(tradeHistory); writetext.Close(); } return; } } // Reset(); tradeHistory += "SI" + "\t"; tradeHistory += UpdatedAmount + "\t"; foreach (var time in lstTimeElapsed) { tradeHistory += time + "\t"; } tradeHistory += "\r\n"; using (StreamWriter writetext = File.AppendText("C:\\log\\tradehistory.txt")) { writetext.Write(tradeHistory); writetext.Close(); } }