Страница 4 из 12

Re: AdirConnector

Добавлено: 19 апр 2019, 12:15
Bobson
В FinInfoExtEntity нет ничего такого, чтобы была необходимость организовывать подписку на него.
Просто запросите информацию один раз при старте программы. Для фьючерсов можно запросить по окончанию основного и/или промежуточного клиринга.

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

using AD.Common.Helpers;
using AD.Common.DataStructures;
using Core;
       public void GetFinInfoExtEntity()
       {
            FinInfoExtEntity finInfoExtEntity;
            if (DataStorageShared.FinInfoExt.TryGetValue(idFi, out finInfoExtEntity))
            {
                Debug.Print(finInfoExtEntity.ToString());
            }
            else
            {
                Debug.Print("Не шмогла найти finInfoExtEntity");
            }
        }

IdFI инструмента можно получить так:

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

    int IdFI = DataStorageShared.GetIdFI("SiH9", "ФОРТС");

Обратная операция:

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

     var q = DataStorageShared.GetObject(IdFI).SymbolObject;
     var s = DataStorageShared.GetObject(IdFI).NameObject; ;


P.S.
Но всё это игры в песочнице. По-крайней мере до тех пор, пока не будет возможности подавать и удалять поручения, хотя бы лимитные.
P.P.S.
В любом случае нужно будет переписать половину терминала. И это без GUI.

Re: AdirConnector

Добавлено: 19 апр 2019, 15:11
Vit123
Спасибо Bobson.
Не был подключен DataStorageShared.

Цитата
Но всё это игры в песочнице. По-крайней мере до тех пор, пока не будет возможности подавать и удалять поручения, хотя бы лимитные.

Разве Core.OrderSendManager.CreateClientOrderEntity для выставления лимитной заявки не будет работать?

Re: AdirConnector

Добавлено: 22 апр 2019, 16:16
Vit123
Пробую подавать заявку так:
var str = OrderSendManager.TryCreateOrder(OrderType.LMT,OrderDirection.Buy,292660,"1111-000",1,price,false,LifeTime.D30).DebugLog;
Ничего не получается. Не ясно как сертификат загрузить, может дело в нём?
И ещё не понятно почему цена массивом должна быть.

Re: AdirConnector

Добавлено: 22 апр 2019, 22:01
Vit123
После долгих переборов методов удалось поставить лимитную заявку.

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

string message;
ClientOrderEntity clientOrder;
OrderSendManager.CreateClientOrderEntity(292660, OrderType.LMT, QuantityType.QTY, "11111-000", out message, out clientOrder,LifeTime.D30);clientOrder.Quantity=1;
clientOrder.LimitPrice=3400;
clientOrder.BuySell=OrderDirection.Buy;   
var str = OrderSendManager.SendOrder(clientOrder,true);


В clientOrder так же есть все параметры для любых видов заявок.

Re: AdirConnector

Добавлено: 24 апр 2019, 09:29
Marcello
Vit123 писал(а):После долгих переборов методов удалось поставить лимитную заявку.

А у меня не получается. В логе OrderCreate появляются только две строки:

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

2019.04.24 00:02:33.603   Started creating order...
2019.04.24 00:02:33.604   Applying template...

А в аналогичном логе терминала их больше:

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

2019.04.23 20:52:07.029   Started creating order...
2019.04.23 20:52:07.029   Applying template...
2019.04.23 20:52:07.029   Creating document text...
2019.04.23 20:52:07.029   Signing...
2019.04.23 20:52:07.038   Sending: 23.04.2019 19:52:10: 01.01.0001 0:00:00 [ClientOrderEntity(65): ....

Что я делаю не так?

Re: AdirConnector

Добавлено: 24 апр 2019, 11:34
Vit123
Я так понял нужна инициализация.
У меня тоже через раз выставлялась, ключ сертификата то загрузится, то нет.
Решить проблему помогло :

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

OrderSendManager.Instance.Init();


До установления коннекта.

В логе появится:
019.04.23 14:28:17.293 Started creating order...
2019.04.23 14:28:17.293 Applying template...
2019.04.23 14:28:17.730 Creating document text...
2019.04.23 14:28:17.777 Signing...
2019.04.23 14:28:17.839 Sending:
Так же появится лог по ключу сертификата, где будет сказано, что ключ загружен.

Re: AdirConnector

Добавлено: 24 апр 2019, 13:15
Marcello
Может кому-то будет полезным пример подачи заявки с указанием времени активации и "длительности":

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

string message;
ClientOrderEntity clientOrder;
Core.OrderSendManager.CreateClientOrderEntity(149199, OrderType.LMT, QuantityType.QTY, "11111-000", out message, out clientOrder, LifeTime.GTT);
clientOrder.Quantity = 2000;
clientOrder.LimitPrice = 90.0;
clientOrder.BuySell = OrderDirection.Buy;

var aTime = "25.04.2019 10:00:00"; // время активации
clientOrder.ActivationTime = DateTime.ParseExact(aTime, "dd.MM.yyyy HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo);

var wdTime = "25.04.2019 10:05:00"; // время окончания
clientOrder.WithDrawTime = DateTime.ParseExact(wdTime, "dd.MM.yyyy HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo);

var str = Core.OrderSendManager.SendOrder(clientOrder, true);

Re: AdirConnector

Добавлено: 24 апр 2019, 20:10
Vit123
Ребята, кто знает как на балансы подписаться?
Позиции приходят без подписки, а балансы молчат.

Re: AdirConnector

Добавлено: 25 апр 2019, 14:07
ensh
Vit123 писал(а):Ребята, кто знает как на балансы подписаться?
Позиции приходят без подписки, а балансы молчат.

Балансы - результат агрегации позиций, то есть подписываемся на позиции, а потом опрашиваем балансы периодически и смотрим что поменялось.
Смотрите четвертый или пятый пост в теме, там по таймеру одновременно получают обновления позиций и балансов

Re: AdirConnector

Добавлено: 25 апр 2019, 17:29
piyyy
Vit123

Вызов OrderSendManager.Instance.Init() не имеет смысла, т.к. он ничего не делает. Единственный результат это создание объекта OrderSendManager (см. паттерн Singleton). Что эквивалентно:

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

var _orderSendManager = OrderSendManager.Instance;


Однако, до вызова OrderSendManager.CreateClientOrderEntity() он и так создается в рантайме.

Межуд этими сообщениями происходит подгрузка ключа в другом трэде. Скорее всего, искать причину нужно в этом направлении.

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

2019.04.23 20:52:07.029   Applying template...
2019.04.23 20:52:07.029   Creating document text...


Попробуй так:

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

Sign.Instance.LoadCerificate(true, false);
// Так же можно поробовать так
//Sign.Instance.LoadCerificate(true);
//while (!Sign.Instance.IsKeyLoaded)
//{
//    Thread.Sleep(1000);
//}
string message;
..........................