Страница 1 из 5

Окно "Операции": время хранения данных

Добавлено: 20 янв 2019, 08:30
BugsDigger
Привет всем.

В терминале есть окно "Операции".
Вопрос: за какой период времени там показываются операции и/или сколько времени хранятся данные?
Например, вчера еще была строчка об операции, проведенной несколько дней назад, сегодня уже ее нет. :)
В документации об этом ничего не нашел.

Re: Окно "Операции": время хранения данных

Добавлено: 20 янв 2019, 10:55
ensh
Операции (совершенные сделки) передаются на клинта пока не прошло урегулирование, плюс минус сессия, ночью, после урегулирования, на клиента прилетают команды удаления операций.

Re: Окно "Операции": время хранения данных

Добавлено: 20 янв 2019, 11:09
BugsDigger
Привет, ensh.

Спасибо за информацию.
А можно как-то прочесть эти текущие данные программно в индикаторе или стратегии?

Re: Окно "Операции": время хранения данных

Добавлено: 20 янв 2019, 12:37
AP_Bor
Доброго времени суток, ensh
BugsDigger » 20.01.2019, 11:09 писал(а):... А можно как-то прочесть эти текущие данные программно ...
AP_Bor » 12.01.2019, 19:42 писал(а):... "Журнал трейдера" ...
Примерно об этом я и говорил.
► Показать
С наилучшими пожеланиями

Re: Окно "Операции": время хранения данных

Добавлено: 20 янв 2019, 23:56
ensh
BugsDigger писал(а):Привет, ensh.

Спасибо за информацию.
А можно как-то прочесть эти текущие данные программно в индикаторе или стратегии?


Попробуйте следующий скрипт, часть его, возможно, следует оставить в глобальной переменной, а последнюю строку вызывать уже в обработчике стратегии.

Возможно, для оптимизации вызов ToList не нужен и можно использовать foreach

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


var CoreAssembly = System.Reflection.Assembly.LoadFrom("Core.dll");
var opManagerType = CoreAssembly.GetType("Core.OperationsManager");
var opManagerInstance = opManagerType.GetProperty("Instance").GetValue(null);
var opManagerGetOperations = opManagerType.GetMethod("GetOperations", new Type[0]);

var opList = (((IEnumerable<object>)opManagerGetOperations.Invoke(opManagerInstance, null)).OfType<ClientOperationEntity>().ToList());


Re: Окно "Операции": время хранения данных

Добавлено: 21 янв 2019, 18:39
BugsDigger
Привет, ensh.

> Попробуйте следующий скрипт

Большое спасибо, работает.

> часть его, возможно, следует оставить в глобальной переменной

А как? Я могу передать только через Types.Int, пытался как-то тупо привести тип opManagerGetOperations, но бесполезно, конечно (C# не владею).

Re: Окно "Операции": время хранения данных

Добавлено: 21 янв 2019, 19:11
ensh
Да нехорошо получилось, мне казалось можно глобальную переменную типа object задать, посмотрю еще, что можно придумать ;)

В принципе, можно с помощью рефлексии добавлять свои данные в ScriptManager как глобальные переменные, там вроде нетипизированный массив

Re: Окно "Операции": время хранения данных

Добавлено: 21 янв 2019, 19:18
AP_Bor
Доброго времени суток, ensh
ensh писал(а):Да нехорошо получилось, мне казалось можно глобальную переменную типа object задать, посмотрю еще, что можно придумать ;)

А указатели, передавать не пробовали?
С наилучшими пожеланиями

Re: Окно "Операции": время хранения данных

Добавлено: 21 янв 2019, 20:06
BugsDigger
Еще немного вдогонку.

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

  foreach(AD.Common.DataStructures.ClientOperationEntity item in opList)
   WriteLine(LogFile, item.ToString());


Результат (вместо реальных целых чисел вписал <intN>, где N - число разрядов):

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

ClientOperationEntity(74):
{
 IdOperation: <int9>,
 TimeOperation: 20190121 18:15:06.000,
 ExtOperNo: <int10>,
 NumEDocument: <int10>,
 IdObject: <int6>,                       // похоже на код тикера, в текстовом экспорте есть поле SymbolObject с тикером
 IdMarketBoard: TQxx,                // очевидно, код рынка, в текстовом экспорте есть поле NameMarketBoard с названием рынка
 IdOperationType: TRD,
 BuySell: Sell,
 Quantity: 10,
 Price: 208,01,
 Value: 2080,1,
 IdObjectCurrency: <int6>,
 Yield: 0,
 IdSubAccount: <int5>,
 IdAccount: <int5>,
 Description: ' ',
 IdOperationStatus: New,
 SettleDate: 20190123 00:00:00.000,
 DeliveryDate: 20190123 00:00:00.000,
 RepoTerm: 0,
 RepoDate: 00010101 00:00:00.000,
 IdRazdel: 119708,
 AccruedInt: 0,
 Version: 14356560579,
 Operation: Updated
}


Т.е. тут не вся нужная информация, кое-что берется, очевидно, из detail таблиц.
В то же время если в окне "Операции" (там есть контекстное меню) сделать экспорт в текст, там появляется вся инфа, в частности тикер и рынок в читабельном виде.
1) Можно ли из инфы, приведенной выше, извлечь рынок и тикер? Или наоборот, в коде индикатора/стратегии добыть эти коды, чтобы из всех рекордов выцеплять только нужные?
2) Если нет, то что делать?

Попутно там же нашел экспорт в Excel, который вроде можно запускать автоматически, но еще не видел, как это работает в реальности. В документации не описано...

Re: Окно "Операции": время хранения данных

Добавлено: 21 янв 2019, 20:09
BugsDigger
AP_Bor писал:

> А указатели, передавать не пробовали?

Если вопрос ко мне, то бесполезно. :)
Смотрел код, где вы таки приводите к IntPtr, но для меня это пока почти китайская грамота.