Клиентский API > AdirConnector

Разработка с использованием клиентского API
High Profit Trader
Сообщения: 77
Зарегистрирован: 23 мар 2018, 10:54
Поблагодарили: 2 раза

Re: AdirConnector

Непрочитанное сообщение High Profit Trader » 26 апр 2019, 14:50

Marcello писал(а):Может кому-то будет полезным пример подачи заявки с указанием времени активации и "длительности":

Код: Выделить всё

string message;
...


Марсело, а где Вы такой код нашли?

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 26 апр 2019, 17:43

Допилил код из этого поста: viewtopic.php?f=13&t=580&start=30#p4324

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 26 апр 2019, 20:33

Очередной ступор :?
Чтобы поставить заявку, которая активируется по исполнению "родительской" заявки, нужно ее номер присвоить полю NumEDocumentBase и указать QuantityType.OTO. И все бы хорошо, но на некоторых инструментах у меня он (номер заявки) никак не берется. Родительскую заявку ставлю так:

Код: Выделить всё

string EDoc = Core.OrderSendManager.SendOrder(clientOrder, true);

Тут в EDoc получаю "номер документа" ZAN. Потом по нему хочу получить саму заявку:

Код: Выделить всё

OrderEntityEx O = Core.OrdersManager.Instance.GetOrderByClientNumEDocument(EDoc);

чтобы из нее взять O.NumEDocument, но вместо заявки получаю NULL. Что я делаю не так? Есть подозрение, что после отправки заявки нужно что-то перезапросить, но что и как?

Vit123
Сообщения: 19
Зарегистрирован: 29 окт 2018, 09:49
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: AdirConnector

Непрочитанное сообщение Vit123 » 27 апр 2019, 06:49

Возможно заявка просто не успела получить NumEDocument
Я нахожу NumEDocument по событию - заявка принята:

Код: Выделить всё

OrdersManager.Instance.OrderAccepted += (obj) =>
  {
   if (obj.ClientNumEDocument ==ClientNumEDoc) NumEDocument = obj.NumEDocument;
  }

Полученный ClientNumEDoc при подачи заявки проверяю на совпадение в полученном по событию объекте и нахожу NumEDocument

Vit123
Сообщения: 19
Зарегистрирован: 29 окт 2018, 09:49
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: AdirConnector

Непрочитанное сообщение Vit123 » 27 апр 2019, 07:00

Благодаря piyyy разобрался с сертификатом.
Загружаю ключ:

Код: Выделить всё

if (!Sign.Instance.IsKeyLoaded) Sign.Instance.LoadCerificate(false);

Коннект не просто должен быть, а данные уже должны приходить с сервера.
Подвязал к событию получения позиций.

Либо загрузка/выгрузка ключа в ручную например на клике иконки ключа

Код: Выделить всё

if (!Sign.Instance.IsKeyLoaded) Sign.Instance.LoadCerificate(false);
else Sign.Instance.UnloadCerificate();

Ну и цветовая индикация загрузки/выгрузки ключа по событию:

Код: Выделить всё

Sign.Instance.AfterCerificateManipulation += (bool isKeyLoaded) => {
        if (isKeyLoaded) label21.BackColor = Color.Lime;
        else label21.BackColor = Color.Red;
 };

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 27 апр 2019, 17:15

Vit123 писал(а):Я нахожу NumEDocument по событию - заявка принята

Через события - идеальный способ. Но видимо я плохо понимаю всю эту многопоточность, и поэтому у меня работает через раз и не для всех инструментов.

Событие прописал тут:

Код: Выделить всё

public string ZAN;
public OrderEntityEx GObj;
       
public Form1()
{
Core.OrdersManager.Instance.OrderAccepted += (obj) =>
{
if (InvokeRequired) { Invoke(new MethodInvoker(delegate { addLog( String.Format("Core.OrdersManager.Instance.OrderAccepted: {0}", obj.NumEDocument ) ); })); }
GObj = null; if (obj.ClientNumEDocument == ZAN) { GObj = obj; }
};


Ставлю покупку GMKN и следом связанную продажу - все работает. То же самое для POLY - покупка есть, продажи нет, причем в логе даже не повляется "Core.OrdersManager.Instance.OrderAccepted". Если ставить после покупки POLY еще одну связанную покупку, то заявка встает. Если продажу, то нет. Для GMKN все работает "в обе стороны". Стабильности нет...

Еще одна проблема в получении IdFI. Сделал такую штуку:

Код: Выделить всё

private int getID(string xTicker)
{
   if (Core.ADConnection.Instance.Status != LogicConnectionStatus.Connected)
   {
      MessageBox.Show("Нет соединения с сервером");
      return -1;
   }
   string vTicker = xTicker.ToUpper();
   int idFI = Core.DataStorageShared.GetIdFI(vTicker, "МБ ЦК");
   return idFI;
}

И она тоже работает не всегда. В предыдущем примере, где пара заявок GMKN отработала нормально, второй раз для того же самого GMKN (в том же самом коннекте!) в getID возвращает -1. Снова стабильности нет...

Vit123
Сообщения: 19
Зарегистрирован: 29 окт 2018, 09:49
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: AdirConnector

Непрочитанное сообщение Vit123 » 27 апр 2019, 20:36

Marcello, а вы помимо LogicConnectionStatus.Connected состояние коннекта серверов (FrontEndType) контролируете?
Например для для DataStorageShared.GetIdFI нужен FrontEndType.BirzArchAndMediaServer.
Для заявок - FrontEndType.OperServer.
Сделал индикацию коннекта серверов, по аналогии с AD4, так у меня регулярно наблюдается цветомузыка.
Соответственно заявки тоже не проходят в такие моменты.
Сижу на спутниковом канале на работе, не знаю точно, у меня проблема, или же так сервера AD работают.

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 27 апр 2019, 21:09

Vit123, нет. Как это делается? Кстати, пару раз видел в логе, что в процессе установки заявок мелькает событие Connected.

Vit123
Сообщения: 19
Зарегистрирован: 29 окт 2018, 09:49
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: AdirConnector

Непрочитанное сообщение Vit123 » 28 апр 2019, 04:47

Индикация и сообщения по событию состояния коннекта серверов:

Код: Выделить всё

ADConnection.Instance.OnFrontEndConnectionStatusChanged += (type, status) =>
 {
       textBox1.AppendText(Environment.NewLine+type+" - "+status+" "+DateTime.Now);
       
   if (type==FrontEndType.AuthAndOperInitServer) {
      if (status==ConnectionStatus.Authorized || status==ConnectionStatus.Connected) label17.BackColor = Color.Lime;
      if (status==ConnectionStatus.Connecting) label17.BackColor = Color.PeachPuff;
      if (status==ConnectionStatus.Disconnected) label17.BackColor = Color.Red;
   }
   if (type==FrontEndType.OperServer) {
      if (status==ConnectionStatus.Authorized || status==ConnectionStatus.Connected) label18.BackColor = Color.Lime;
      if (status==ConnectionStatus.Connecting) label18.BackColor = Color.PeachPuff;
      if (status==ConnectionStatus.Disconnected) label18.BackColor = Color.Red;
   }
   if (type==FrontEndType.RealTimeBirzInfoServer) {
      if (status==ConnectionStatus.Authorized || status==ConnectionStatus.Connected) label19.BackColor = Color.Lime;
      if (status==ConnectionStatus.Connecting) label19.BackColor = Color.PeachPuff;
      if (status==ConnectionStatus.Disconnected) label19.BackColor = Color.Red;
   }
   if (type==FrontEndType.BirzArchAndMediaServer) {
      if (status==ConnectionStatus.Authorized || status==ConnectionStatus.Connected) label20.BackColor = Color.Lime;
      if (status==ConnectionStatus.Connecting) label20.BackColor = Color.PeachPuff;
      if (status==ConnectionStatus.Disconnected) label20.BackColor = Color.Red;
   }
};

Для простоты в label пишу цифры (1,2,3,4 сервер), ключ сертификата - буква К;

Метод для получения статуса коннекта.

Код: Выделить всё

var status = ConnectionManager.Instance.GetConnectionStatus(FrontEndType.OperServer);

Можно прикрутить для проверки перед подачи заявки.
Во FrontEndType есть тип FrontEndType.AllTypes, но не проверял ещё как это работает

ensh
Сообщения: 218
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 39 раз

Re: AdirConnector

Непрочитанное сообщение ensh » 28 апр 2019, 11:31

Vit123 писал(а):Коннект не просто должен быть, а данные уже должны приходить с сервера.


Да, это обязательная последовательность действий, сначала подключиться, потом грузить ключ


Вернуться в «Клиентский API»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя