Как получить объект через GlobalDictionary?

Для передачи объекта через GlobalDictionary его необходимо создать, добавить в GlobalDictionary и затем прочитать, используя astype с указанием типа получаемого объекта.

В примере далее, создается объект книги Excel, который будет использоваться разными индикаторами и стратегиями совместно. Такой подход позволит избежать повторного открытия одной и той же книги. Таймер индикатора выполняет сохранение рабочей книги в файл, избавляя от этой работы другие инструменты теханализа. Во время оптимизации стратегии такое разделение труда позволяет экономить достаточно много времени и делает работу с Excel более удобной.

// Gelium_Helper 2013.09.20
Using elsystem; Using elsystem.collections; Using elsystem.io; using elsystem.office.excel;
Input: p_ExcelFile("C:\Chart\Gelium_Trader.xlsm"), p_ExcelVisible(true), p_ExcelDict("Gelium_Treader_Excel"), p_SaveTimer(60), p_Debug(0);
Vars: GlobalDictionary GExcel(Null), Workbook WB( NULL );
Method void ExcelOpen() begin If p_ExcelFile <> "" then begin Try GExcel = GlobalDictionary.Create(); If GExcel.Contains(p_ExcelDict) = False then begin If p_Debug > 0 then print("Открываем: ", p_ExcelFile); WB = new Workbook; WB.FileName = p_ExcelFile; WB.Load = true; GExcel.Add(p_ExcelDict, WB); end else begin WB = GExcel.Items[p_ExcelDict] astype Workbook; If p_Debug > 0 then print("Используем открытый: ", WB.FileName); end; WB.SaveOnClose = true; WB.Visible = p_ExcelVisible; // Показываем окно Excel WB.Load = true; // Загружаем файл для работы If p_Debug > 0 then print("Файл открыт успешно: ", p_ExcelFile); Timer1.Interval = p_SaveTimer * 1000; If Timer1.Interval < 1000 then Timer1.Interval = 1000; Timer1.Enable = (p_SaveTimer > 0); catch (exception ex) print("Ошибка открытия файла Excel: ", ex.Message); finally end; end; end;
method void Timer1_Elapsed( elsystem.Object sender, elsystem.TimerElapsedEventArgs args ) begin Try If p_Debug > 0 then print("Сохраняем: ", p_ExcelFile); If GExcel.Contains("Gelium_Treader_Excel_Save") = true then if GExcel.Items["Gelium_Treader_Excel_Save"] astype int = 1 then begin WB.Save(); GExcel.Items["Gelium_Treader_Excel_Save"] = 0; end; catch (exception ex) print("Ошибка сохранения файла Excel: ", ex.Message); ExcelOpen(); finally end; end;
method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) begin ExcelOpen(); end;
If false then Plot1(0);

Pavel Gelium 2000-2017 © All rights reserved.