コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: OrderServices.cs プロジェクト: aimensasi/Maya-API
        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" });
        }
コード例 #3
0
ファイル: MessageBuilder.cs プロジェクト: buybackoff/iFix
        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);
        }
コード例 #4
0
 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);
     }
 }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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");
        }
コード例 #8
0
ファイル: MessageBuilder.cs プロジェクト: buybackoff/iFix
        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);
        }
コード例 #9
0
        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
            });
        }
コード例 #10
0
        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 }));
            }
        }
コード例 #11
0
        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());
        }
コード例 #12
0
 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";
     }
 }
コード例 #13
0
        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);
        }
コード例 #14
0
        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));
        }
コード例 #15
0
 public Task <string> CreateOrder([FromBody] NewOrderRequest request)
 {
     return(_client.CreateOrder(new CreateOrderRequest()
     {
         CardNumber = request.CardNumber,
         ItemCode = request.ItemCode
     }
                                ));
 }
コード例 #16
0
ファイル: Program.cs プロジェクト: buybackoff/iFix
 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.");
     }
 }
コード例 #17
0
        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
            }));
        }
コード例 #18
0
        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));
            }
        }
コード例 #19
0
        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);
        }
コード例 #20
0
 public Task <IOrderCtrl> CreateOrder(NewOrderRequest request)
 {
     lock (_monitor)
     {
         if (_client == null || _transition != null)
         {
             return(Task.FromResult <IOrderCtrl>(null));
         }
         return(_client.CreateOrder(request));
     }
 }
コード例 #21
0
        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);
        }
コード例 #22
0
        public IActionResult NewOrder(NewOrderRequest data)
        {
            if (!data.Items.Any())
            {
                return(BadRequest());
            }
            var order = _svcApp.GetOrderFromRequest(data);

            _svc.ProcessOrder(order);
            return(Ok(order));
        }
コード例 #23
0
    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
        });
    }
コード例 #24
0
        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);
        }
コード例 #25
0
        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));
        }
コード例 #26
0
        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);
        }
コード例 #27
0
 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;
 }
コード例 #28
0
        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));
        }
コード例 #29
0
        /// <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);
        }
コード例 #30
0
        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());
        }
コード例 #31
0
ファイル: OrderManager.cs プロジェクト: romkatv/iFix
 // This method is thread-safe. It's logically const.
 public IOrder CreateOrder(NewOrderRequest request)
 {
     return new Order(new OrderMap(this), request);
 }
コード例 #32
0
ファイル: MessageBuilder.cs プロジェクト: romkatv/iFix
 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;
 }
コード例 #33
0
ファイル: MessageBuilder.cs プロジェクト: romkatv/iFix
 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;
 }
コード例 #34
0
ファイル: MessageBuilder.cs プロジェクト: romkatv/iFix
 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;
 }
コード例 #35
0
ファイル: MessageBuilder.cs プロジェクト: romkatv/iFix
 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;
 }
コード例 #36
0
ファイル: OrderManager.cs プロジェクト: romkatv/iFix
 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;
 }
コード例 #37
0
ファイル: Program.cs プロジェクト: romkatv/iFix
 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.");
     }
 }