Exemple #1
0
        public static List <Candle> GetCandleCollection(Client client, string security, string need_interval_for_query, int from)
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("symbol", security);
            parameters.Add("interval", need_interval_for_query);
            parameters.Add("limit", "200");
            parameters.Add("from", from.ToString());

            object account_response = new object();

            if (client.FuturesMode == "Inverse")
            {
                account_response = BybitRestRequestBuilder.CreatePrivateGetQuery(client, "/v2/public/kline/list", parameters);
            }

            if (client.FuturesMode == "USDT")
            {
                account_response = BybitRestRequestBuilder.CreatePrivateGetQuery(client, "/public/linear/kline", parameters);
            }

            string isSuccessfull = ((JToken)account_response).SelectToken("ret_msg").Value <string>();

            if (isSuccessfull == "OK")
            {
                var candles = BybitCandlesCreator.Create(((JToken)account_response).SelectToken("result"));

                return(candles);
            }

            return(null);
        }
Exemple #2
0
        } // both futures

        public override void CancelOrder(Order order)
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("api_key", client.ApiKey);
            parameters.Add("symbol", order.SecurityNameCode);
            parameters.Add("order_id", order.NumberMarket);

            JToken cancel_order_response;

            if (futures_type == "Inverse Perpetual")
            {
                cancel_order_response = BybitRestRequestBuilder.CreatePrivatePostQuery(client, "/v2/private/order/cancel", parameters); ///private/linear/order/cancel
            }
            else
            {
                cancel_order_response = BybitRestRequestBuilder.CreatePrivatePostQuery(client, "/private/linear/order/cancel", parameters);
            }

            var isSuccessful = cancel_order_response.SelectToken("ret_msg").Value <string>();

            if (isSuccessful == "OK")
            {
            }
            else
            {
                SendLogMessage($"Error on order cancel num {order.NumberUser}", LogMessageType.Error);
            }
        } // both
Exemple #3
0
        public static List <Trade> GetTradesCollection(Client client, string security, int limit, int from_id)
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("symbol", security);
            parameters.Add("limit", limit.ToString());

            if (from_id != -1)
            {
                parameters.Add("from", from_id.ToString());
            }

            JToken account_response = BybitRestRequestBuilder.CreatePrivateGetQuery(client, "/v2/public/trading-records", parameters);

            string isSuccessfull = account_response.SelectToken("ret_msg").Value <string>();

            if (isSuccessfull == "OK")
            {
                var trades = BybitTradesCreator.Create(account_response.SelectToken("result"));

                return(trades);
            }

            return(null);
        }
        } // both

        private DateTime GetServerTime()
        {
            DateTime time = DateTime.MinValue;
            JToken   t    = BybitRestRequestBuilder.CreatePublicGetQuery(client, "/v2/public/time");
            JToken   tt   = t.Root.SelectToken("time_now");

            string timeString = tt.ToString();

            time = Utils.LongToDateTime(Convert.ToInt64(timeString.ToDecimal()));
            return(time);
        }
Exemple #5
0
        } // both futures

        public override void GetSecurities() // both futures
        {
            JToken account_response = BybitRestRequestBuilder.CreatePublicGetQuery(client, "/v2/public/symbols");

            string isSuccessfull = account_response.SelectToken("ret_msg").Value <string>();

            if (isSuccessfull == "OK")
            {
                OnSecurityEvent(BybitSecurityCreator.Create(account_response.SelectToken("result"), futures_type));
            }
            else
            {
                SendLogMessage($"Can not get securities.", LogMessageType.Error);
            }
        }
Exemple #6
0
        public override void GetPortfolios()
        {
            List <Portfolio> portfolios = new List <Portfolio>();

            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("api_key", client.ApiKey);

            JToken account_response = BybitRestRequestBuilder.CreatePrivateGetQuery(client, "/v2/private/wallet/balance", parameters);

            string isSuccessfull = account_response.SelectToken("ret_msg").Value <string>();

            if (isSuccessfull == "OK")
            {
                portfolios.Add(BybitPortfolioCreator.Create(account_response.SelectToken("result"), "BybitPortfolio"));
            }
            else
            {
                SendLogMessage($"Can not get portfolios info.", LogMessageType.Error);
                portfolios.Add(BybitPortfolioCreator.Create("undefined"));
            }

            OnPortfolioEvent(portfolios);
        } // both futures
Exemple #7
0
        } // both

        public override void GetOrdersState(List <Order> orders)
        {
            foreach (Order order in orders)
            {
                Dictionary <string, string> parameters = new Dictionary <string, string>();

                parameters.Add("api_key", client.ApiKey);
                parameters.Add("symbol", order.SecurityNameCode);
                parameters.Add("order_id", order.NumberMarket);

                JToken account_response;
                if (futures_type == "Inverse Perpetual")
                {
                    account_response = BybitRestRequestBuilder.CreatePrivateGetQuery(client, "/v2/private/order", parameters); ///private/linear/order/search
                }
                else
                {
                    account_response = BybitRestRequestBuilder.CreatePrivateGetQuery(client, "/private/linear/order/search", parameters);
                }

                string isSuccessfull = account_response.SelectToken("ret_msg").Value <string>();

                if (isSuccessfull == "OK")
                {
                    string state = account_response.SelectToken("result").SelectToken("order_status").Value <string>();

                    switch (state)
                    {
                    case "Created":
                        order.State = OrderStateType.Activ;
                        break;

                    case "Rejected":
                        order.State = OrderStateType.Fail;
                        break;

                    case "New":
                        order.State = OrderStateType.Activ;
                        break;

                    case "PartiallyFilled":
                        order.State = OrderStateType.Patrial;
                        break;

                    case "Filled":
                        order.State = OrderStateType.Done;
                        break;

                    case "Cancelled":
                        order.State = OrderStateType.Cancel;
                        break;

                    case "PendingCancel":
                        order.State = OrderStateType.Cancel;
                        break;

                    default:
                        order.State = OrderStateType.None;
                        break;
                    }
                }
            }
        } // both
Exemple #8
0
        public override void SendOrder(Order order)
        {
            if (order.TypeOrder == OrderPriceType.Iceberg)
            {
                SendLogMessage("Bybit does't support iceberg orders", LogMessageType.Error);
                return;
            }

            string side = "Buy";

            if (order.Side == Side.Sell)
            {
                side = "Sell";
            }

            string type = "Limit";

            if (order.TypeOrder == OrderPriceType.Market)
            {
                type = "Market";
            }

            string reduce = "false";

            if (order.PositionConditionType == OrderPositionConditionType.Close)
            {
                reduce = "true";
            }

            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("api_key", client.ApiKey);
            parameters.Add("side", side);
            parameters.Add("order_type", type);
            parameters.Add("qty", order.Volume.ToString().Replace(",", "."));
            parameters.Add("time_in_force", "GoodTillCancel");
            parameters.Add("order_link_id", order.NumberUser.ToString());
            parameters.Add("symbol", order.SecurityNameCode);
            parameters.Add("price", order.Price.ToString().Replace(",", "."));
            parameters.Add("reduce_only", reduce);
            parameters.Add("close_on_trigger", "false");

            JToken place_order_response;

            if (client.FuturesMode == "Inverse")
            {
                place_order_response = BybitRestRequestBuilder.CreatePrivatePostQuery(client, "/v2/private/order/create", parameters);
            }
            else
            {
                place_order_response = BybitRestRequestBuilder.CreatePrivatePostQuery(client, "/private/linear/order/create", parameters);
            }

            var isSuccessful = place_order_response.SelectToken("ret_msg").Value <string>();

            if (isSuccessful == "OK")
            {
                SendLogMessage($"Order num {order.NumberUser} on exchange.", LogMessageType.Trade);
                order.State = OrderStateType.Activ;

                OnOrderEvent(order);
            }
            else
            {
                SendLogMessage($"Order exchange error num {order.NumberUser}" + isSuccessful, LogMessageType.Error);
                order.State = OrderStateType.Fail;

                OnOrderEvent(order);
            }
        } // both futures