Страница 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
Я так понял нужна инициализация.
У меня тоже через раз выставлялась, ключ сертификата то загрузится, то нет.
Решить проблему помогло :
До установления коннекта.
В логе появится:
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;
..........................