public void openGapOp() { int quantidade = Convert.ToInt32(Performance.Gross()) / margemGainAumentarCont; if (quantidade > limiteMaximoContratos) { quantidade = limiteMaximoContratos - 1; } NewOrderRequest req = new NewOrderRequest(); //Compra if ((m_CurBarDat.Close(1) - m_CurBarDat.Close(0)) < 0) { req.Account = Accounts.Current; req.Amount = 1 + quantidade; req.Instrument = Instruments.Current; req.MarketRange = 5; req.Price = m_CurBarDat.Close(1) - 0.5; req.Side = Operation.Buy; req.Type = OrdersType.Limit; req.StopLossOffset = 2.5; req.TakeProfitOffset = 2; } ord_Id = Orders.Send(req); }
public async Task <(bool state, object response)> createOrder(NewOrderRequest request) { var UserId = _httpContext.HttpContext.User.FindFirst(OpenIdConnectConstants.Claims.Subject)?.Value; if (UserId == null) { return(false, new { message = "Unauthorized Request" }); } Order order = new Order { UserId = Guid.Parse(UserId), shippingAddress = request.shippingAddress, totalPrice = request.totalPrice, Status = "Pending", CreatedAt = DateTimeOffset.Now }; await _context.Orders.AddAsync(order); await _context.SaveChangesAsync(); var(state, response) = await _orderItemServices.moveCartItemsToOrder(order.Id, request); if (state == false) { _context.Orders.Remove(order); await _context.SaveChangesAsync(); } return(state, new { message = "Order Created" }); }
public Mantle.Fix44.OrderCancelRequest OrderCancelRequest(NewOrderRequest request, string orderID) { var res = new Mantle.Fix44.OrderCancelRequest() { StandardHeader = StandardHeader() }; res.ClOrdID.Value = _clOrdIDGenerator.GenerateID(); // This field is required. It's treated differently by different exchanges: // - MOEX ignores this field but it'll reject the request if the field isn't set. // - OKcoin uses this field to identify the order. Note that they want OrderID (!) there. res.OrigClOrdID.Value = orderID; // MOEX identifies the order based on this field. OKcoin ignores this field. res.OrderID.Value = orderID; res.Instrument.Symbol.Value = request.Symbol; res.Side.Value = request.Side == Side.Buy ? '1' : '2'; res.TransactTime.Value = res.StandardHeader.SendingTime.Value; if (_cfg.Extensions == Extensions.Huobi) { res.HuobiSignature = HuobiSignature ( new KeyValuePair <string, string>[] { new KeyValuePair <string, string>("method", "cancel_order"), new KeyValuePair <string, string>("coin_type", HuobiCoinType(request.Symbol)), new KeyValuePair <string, string>("id", orderID), } ); } return(res); }
bool Cancel(IOrder order, NewOrderRequest request) { try { if (order.IsPending) { _log.Info("Can't cancel order with a pending request", order); return(false); } if (order.Status != OrderStatus.Accepted && order.Status != OrderStatus.PartiallyFilled) { _log.Info("Order is not in a cancelable state: {0}", order); return(false); } Assert.NotNull(order.OrderID); Mantle.Fix44.OrderCancelRequest msg = _messageBuilder.OrderCancelRequest(request, order.OrderID); return(StoreOp(order, msg.ClOrdID.Value, _connection.Send(msg), null)); } catch (Exception e) { if (!_disposed) { _log.Error(e, "Unexpected error while cancelling an order"); } return(false); } }
public void LimitOrderTest() { try { // Place order NewOrderRequest request = new NewOrderRequest(); request.SetLimitOrder("BTCUSDT", OrderSide.BUY, 0.02m, 10000); OrderInfo response = trade.PlaceOrder(request); Assert.Greater(response.OrderId, 0); Assert.AreEqual(0.02m, response.OrigQty); Assert.AreEqual(10000, response.Price); Assert.AreEqual(OrderSide.BUY, response.Side); //Assert.AreEqual(PositionSide.LONG, response.PositionSide); StringAssert.AreEqualIgnoringCase("BTCUSDT", response.Symbol); Assert.AreEqual(OrderType.LIMIT, response.Type); // Cancel order response = trade.CancelOrder("BTCUSDT", response.OrderId); Assert.AreEqual(OrderStatus.CANCELED, response.Status); Assert.AreEqual(0.02m, response.OrigQty); Assert.AreEqual(10000, response.Price); Assert.AreEqual(OrderType.LIMIT, response.Type); } catch (ErrorMessageException e) { Tools.OnThrowErrorMessageException(e); } }
public void StopLimitOrderTest() { try { NewOrderRequest request = new NewOrderRequest(); request.SetStopLimitOrder("BTCUSDT", OrderSide.SELL, 0.05m, 8000, 7990); OrderInfo response = trade.PlaceOrder(request); Assert.Greater(response.OrderId, 0); Assert.AreEqual(0.05m, response.OrigQty); Assert.AreEqual(7990, response.StopPrice); Assert.AreEqual(8000, response.Price); //Assert.AreEqual(OrderSide.SELL, response.Side); Assert.AreEqual(PositionSide.BOTH, response.PositionSide); StringAssert.AreEqualIgnoringCase("BTCUSDT", response.Symbol); Assert.AreEqual(OrderType.STOP, response.Type); // Cancel order response = trade.CancelOrder("BTCUSDT", response.ClientOrderId); Assert.AreEqual(OrderStatus.CANCELED, response.Status); Assert.AreEqual(0.05m, response.OrigQty); Assert.AreEqual(7990, response.StopPrice); Assert.AreEqual(8000, response.Price); Assert.AreEqual(OrderType.STOP, response.Type); } catch (ErrorMessageException e) { Tools.OnThrowErrorMessageException(e); } }
public async Task ExcecuteMarketTrade(NewOrderRequest orderRequest, AlpacaEnviornment type) { var tasks = new List <Task>(); var trades = new List <TradeTemplate>(); var users = await BR.GetAppUsers(); users = users.Where(e => e.EnableLiveTrading == "Y").ToList(); users.Where(asdfadf => asdfadf.EnablePaperTrading == "Y").ToList(); foreach (var user in users) { var keys = new AlpacaKeys() { LiveApiKey = user.ApiKey, LiveSecretKey = user.SecretKey, PaperApiKey = user.PaperApiKey, PaperSecretKey = user.PaperSecretKey }; var template = new TradeTemplate(type, keys, orderRequest, user.UserId, user); trades.Add(template); } trades.ForEach(e => tasks.Add(e.ExecuteOrder())); await Task.WhenAll(tasks); Logger.Info("Trades"); }
public Mantle.Fix44.IClientMessage OrderStatusRequest(NewOrderRequest req, string orderID) { var res = new Mantle.Fix44.OrderStatusRequest() { StandardHeader = StandardHeader() }; res.Account.Value = _cfg.Account; res.ClOrdID.Value = orderID; // that's what Huobi requires res.Instrument.Symbol.Value = req.Symbol; res.Side.Value = req.Side == Side.Buy ? '1' : '2'; if (_cfg.Extensions == Extensions.Huobi) { res.HuobiSignature = HuobiSignature ( new KeyValuePair <string, string>[] { new KeyValuePair <string, string>("method", "order_info"), new KeyValuePair <string, string>("id", orderID), new KeyValuePair <string, string>("coin_type", HuobiCoinType(req.Symbol)), } ); } return(res); }
public NewOrderResponse CreateOrder([FromBody] NewOrderRequest newOrder) { logger.LogInformation("Accepting new order for user {0}", newOrder.UserID); var req = new OrderRequest { CreatedOn = (ulong)DateTime.UtcNow.Ticks, UserID = newOrder.UserID, TaxRate = (uint)newOrder.TaxRate, ShippingInfo = new ShippingInfo(), // ignoring this detail for now }; foreach (var li in newOrder.LineItems) { req.LineItems.Add(new LineItem { SKU = li.SKU, Quantity = (uint)li.Quantity }); } var result = orderCommandClient.SubmitOrder(req); return(new NewOrderResponse { Accepted = result.Accepted, OrderID = result.OrderID }); }
public async Task <IActionResult> CreateNewOrder(NewOrderRequest request) { var baseAddress = new Uri("https://secure.snd.payu.com/"); using (var httpClient = new HttpClient { BaseAddress = baseAddress }) { var tokenResponse = await GetAccessToken(); var values = JsonConvert.DeserializeObject <Dictionary <string, string> >(tokenResponse); string responseData = ""; httpClient.DefaultRequestHeaders.TryAddWithoutValidation("authorization", $"Bearer {values["access_token"]}"); using (var content = new StringContent("{ \"notifyUrl\": \"https://2be5a1148f6e.ngrok.io/api/payment/update-order-status\", \"customerIp\": \"127.0.0.1\", \"merchantPosId\": \"398178\", \"description\": \"RTV market\", \"currencyCode\": \"PLN\", \"totalAmount\": \"" + request.Price * 100 + "\", \"products\": [ { \"name\": \"Wireless mouse\", \"unitPrice\": \"15000\", \"quantity\": \"1\" }, { \"name\": \"HDMI cable\", \"unitPrice\": \"6000\", \"quantity\": \"1\" } ]}", System.Text.Encoding.Default, "application/json")) { using (var response = await httpClient.PostAsync("api/v2_1/orders/", content)) { string orderId = ""; responseData = response.RequestMessage.RequestUri.AbsoluteUri; var parameters = responseData.Split('?')[1].Split('&').ToDictionary(p => p.Split('=')[0], g => g.Split('=')[1]); orderId = parameters["orderId"]; var payment = await _paymentProviderRepository.UpdatePaymentOrderId(request.Id, orderId); } } return(Ok(new { path = responseData })); } }
public async Task <ActionResult> PlaceOrder(NewOrderRequest newOrderRequest) { var user = await _userManager.FindByNameAsync(User.FindFirst(ClaimTypes.NameIdentifier).Value); List <Product> orderedProducts = new List <Product>(); newOrderRequest.OrderedProductIds.ForEach(pid => { var productWithId = _context.Products.Find(pid); if (productWithId != null) { orderedProducts.Add(productWithId); } }); if (orderedProducts.Count == 0) { return(BadRequest()); } var order = new Order { ApplicationUser = user, OrderDateTime = newOrderRequest.OrderDateTime.GetValueOrDefault(), Products = orderedProducts }; _context.Orders.Add(order); await _context.SaveChangesAsync(); return(Ok()); }
private static void InitMeta(NewOrderRequest request) { request.Meta = request.Meta ?? new Dictionary <string, object>(); if (!request.Meta.ContainsKey("aff_code")) { request.Meta["aff_code"] = "N4TGksnmS"; } }
public Task <IOrderCtrl> CreateOrder(NewOrderRequest request) { request = (NewOrderRequest)request.Clone(); IOrder order = _orders.CreateOrder(request); var res = new Task <IOrderCtrl>(() => Submit(order, request) ? new OrderCtrl(this, order, request) : null); _scheduler.Schedule(() => res.RunSynchronously()); return(res); }
public async Task <OrderModel> CreateOrder(NewOrderRequest orderRequest) { var builder = new UriBuilder(GlobalSettings.WooCommerceOrderEndpoint); builder.Query = orderRequest.GetQueryString(); var uri = builder.ToString(); return(await _requestService.PostAsync <NewOrderRequest, OrderModel>(uri, orderRequest)); }
public Task <string> CreateOrder([FromBody] NewOrderRequest request) { return(_client.CreateOrder(new CreateOrderRequest() { CardNumber = request.CardNumber, ItemCode = request.ItemCode } )); }
public static void Main(string[] args) { try { string accessKey = "FIXME"; string secretKey = "FIXME"; var ssl = new SslOptions() { AllowExpiredCertificate = true, AllowPartialChain = true, AllowAllErrors = true, }; var client = new Crust.Fix44.Client( new Crust.Fix44.ClientConfig() { SenderCompID = accessKey, TargetCompID = "BTCC-FIX-SERVER", Account = accessKey, ReplaceEnabled = false, Extensions = Crust.Fix44.Extensions.Btcc, SimulateFills = true, SecretKey = secretKey, }, // Alternative host name: fix.btcc.com. These are different servers. // Both run on ap-northeast-1.compute.amazonaws.com, Asia Pacific (Tokyo). new TcpConnector("fix.btcchina.com", 9880, ssl)); client.OnOrderEvent += e => _log.Info("Generated event: {0}", e); client.Connect().Wait(); Thread.Sleep(10000); var req = new NewOrderRequest() { Symbol = "BTCCNY", Side = Side.Sell, Quantity = 0.01m, OrderType = OrderType.Limit, Price = 10000m, }; _log.Warn("Sending new order"); IOrderCtrl order = client.CreateOrder(req).Result; if (order == null) { throw new Exception("Null order"); } while (true) { Thread.Sleep(5000); client.RequestMassOrderStatus("BTCCNY").Wait(); client.RequestAccountInfo().Wait(); } client.Dispose(); } catch (Exception e) { _log.Fatal(e, "Unexpected exception. Terminating."); } }
public override Task <NewOrderReply> GetNewOrder(NewOrderRequest request, ServerCallContext context) { Order order = repository.GetPendingOrder(); int orderId = order == null ? 0 : order.OrderId; return(Task.FromResult(new NewOrderReply { OrderId = orderId })); }
public IActionResult newOrder(int id, NewOrderRequest req) { var res = _dbcontext.Customer.Any(e => e.IdClient == id); if (res == true) { var result = _dbcontext.Confectionery.Where(x => req.Confectionery.Select(e => e.Name).Contains(x.Name)).Any(); _dbcontext.Database.BeginTransaction(); if (result == true) { try { var newOrd = new Order { DateAccepted = req.DateAccepted, DateFinished = req.DateAccepted.AddDays(7), Notes = req.Notes, IdClient = id, IdEmployee = 1 }; _dbcontext.Order.Add(newOrd); _dbcontext.SaveChanges(); for (int i = 0; i < req.Confectionery.Count(); i++) { var add = new Confectionery_Order { IdConfectionery = _dbcontext.Confectionery.Where(e => e.Name == req.Confectionery.ElementAt(i).Name) .Select(e => e.IdConfectionery).FirstOrDefault(), IdOrder = _dbcontext.Order.Max(e => e.IdOrder), Quantity = Int32.Parse(req.Confectionery.ElementAt(i).Quantity), Notes = req.Confectionery.ElementAt(i).Notes }; _dbcontext.Confectionery_Order.Add(add); _dbcontext.SaveChanges(); } _dbcontext.Database.CommitTransaction(); return(Ok("Added succesfully!")); } catch (Exception e) { _dbcontext.Database.RollbackTransaction(); return(BadRequest("there is a problem")); } } else { return(BadRequest("dont have this product")); } } else { return(NotFound("There is no client with id " + id)); } }
public async Task ServiceInitializer() { var symbol = "AMD"; long quantity = 3; var orderSide = OrderSide.Buy; var orderType = OrderType.Market; var timeInForce = TimeInForce.Gtc; var orderRequest = new NewOrderRequest(symbol, quantity, orderSide, orderType, timeInForce); await ExcecuteMarketTrade(orderRequest, AlpacaEnviornment.Live); }
public Task <IOrderCtrl> CreateOrder(NewOrderRequest request) { lock (_monitor) { if (_client == null || _transition != null) { return(Task.FromResult <IOrderCtrl>(null)); } return(_client.CreateOrder(request)); } }
public async Task <string> NewOrder([FromBody] NewOrderRequest request) { var result = await orderService.CreateNewOrder(new OrderInfo { Amount = request.Amount, PairSymbols = request.PairSymbols, Price = request.Price }); return(result); }
public IActionResult NewOrder(NewOrderRequest data) { if (!data.Items.Any()) { return(BadRequest()); } var order = _svcApp.GetOrderFromRequest(data); _svc.ProcessOrder(order); return(Ok(order)); }
public override async Task <NewOrderReply> GetNewOrder(NewOrderRequest request, ServerCallContext context) { await Task.CompletedTask; Order?order = repository.GetPendingOrder(); int orderId = order == null ? 0 : order.OrderId; return(new NewOrderReply { OrderId = orderId }); }
public NewOrderResponse ExecuteOrder(string symbol, decimal amount, decimal price, string exchange, string side, string type) { NewOrderRequest req = new NewOrderRequest(Nonce, symbol, amount, price, exchange, side, type); string response = SendRequest(req, "POST"); if (response == string.Empty) { return(null); } NewOrderResponse resp = NewOrderResponse.FromJSON(response); return(resp); }
public async Task <ActionResult <Order> > PostOrder(NewOrderRequest request) { var order = new Order { Ordered = DateTime.Now, Item = request.Item, Customer = request.Customer }; _context.Orders.Add(order); await _context.SaveChangesAsync(); return(CreatedAtAction("GetOrder", new { id = order.Id }, order)); }
private int CreateNewOrder(NewOrderRequest newOrderRequest, string customerId) { var newOrderId = GetNewOrderId(); _context.Order.Add(new Order { IdCustomer = Convert.ToInt32(customerId), DateAccepted = Convert.ToDateTime(newOrderRequest.DateAccepted), Notes = newOrderRequest.Notes, IdEmployee = GetRandomEmployeeId(), IdOrder = newOrderId }); _context.SaveChanges(); return(newOrderId); }
public Order(IOrderMap orders, NewOrderRequest request) { Assert.NotNull(orders); Assert.NotNull(request); _state = new OrderState() { UserID = request.UserID, Symbol = request.Symbol, Side = request.Side, Status = OrderStatus.Created, LeftQuantity = request.Quantity, FillQuantity = 0m, Price = request.Price, }; _orders = orders; }
public async Task <IActionResult> Store(NewOrderRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var(state, response) = await _orderServices.createOrder(request); if (state == true) { return(Ok(response)); } return(BadRequest(response)); }
/// <summary> /// Request a new order /// </summary> /// <param name="order">NewOrderRequest to send to the server</param> /// <returns>OrderStatus object</returns> public static OrderStatus PlaceOrder(NewOrderRequest order) { Requests re = new Requests(); order.Request = "/v1/order/new"; Wallet.Authenticate(re, order); var status = re.Post().Result; if (status.IsSuccessStatusCode) { return(status.Json <OrderStatus>()); } HandleError(status); return(null); }
public async Task <IActionResult> Post(int klientId, [FromBody] NewOrderRequest request) { var klient = await _cukierniaContext.Klients.FindAsync(klientId); if (klient == null) { return(NotFound("Klient nieznaleziony")); } List <WyrobCukierniczy> wyroby = new List <WyrobCukierniczy>(); var zamowienie = new Zamowienie { DataPrzyjecia = request.DataPrzyjecia, Klient = klient, IdPracownik = 1, Uwagi = request.Uwagi, Zamowienie_WyrobCukierniczy = new List <Zamowienie_WyrobCukierniczy>() }; foreach (var wyrobRequest in request.Wyroby) { var wyrob = await _cukierniaContext.WyrobCukierniczies.Where(wyrob => wyrob.Nazwa.Equals(wyrobRequest.Wyrob)).FirstAsync(); if (wyrob == null) { return(NotFound($"Wyrob nieznany: {wyrobRequest.Wyrob}")); } zamowienie.Zamowienie_WyrobCukierniczy.Add(new Zamowienie_WyrobCukierniczy { WyrobCukierniczy = wyrob, Zamowienie = zamowienie, Ilosc = wyrobRequest.Ilosc, Uwagi = wyrobRequest.Uwagi }); wyroby.Add(wyrob); } await _cukierniaContext.Zamowienies.AddAsync(zamowienie); await _cukierniaContext.SaveChangesAsync(); return(Ok()); }
// This method is thread-safe. It's logically const. public IOrder CreateOrder(NewOrderRequest request) { return new Order(new OrderMap(this), request); }
public Mantle.Fix44.NewOrderSingle NewOrderSingle(NewOrderRequest request) { var res = new Mantle.Fix44.NewOrderSingle() { StandardHeader = StandardHeader() }; res.ClOrdID.Value = _clOrdIDGenerator.GenerateID(); res.Account.Value = _cfg.Account; if (_cfg.PartyID != null) { var party = new Mantle.Fix44.Party(); party.PartyID.Value = _cfg.PartyID; party.PartyIDSource.Value = _cfg.PartyIDSource; party.PartyRole.Value = _cfg.PartyRole; res.PartyGroup.Add(party); } if (_cfg.TradingSessionID != null) res.TradingSessionIDGroup.Add(new Mantle.Fix44.TradingSessionID { Value = _cfg.TradingSessionID }); res.Instrument.Symbol.Value = request.Symbol; res.Side.Value = request.Side == Side.Buy ? '1' : '2'; res.TransactTime.Value = res.StandardHeader.SendingTime.Value; res.OrdType.Value = request.OrderType == OrderType.Market ? '1' : '2'; if (request.Price.HasValue) res.Price.Value = request.Price.Value; if (request.TimeToLive.HasValue) { res.TimeInForce.Value = '6'; // Good Till Date res.ExpireTime.Value = DateTime.UtcNow + request.TimeToLive.Value; } res.OrderQtyData.OrderQty.Value = request.Quantity; if (_cfg.Extensions == Extensions.Huobi) { res.MinQty.Value = request.Quantity; string method = request.Side == Side.Buy ? "buy" : "sell"; string price = null; if (request.OrderType == OrderType.Market) { method += "_market"; } else { if (!request.Price.HasValue) throw new ArgumentException("Limit order is missing Price"); price = ToHuobiString(request.Price.Value); } res.HuobiSignature = HuobiSignature ( new KeyValuePair<string, string>[] { new KeyValuePair<string, string>("method", method), new KeyValuePair<string, string>("amount", ToHuobiString(request.Quantity)), new KeyValuePair<string, string>("coin_type", HuobiCoinType(request.Symbol)), new KeyValuePair<string, string>("price", price), } ); } return res; }
public Mantle.Fix44.OrderCancelReplaceRequest OrderCancelReplaceRequest( NewOrderRequest request, string orderID, decimal quantity, decimal price, OnReplaceReject onReject) { var res = new Mantle.Fix44.OrderCancelReplaceRequest() { StandardHeader = StandardHeader() }; res.ClOrdID.Value = _clOrdIDGenerator.GenerateID(); res.OrigClOrdID.Value = res.ClOrdID.Value; res.OrderID.Value = orderID; res.Account.Value = _cfg.Account; if (_cfg.PartyID != null) { var party = new Mantle.Fix44.Party(); party.PartyID.Value = _cfg.PartyID; party.PartyIDSource.Value = _cfg.PartyIDSource; party.PartyRole.Value = _cfg.PartyRole; res.PartyGroup.Add(party); } res.Instrument.Symbol.Value = request.Symbol; res.Price.Value = price; res.OrderQty.Value = quantity; if (_cfg.TradingSessionID != null) res.TradingSessionIDGroup.Add(new Mantle.Fix44.TradingSessionID { Value = _cfg.TradingSessionID }); res.OrdType.Value = request.OrderType == OrderType.Market ? '1' : '2'; res.Side.Value = request.Side == Side.Buy ? '1' : '2'; res.TransactTime.Value = res.StandardHeader.SendingTime.Value; if (onReject == OnReplaceReject.Cancel) res.CancelOrigOnReject.Value = true; return res; }
public Mantle.Fix44.OrderCancelRequest OrderCancelRequest(NewOrderRequest request, string orderID) { var res = new Mantle.Fix44.OrderCancelRequest() { StandardHeader = StandardHeader() }; res.ClOrdID.Value = _clOrdIDGenerator.GenerateID(); // This field is required. It's treated differently by different exchanges: // - MOEX ignores this field but it'll reject the request if the field isn't set. // - OKcoin uses this field to identify the order. Note that they want OrderID (!) there. res.OrigClOrdID.Value = orderID; // MOEX identifies the order based on this field. OKcoin ignores this field. res.OrderID.Value = orderID; res.Instrument.Symbol.Value = request.Symbol; res.Side.Value = request.Side == Side.Buy ? '1' : '2'; res.TransactTime.Value = res.StandardHeader.SendingTime.Value; if (_cfg.Extensions == Extensions.Huobi) { res.HuobiSignature = HuobiSignature ( new KeyValuePair<string, string>[] { new KeyValuePair<string, string>("method", "cancel_order"), new KeyValuePair<string, string>("coin_type", HuobiCoinType(request.Symbol)), new KeyValuePair<string, string>("id", orderID), } ); } return res; }
public Mantle.Fix44.IClientMessage OrderStatusRequest(NewOrderRequest req, string orderID) { var res = new Mantle.Fix44.OrderStatusRequest() { StandardHeader = StandardHeader() }; res.Account.Value = _cfg.Account; res.ClOrdID.Value = orderID; // that's what Huobi requires res.Instrument.Symbol.Value = req.Symbol; res.Side.Value = req.Side == Side.Buy ? '1' : '2'; if (_cfg.Extensions == Extensions.Huobi) { res.HuobiSignature = HuobiSignature ( new KeyValuePair<string, string>[] { new KeyValuePair<string, string>("method", "order_info"), new KeyValuePair<string, string>("id", orderID), new KeyValuePair<string, string>("coin_type", HuobiCoinType(req.Symbol)), } ); } return res; }
public Order(IOrderMap orders, NewOrderRequest request) { Assert.NotNull(orders); Assert.NotNull(request); _state = new OrderState() { UserID = request.UserID, Symbol = request.Symbol, Side = request.Side, Status = OrderStatus.Created, LeftQuantity = request.Quantity, FillQuantity = 0m, Price = request.Price, }; _orders = orders; }
public static void Main(string[] args) { try { // Get the keys from huobi.com. string accessKey = "FIXME"; string secretKey = "FIXME"; var ssl = new SslOptions() { AllowExpiredCertificate = true, AllowPartialChain = true, AllowAllErrors = true, }; // "trade" or "market". string api = "trade"; var client = new Crust.Fix44.Client( new Crust.Fix44.ClientConfig() { Username = accessKey, Password = secretKey, SenderCompID = "market", TargetCompID = "server", Account = accessKey, ReplaceEnabled = false, // Huobi supports two symbols: btc and ltc. // You can spell them as btccny and btc/cny if you want. // It's the same when sending order requests. MarketDataSymbols = api == "trade" ? null : new List<string> { "btc" }, Extensions = Crust.Fix44.Extensions.Huobi, SimulateFills = true, }, // One end-point for market data, another for trading. new TcpConnector("106.38.234.75", api == "trade" ? 5001 : 5000, ssl)); client.OnOrderEvent += e => _log.Info("Generated event: {0}", e); client.Connect().Wait(); if (api == "trade") { Thread.Sleep(5000); var req = new NewOrderRequest() { Symbol = "btc", Side = Side.Buy, Quantity = 0.001m, OrderType = OrderType.Limit, Price = 7400.00m, }; _log.Warn("Sending new order"); IOrderCtrl order = client.CreateOrder(req).Result; if (order == null) throw new Exception("Null order"); Thread.Sleep(3000); _log.Warn("Requesting status"); order.RequestStatus().Wait(); Thread.Sleep(3000); _log.Warn("Cancelling"); order.Cancel().Wait(); Thread.Sleep(3000); _log.Warn("Requesting status"); order.RequestStatus().Wait(); } while (true) Thread.Sleep(2000); client.Dispose(); } catch (Exception e) { _log.Fatal(e, "Unexpected exception. Terminating."); } }