Несколько раз уже поднимался вопрос, а как получить, а как узнать... нужную циферку
Можно, конечно, слезно написать разработчикам и они что-то когда-то напишут в толстый талмуд описания стратегий и выпустят в новой версии... а может и нет...
А можно обратиться к объектам сборки Core.dll, где лежат все первичные данные терминала, пошарить и ... найти что-нибудь нужное, разумеется ооочень осторожно, не забывать про наличие блокировок и ничего там не менять ))))
Итак, пара строчек кода и пояснения
1. Воспользуемся методом динамической загрузки сборки в контекст приложения, здесь нет ничего страшного, так-как сборка уже загружена самим терминалом, вызов метода просто убеждается в ее наличии и дает ссылку на ее метаданные
Код: Выделить всё
var CoreAssembly = System.Reflection.Assembly.LoadFrom("Core.dll");
2. Теперь получим класс объекта и статический экземпляр. Все данные и работа\обновление с сервера разделены по интересам в различных менеджерах: OrdersManager, PositionManager, BalanceManager, OperationsManager, QuotesManager, QueueManager, ConnectionManager, OrderSendManager, SubscriptionManager, ChatManager, NewsManager, MarketTradesManager, Notifications наверно все... у каждого объекта есть статическое свойство Instance, в котором хранится единственный экземпляр соответствующего менеджера на всю систему.
Имя объекта начинаем с приставки Core, получение статического значения - GetValue с пустым указателем
Код: Выделить всё
var opManagerType = CoreAssembly.GetType("Core.OperationsManager");
var opManagerInstance = opManagerType.GetProperty("Instance").GetValue(null);
3. С помощью рефлексии, хвала Микрософту, получаем нужный нам метод или свойство.
Код: Выделить всё
var opManagerGetOperations = opManagerType.GetMethod("GetOperations", new Type[0]);
4. пользуемся (вызываем) методом или свойством, предварительно разбирая доку по языку C#, относительно всяких правил приведения типов, ибо полученные рефлексией объекты не дружественны к компилятору скрипта, нужно также пошарить по базовым типам, как там все:
Код: Выделить всё
var opList = (((IEnumerable<object>)opManagerGetOperations.Invoke(opManagerInstance, null))
.OfType<ClientOperationEntity>()
.ToList());
Осмелюсь напомнить, что работа с рефлексией вещь достаточно затратная, поэтому, ее нужно выполнять при инициализации скрипта, записывать все явки в глобальные переменные (пункты 1...3).
Пункт 4 на усмотрение, если данные не будут меняться в ходе выполнения скрипта, можно их также запрашивать при инициализации, если же нужны именно свежие данные, каждый раз, пункт 4 выполняем в методе индикатора или стратегии.
надеюсь, профит