public override void SendOrder(Order order) { _portfolioCurrent = order.PortfolioNumber; JsonObject jsonContent = new JsonObject(); jsonContent.Add("contract_code", order.SecurityNameCode); jsonContent.Add("client_order_id", order.NumberUser); jsonContent.Add("price", order.Price); jsonContent.Add("volume", order.Volume); jsonContent.Add("direction", order.Side == Side.Buy ? "buy" : "sell"); // если ордер открывающий позицию - тут "open", если закрывающий - "close" if (order.PositionConditionType == OrderPositionConditionType.Close) { jsonContent.Add("offset", "close"); } else { jsonContent.Add("offset", "open"); } jsonContent.Add("lever_rate", "10"); jsonContent.Add("order_price_type", "limit"); string url = _privateUriBuilder.Build("POST", "/swap-api/v1/swap_order"); StringContent httpContent = new StringContent(jsonContent.ToString(), Encoding.UTF8, "application/json"); var httpClient = new HttpClient(); var response = httpClient.PostAsync(url, httpContent).Result; string result = response.Content.ReadAsStringAsync().Result; PlaceFuturesOrderResponse orderResponse = JsonConvert.DeserializeObject <PlaceFuturesOrderResponse>(result); if (orderResponse.status == "ok") { SendLogMessage($"Order num {order.NumberUser} on exchange.", LogMessageType.Trade); } else { //err_msg dynamic errorData = JToken.Parse(result); string errorMsg = errorData.err_msg; SendLogMessage($"Order exchange error num {order.NumberUser} : {errorMsg}", LogMessageType.Error); order.State = OrderStateType.Fail; OnOrderEvent(order); } }
public override void SendOrder(Order order) { _portfolioCurrent = order.PortfolioNumber; JsonObject jsonContent = new JsonObject(); Security mySec = null; for (int i = 0; i < _securities.Count; i++) { if (_securities[i].Name == order.SecurityNameCode) { mySec = _securities[i]; break; } } string[] contractData = mySec.NameId.Split('_'); var contractType = "quarter"; if (contractData[1] == "CW") { contractType = "this_week"; } else if (contractData[1] == "NW") { contractType = "next_week"; } jsonContent.Add("symbol", contractData[0]); jsonContent.Add("contract_type", contractType); jsonContent.Add("client_order_id", order.NumberUser); jsonContent.Add("price", order.Price); jsonContent.Add("volume", order.Volume); jsonContent.Add("direction", order.Side == Side.Buy ? "buy" : "sell"); // если ордер открывающий позицию - тут "open", если закрывающий - "close" if (order.PositionConditionType == OrderPositionConditionType.Close) { jsonContent.Add("offset", "close"); } else { jsonContent.Add("offset", "open"); } jsonContent.Add("lever_rate", "10"); jsonContent.Add("order_price_type", "limit"); string url = _privateUriBuilder.Build("POST", "/api/v1/contract_order"); StringContent httpContent = new StringContent(jsonContent.ToString(), Encoding.UTF8, "application/json"); var httpClient = new HttpClient(); var response = httpClient.PostAsync(url, httpContent).Result; string result = response.Content.ReadAsStringAsync().Result; PlaceFuturesOrderResponse orderResponse = JsonConvert.DeserializeObject <PlaceFuturesOrderResponse>(result); if (orderResponse.status == "ok") { SendLogMessage($"Order num {order.NumberUser} on exchange.", LogMessageType.Trade); } else { //err_msg dynamic errorData = JToken.Parse(result); string errorMsg = errorData.err_msg; SendLogMessage($"Order exchange error num {order.NumberUser} : {errorMsg}", LogMessageType.Error); order.State = OrderStateType.Fail; OnOrderEvent(order); } }