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); }
} // 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
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); }
} // 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); } }
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
} // 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
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