예제 #1
0
        internal static void AddTradeMode(OrderRequestParameters parameters, IList <SettingItem> settings, OKExTradeMode?tradeMode = null, int index = 0)
        {
            var isCryptoSymbol = parameters.Symbol.SymbolType == SymbolType.Crypto;

            var items = new List <SelectItem>();

            if (isCryptoSymbol)
            {
                items.Add(new SelectItem(loc._("Cash"), (int)OKExTradeMode.Cash));
            }

            items.Add(new SelectItem(loc._("Cross"), (int)OKExTradeMode.Cross));
            items.Add(new SelectItem(loc._("Isolated"), (int)OKExTradeMode.Isolated));

            var defaultTradeMode = tradeMode ?? (isCryptoSymbol ? OKExTradeMode.Cash : OKExTradeMode.Cross);

            settings.Add(new SettingItemSelectorLocalized(TRADE_MODE_TYPE, new SelectItem("", (int)defaultTradeMode), items)
            {
                Text = loc._("Trade mode"), SortIndex = index
            });

            if (isCryptoSymbol)
            {
                settings.Add(new SettingItemSelector(MARGIN_CURRENCY, parameters.Symbol.Product.Id, new List <string>()
                {
                    parameters.Symbol.Product.Id,
                    parameters.Symbol.QuotingCurrency.Id
                }, index)
                {
                    Text     = loc._("Margin currency"),
                    Relation = new SettingItemRelationVisibility(TRADE_MODE_TYPE, new SelectItem(loc._("Cross"), (int)OKExTradeMode.Cross))
                });
            }
        }
예제 #2
0
        public override IList <SettingItem> GetOrderSettings(OrderRequestParameters parameters, FormatSettings formatSettings)
        {
            var settings = base.GetOrderSettings(parameters, formatSettings);

            if (parameters.Type == RequestType.PlaceOrder)
            {
                if (parameters.Symbol.SymbolType != SymbolType.Options)
                {
                    OKExOrderTypeHelper.AddTradeMode(parameters, settings);

                    if (parameters.Symbol.SymbolType == SymbolType.Crypto)
                    {
                        OKExOrderTypeHelper.AddReduceOnly(settings);
                    }
                    else if (parameters.Symbol.SymbolType != SymbolType.Options)
                    {
                        OKExOrderTypeHelper.AddOrderBehaviour(settings);
                    }
                }

                OKExOrderTypeHelper.AddComment(settings, string.Empty);
            }

            return(settings);
        }
예제 #3
0
        private static SettingItem CreatePriceBasedSettingItem(OrderRequestParameters parameters, string name, double value, int index)
        {
            if (double.IsNaN(value))
            {
                value = 0;
            }

            double increment     = 1;
            int    decimalPlaces = 0;

            var variableTick = parameters.Symbol.FindVariableTick(0);

            if (variableTick != null)
            {
                increment     = variableTick.TickSize;
                decimalPlaces = variableTick.Precision;
            }

            return(new SettingItemDouble(name, value, index)
            {
                Minimum = 0,
                Maximum = double.MaxValue,
                Increment = increment,
                DecimalPlaces = decimalPlaces,
            });
        }
        public async Task <OrdersResponseModel> GetOrdersForAdmin(OrdersRequestModel requestModel)
        {
            OrderRequestParameters parameters = requestModel.MapToRequestParameters();

            (List <Order> orders, int count) = await _orderRepository.GetByParmeters(parameters);

            List <OrderModel> orderModels = orders.Select(item => new OrderModel(item)).ToList();

            OrdersResponseModel response = new OrdersResponseModel()
            {
                OrderModels = orderModels, Count = count
            };

            return(response);
        }
        /*sample parameter:{"CustomerId":"1","UserId":"2","OrderId":3}*/
        public async Task <IHttpActionResult> GetCustomerCurrentOrders([FromBody] OrderRequestParameters parameters)
        {
            if (parameters != null)
            {
                var result = parameters.OrderId > 0 ?
                             await _service.GetCustomerCurrentOrders(parameters.CustomerId, parameters.UserId, parameters.OrderId) :
                             await _service.GetCustomerCurrentOrders(parameters.CustomerId, parameters.UserId);

                if (result == null)
                {
                    NotFound();
                }
                return(Ok(result));
            }
            return(BadRequest());
        }
        public OrderRequestParameters MapToRequestParameters()
        {
            OrderRequestParameters parameters = new OrderRequestParameters();

            if (Page != 0)
            {
                parameters.Page = Page;
            }
            if (PageSize != 0)
            {
                parameters.PageSize = PageSize;
            }
            if (!string.IsNullOrWhiteSpace(KeyWord))
            {
                parameters.KeyWord = KeyWord;
            }
            return(parameters);
        }
        public async Task <(List <Order>, int)> GetByParmeters(OrderRequestParameters parameters)
        {
            int        skipCount  = (parameters.Page - 1) * parameters.PageSize;
            SqlBuilder sqlBuilder = new SqlBuilder();

            SqlBuilder.Template countExpression = sqlBuilder.AddTemplate(
                $@"SELECT COUNT (DISTINCT Orders.Id) FROM Orders
                LEFT JOIN AspNetUsers ON Orders.ApplicationUserId = AspNetUsers.Id
                /**where**/");

            SqlBuilder.Template itemsExpression = sqlBuilder.AddTemplate(
                $@"SELECT * FROM 
                (SELECT DISTINCT Orders.* FROM Orders
                LEFT JOIN AspNetUsers ON Orders.ApplicationUserId = AspNetUsers.Id
                /**where**/ /**orderby**/) AS FilteredOrders
                LEFT JOIN AspNetUsers ON FilteredOrders.ApplicationUserId = AspNetUsers.Id
                WHERE FilteredOrders.ApplicationUserId NOT IN (SELECT AspNetUsers.Id FROM AspNetUsers
                WHERE AspNetUsers.IsRemoved = 1)");

            if (!string.IsNullOrWhiteSpace(parameters.KeyWord))
            {
                parameters.KeyWord = parameters.KeyWord.ToLower();
                sqlBuilder.Where($@"LOWER(AspNetUsers.FirstName + ' ' + AspNetUsers.FirstName + ' ' + AspNetUsers.UserName ) LIKE '%' + @KeyWord + '%'");
            }

            int count = await _connection.ExecuteScalarAsync <int>(countExpression.RawSql, parameters);

            sqlBuilder.OrderBy($"Orders.Id OFFSET @Skip ROWS FETCH NEXT @PageSize ROWS ONLY");

            List <Order> result = await _connection.QueryAsync <Order, ApplicationUser, Order>(itemsExpression.RawSql,
                                                                                               (order, applicationUser) =>
            {
                order.ApplicationUser = applicationUser;
                return(order);
            },
                                                                                               parameters) as List <Order>;

            return(result, count);
        }
예제 #8
0
        internal static void AddStopLoss(OrderRequestParameters parameters, IList <SettingItem> settings, OKExSLTPType type = OKExSLTPType.Market, int index = 0)
        {
            settings.Add(new SettingItemSelectorLocalized(STOP_LOSS_TYPE, new SelectItem("", (int)type), new List <SelectItem>()
            {
                new SelectItem(loc._("Market"), (int)OKExSLTPType.Market),
                new SelectItem(loc._("Limit"), (int)OKExSLTPType.Limit),
            })
            {
                Text = loc._("Stop loss type"), SortIndex = index
            });

            var triggerPriceSI = CreatePriceBasedSettingItem(parameters, STOP_LOSS_TRIGGER_PRICE, parameters.Symbol.Last, index);

            triggerPriceSI.Text     = loc._("SL trigger price");
            triggerPriceSI.Relation = new SettingItemRelationVisibility(STOP_LOSS_TYPE, new SelectItem("Market", (int)OKExSLTPType.Market), new SelectItem("Limit", (int)OKExSLTPType.Limit));

            var priceSI = CreatePriceBasedSettingItem(parameters, STOP_LOSS_PRICE, parameters.Symbol.Last, index);

            priceSI.Text     = loc._("SL price");
            priceSI.Relation = new SettingItemRelationVisibility(STOP_LOSS_TYPE, new SelectItem("Limit", (int)OKExSLTPType.Limit));

            settings.Add(triggerPriceSI);
            settings.Add(priceSI);
        }
예제 #9
0
        public async Task <(List <Order>, int)> GetByParmeters(OrderRequestParameters parameters)
        {
            IQueryable <Order> orders = _dbSet.Include(item => item.ApplicationUser);

            orders = orders.Where(item => !item.ApplicationUser.IsRemoved);

            if (!string.IsNullOrWhiteSpace(parameters.KeyWord))
            {
                orders = orders.Where(item =>
                                      item.ApplicationUser.UserName.Contains(parameters.KeyWord) ||
                                      item.ApplicationUser.FirstName.Contains(parameters.KeyWord) ||
                                      item.ApplicationUser.LastName.Contains(parameters.KeyWord));
            }

            int count = await orders.CountAsync();

            int countToSkip = (--parameters.Page) * parameters.PageSize;

            orders = orders.Skip(countToSkip).Take(parameters.PageSize);

            List <Order> response = await orders.ToListAsync();

            return(response, count);
        }
예제 #10
0
 public override double GetFillPrice(OrderRequestParameters parameters)
 {
     return(default);