Beispiel #1
0
        /// <summary>
        /// Place new order
        /// </summary>
        /// <param name="symbol">Trading symbol</param>
        /// <param name="side">sell buy</param>
        /// <param name="quantity">Order quantity</param>
        /// <param name="price">Order price. Required for limit types.</param>
        /// <param name="stopPrice">Required for stop types.</param>
        /// <param name="timeInForce">Optional. Default - GDC. One of: GTC, IOC, FOK, Day, GTD</param>
        /// <param name="expireTime">Required for GTD timeInForce.</param>
        /// <param name="clientOrderId">Optional parameter, if skipped - will be generated by server. Uniqueness must be guaranteed within a single trading day, including all active orders.</param>
        /// <param name="strictValidate">Price and quantity will be checked that they increment within tick size and quantity step. See symbol tickSize and quantityIncrement</param>
        /// <param name="cancellationToken">Token for cancel operation</param>
        /// <returns></returns>
        public async Task <HitResponse <HitOrder> > CreateNewOrderAsync(string symbol, HitSide side, decimal quantity, decimal price = -1, decimal stopPrice = -1,
                                                                        HitTimeInForce timeInForce = HitTimeInForce.Day, DateTime expireTime = default, string clientOrderId = null, bool strictValidate = true, CancellationToken cancellationToken = default)
        {
            HitOrderType orderType = HitOrderType.Market;

            if (price != -1 && stopPrice == -1)
            {
                orderType = HitOrderType.Limit;
            }
            else if (price == -1 && stopPrice != -1)
            {
                orderType = HitOrderType.StopMarket;
            }
            else if (price != -1 && stopPrice != -1)
            {
                orderType = HitOrderType.StopLimit;
            }

            var parameters = new HitNewOrderParameters
            {
                ClientOrderId  = clientOrderId,
                Symbol         = symbol,
                Side           = side,
                OrderType      = orderType,
                TimeInForce    = timeInForce,
                Quantity       = quantity,
                Price          = price,
                StopPrice      = stopPrice,
                ExpireTime     = expireTime,
                StrictValidate = strictValidate
            };

            return(await this.MakeRequestAuthorizedAsync <HitOrder>(HttpMethod.Post, cancellationToken, "order", postParameters : parameters));
        }
Beispiel #2
0
        public override TradingOperationResult PlaceOrder(PlaceOrderRequestParameters parameters)
        {
            var result = new TradingOperationResult();

            string  symbol   = parameters.Symbol.Id;
            HitSide side     = parameters.Side == Side.Buy ? HitSide.Buy : HitSide.Sell;
            decimal quantity = (decimal)parameters.Quantity;

            decimal price     = -1;
            decimal stopPrice = -1;

            if (parameters.OrderTypeId == OrderType.Limit || parameters.OrderTypeId == OrderType.StopLimit)
            {
                price = (decimal)parameters.Price;
            }

            if (parameters.OrderTypeId == OrderType.Stop || parameters.OrderTypeId == OrderType.StopLimit)
            {
                stopPrice = (decimal)parameters.TriggerPrice;
            }

            HitTimeInForce timeInForce = this.ConvertTimeInForce(parameters.TimeInForce);

            DateTime expireTime = default;

            if (timeInForce == HitTimeInForce.GTD)
            {
                expireTime = parameters.ExpirationTime;
            }

            var response = this.CheckHitResponse(this.socketApi.PlaceNewOrderAsync(symbol, side, quantity, price, stopPrice, timeInForce, expireTime, cancellationToken: parameters.CancellationToken).Result, out var error, true);

            if (response != null)
            {
                result.Status  = TradingOperationResultStatus.Success;
                result.OrderId = response.ClientOrderId;
            }
            else
            {
                result.Status  = TradingOperationResultStatus.Failure;
                result.Message = error?.ToString() ?? "Unknown error";
            }

            return(result);
        }
Beispiel #3
0
        private TimeInForce ConvertTimeInForce(HitTimeInForce hitTimeInForce)
        {
            switch (hitTimeInForce)
            {
            case HitTimeInForce.Day:
            default:
                return(TimeInForce.Day);

            case HitTimeInForce.GTC:
                return(TimeInForce.GTC);

            case HitTimeInForce.IOC:
                return(TimeInForce.IOC);

            case HitTimeInForce.FOK:
                return(TimeInForce.FOK);

            case HitTimeInForce.GTD:
                return(TimeInForce.GTD);
            }
        }