Новая версия EasyLanguage 9.
Новая среда разработки TradeStation Development Environment (TDE).
EasyLanguage Utilization Monitor.
Генетическое Stress-тестирование во время оптимизации.
Улучшение производительности генетической оптимизации.
Новые целевые функции оптимизации.
Улучшения оптимизации стратегии.
Автоматическое обновление платформы.
Выводы.
Новая версия EasyLanguage 9.
Синтаксис языка программирования EasyLanguage 9 расширен и предоставляет новые возможности для использования объектно-ориентированного программирования:- Classes (классы).
До EasyLanguage 9.0, все переменные были основаны на простых типах данных, таких как строки или числа, известные как типы переменных. В EasyLanguage 9.0 добавлена новая категория - ссылочные типы. Эти новые типы, также известные как классы, описываются в библиотеке классов EasyLanguage (ECL). - Namespaces (пространства имен).
Чтобы помочь в использовании библиотеки классов EasyLanguage (ECL), связанные по логике и наследованию объекты группируются в пространства имен, которые подключаются к вашему коду.
Например:
using elsystem;
В дальнейшем можно создавать объекты подключенных ранее пространств имен:
using elsystem.office.excel;
using elsystem.collections;
variables:
Ссылаясь на тип в EasyLanguage, объявление объекта можно снабдить префиксом библиотеки:
MarketDepthProvider MD( NULL ),
Vector SizeBook( NULL ),
Timer UDTmr( NULL ),
Workbook MarketDepthWB( NULL );
method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args) - Local Methods (локальные методы).
EasyLanguage 9.0 теперь поддерживает локальные методы. Подобно функциям EasyLanguage, они могут использоваться, чтобы улучшить читаемость и упростить структуру кода. Локальные методы выполняются быстрее, чем функции EasyLanguage и поддерживают рекурсивный вызов. - Event Handlers (обработчики событий).
Многие из компонентов, описанных в разделе ToolBox, могут предоставить информацию по мере ее доступности с помощью соответствующих обработчиков событий. Например, обработчик события таймера будет производить вызов вашего кода через заданный временной интервал. - Exception Handling (обработка исключений).
EasyLanguage 9.0 обеспечивает новый механизм для обнаружения и обработки ошибок периода выполнения (run-time error). Эти ошибки могут произойти в результате ошибок в программе, но могут также происходить из-за неожиданных условий, которые могут сложиться во время выполнения вашего кода. Необработанные ошибки периода выполнения появляются в журнале событий (TradeStation Events Log) и приводят к отключению инструмента теханализа, который был источником ошибки. Теперь можно контролировать и реагировать на эти исключения, используя новые ключевые слова try, catch и finally.
Например:
var: elsystem.xml.xmldocument doc(nuLL);
method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args )
begin
doc = new elsystem.xml.xmldocument;
try
doc.Load("C:\testing123.xml");
catch (elsystem.io.filenotfoundexception ex)
throw ex.create("User-defined: File is not in the specified directory");
End;
End;
- In/Out - используются в локальных методах, чтобы передать параметры ссылкой или значением.
- Method - объявляет локальный метод в вашем коде.
- Override - переопределение виртуального метода объекта.
- Return – используется для возврата значения из локального метода.
- Try / Catch / Finally / Throw – используются для обработки и генерирования исключения изнутри вашего кода.
- Using - идентифицирует название библиотеки, которая будет использоваться в вашем коде.
- New - создает новый экземпляр ссылочного типа (объект).
- Оператор средства доступа (.) - используемый, чтобы получить доступ к свойству или методу объекта.
- ObjectSimple / ObjectRef – используется для передачи объектов функциям EasyLanguage.
- Swith / case / default –выполнение кода в зависимости от значения переменной:
switch ( GetAppInfo( aiVolatilityModel ) )
begin
case 0:
CompareOptPrice = RawAsk of Option ;
case 1:
CompareOptPrice = RawBid of Option ;
case 2:
CompareOptPrice = Close of Option ;
default:
CompareOptPrice = 0.5 * ( RawBid of Option + RawAsk of Option ) ;
end ;

Классы в ECL могут использоваться только с двумя новыми элементами языка: оператор New, который используется, чтобы создать объект и оператор доступа(.), который используется, чтобы сослаться на свойства объекта или методы.
Группы классов ECL объединены в пространства имен. В Словаре TDE они идентифицируются изогнутыми фигурными скобками {}. Щелчок по знаку "плюс" пространства имен покажет все классы, содержавшиеся в выбранном пространстве имен. Выбор отдельного класса выведет на экран все элементы, содержавшиеся в этом классе. Щелчок по знаку "плюс" покажет родительский класс. Следующее изображение показывает элементы класса очереди пространства имен elsystem.collections.

Краткое описание пространств имен ECL:
- Tsdata.common - cодержит классы, совместно использованные tsdata.marketdata и tsdata.trading.
- Tsdata.marketdata - содержит классы, используемые для получения фундаментальных данных, котировок, баров и данных глубины рынка.
- Tsdata.trading - содержит классы, используемые для контроля и мониторинга счета, позиций, информации о торговле. Дополнительно содержит классы для работы с единичными ордерами и мульти ордерами.
- elsystem - содержит утилиты ECL и базовые классы. Они включают классы исключений (exception), базовые классы для типов значения, объектный базовый класс, события и классы параметра событий, классы для работы с датами и временем, таймер и секундомер, классы среды.
- elsystem.collections - содержит классы, используемые для создания, хранения и управления наборами объектов. Эти классы включают реализации структур общих данных, такие как dictionary (словарь), queue (очередь), stack (стек) и vector (вектор). Класс elsystem.collections.GlobalDictionary позволяет создавать глобальную коллекцию данных, которая будет доступна разным инструментам теханализа, работающих в разных окнах.
- elsystem.office.excel - содержит классы, используемые для взаимодействия с Microsoft Excel. Классы в этом пространстве имен обеспечивают функциональность для чтения и записи ячеек электронной таблицы, для открытия, закрытия, активирования и сохранения рабочих книг (workbooks).
- elsystem.xml - содержит классы, которые позволяют Вам создавать, читать, писать, анализировать, управлять и сохранять документы в формате Extensible Markup Language (XML).
- strategy - содержит классы, которые позволяют Вам просматривать новые и исполненные ордера во время тестирования стратегии. Это позволяет Вам изменять предположения относительно цены, на основании исторически исполненных ордеров. Можно также просмотреть более подробную информацию об ордерах, такую как тип ордера или имя сигнала.
- elsystem.windows.forms - содержит классы и перечисления, которые позволяют создавать пользовательские формы.
Элементы управления могут быть добавлены к форме, позволяя Вам создать множество пользовательских интерфейсов. Пользовательские торговые экраны, панели управления и интерактивные отчеты являются только несколькими примерами типов приложений, которые могут теперь быть созданы с помощью EasyLanguage.
Следующие элементы управления поддерживаются в текущем выпуске. Для полного списка всех новых классов и элементов, пожалуйста, консультируйтесь со словарем (Dictionary) среды разработки TradeStation (TDE).
![]() |
Button – реагирует на щелчок пользователя, отправляя событие нажатия вашему коду. |
![]() |
Checkbox - реагирует на щелчок пользователя и позволяет запрашивать состояние (Checked) во время выполнения. |
![]() |
ComboBox - представляет список выбора элементов. Реагирует на щелчок пользователя, когда делается выбор элемента (SelectedIndexChanged). |
![]() |
GroupBox – панель с подписью для визуальной идентификации логически связанных элементов управления формы. |
| Label - выводит текст на форме. | |
![]() |
ListView - выводит на экран набор элементов в многоколонном формате. Реагирует на щелчок пользователя, когда делается выбор элемента (SelectedIndexChanged). |
| NumericUpDown – выводит на экран числовые значения, которые пользователь может быстро постепенно увеличить или постепенно уменьшить с предопределенном значением шага. | |
![]() |
Panel - панель для визуальной идентификации логически связанных элементов управления формы. |
![]() |
RadioButton – группа взаимоисключающих опций. Реагирует на щелчок пользователя (Click) и позволяет запрашивать состояние (Checked) во время выполнения. |
![]() |
TextBox – поле ввода текста. |
Формы и элементы управления создаются и используются, так же как и другие классы Библиотеки классов EasyLanguage (ECL). У каждого элемента есть метод создания Create, которому передается начальная ширина и высота. После создания элемента управления, его необходимо добавить к существующей форме, вызвав метод AddControl формы. Точное размещение элемента управления задается с помощью метода Location, которому передаются координаты x и y.
Следующий пример создает и выводит на экран простую форму, содержащую единственную кнопку. Когда пользователь нажимает на кнопку, размещается заказ на покупку 100 акций.
Using elsystem;
Using tsdata.trading;
Using elsystem.windows.forms;
// Declare a couple of variables for the form and button objects
Vars: Form MyForm(null), Button MyButton(null);
// Create the form and button when the analysis technique is initialized
method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args )
begin
MyForm = Form.Create("PlaceTrade", 200, 130); // Create the form
MyButton = Button.Create("Buy", 150, 50); // Create the button
MyButton.Location(20, 20); // Place the button 20 pixels from the top and left of the form
MyButton.Click += OnClick; // Tell the button to call the OnClick method when clicked
MyForm.AddControl(MyButton); // Add the button to the form
MyForm.Show(); // Show the form
end;
// This method will be called when the button is clicked
Method void OnClick(elsystem.Object sender, elsystem.EventArgs args)
Vars: OrderTicket ticket; // Declare a variable for an order ticket
Begin
// Create and send the order
ticket = New OrderTicket();
Ticket.Symbol = Symbol;
Ticket.SymbolType = Category;
Ticket.Account = "AccountString"; // Enter a valid account
Ticket.Quantity = 100;
Ticket.Action = OrderAction.Buy;
Ticket.Type = Ordertype.Market;
Ticket.SendAndForget();
End;

Новая среда разработки TradeStation Development Environment (TDE).

Краткий обзор возможностей новой среды разработки кода:
- Наконец-то комментарии к коду можно писать на русском.
- Новый, автономный редактор с вкладками и выдвижными панелями.
- Функция IntelliSense.
- Функция AutoComplete.
- Выделение функциональных блоков кода, которые можно сворачивать и разворачивать.
- Выделение блоков кода ключевыми словами #Region и #EndRegion для сворачивания и разворачивания.
- Панель для быстрой навигации по коду.
- Новая панель словаря EasyLanguage с функциональностью перетащил и кинул.
- Функции отмена/повтора правок, даже после того как документ был сохранен или проверен.
- Нумерация строк.

Новый компонент можно вставить в лоток компонент, дважды кликнув по его названию или перетащить его из ToolBox в открытое окно с кодом.
Component Tray (компонентный лоток) присоединен к нижней части окна кода EasyLanguage.

Компоненты могут быть выбраны левым щелчком мышью. Если окно Редактора свойств открыто, выбранный компонент появляется в окне. Можно легко удалить выбранный компонент, и весь сгенерированный разработчиком код, связанный с этим, нажимая клавишу Delete.
На выдвигающейся справа вкладке Properties Editor располагается редактор свойств и событий компонента.

В приведенном на рисунке выше примере у компонента Timer есть только одно событие - Elapsed.
Просто двойной щелчок по событию создаст метод в Вашем коде, который вызовут с частотой, определенной свойством Interval. Вы помещаете код EasyLanguage, который Вы хотите выполнить, когда Timer вызывает автоматически созданный методе Timer_Elapsed, как показано в следующем изображении.

Обратите внимание, по умолчанию вы не видите код, который генерирует редактор свойств. Однако вы можете просмотреть его, выбрав пункт меню Designer Generated Code из меню View:

Еще одним интересным элементом в новом редакторе свойств является кнопка Input (значок I). Когда свойство выбрано, щелкая по этому значку, вы автоматически добавите код ввода значения для выбранного свойства компонента.
Выбор свойства Interval и щелчок по значку Input приведет к запросу подтверждения для создания соответствующего кода.

Если Вы выберете "Yes", то входное объявление будет автоматически добавлено к Вашему коду.

На выдвигающейся справа вкладке расположен новый Dictionary (словарь), который теперь включает ссылочную информацию для каждого пространства имен, класса, свойства, метода, оператора и события в Библиотеке классов EasyLanguage (ECL).

Функция Autocomplete (автозаполнение) была также улучшена и позволяет теперь показать объектные элементы. Можно быстро получить доступ к свойствам и методам объекта, без необходимости запомнить всю библиотеку классов.

EasyLanguage Utilization Monitor.
EasyLanguage Utilization Monitor - монитор загрузки процессора со стороны инструментов, созданных на базе EasyLanguage. Вызов окна монитора осуществляется через меню *************
Вызов Utilization Monitor осуществляется через главное меню View / EasyLanguage Utilization Monitor.
Генетическое Stress-тестирование во время оптимизации.
Доступ к новым опциям stress-тестирования и улучшения производительности генетического оптимизатора можно получить, щелкнув по кнопке Advanced Setting в окне Format Analysis Techniques & Strategies.
Для конфигурирования и использования нового stress-тестирования, выберите stress test size и процент stress-инкремента как показано в следующем диалоговом окне.

Stress-тест является по существу локализованным устойчивым поиском вокруг каждого отдельного набора параметров во время проведения генетического поиска. Параметр Stress test size определяет тип перебора параметров во время Stress-тестирования.
Например, установим Stress increment=10%.
- Если Stress test size = 1, то Stress-тестирование не используется.
- Если Stress test size > 1, то генетический алгоритм линейно переберет все параметры с определенным смещением в % согласно параметру Stress increment.
- Если Stress test size =2, то основной набор параметров будет перебираться в пределах +10%.
Например, стратегия Bollinger Band с параметрами 18 1.2 16 1.1 будет просчитываться со значениями 20 1.4 18 1.3.
Stress increment +10 % округляется вверх к самому близкому инкрементному значению оптимизации, связанному исходным диапазоном оптимизации.
Вычислим stress-значения:
Input1: 20 = 18 + 10 % = 19.8 округлились вверх к самому близкому инкременту оптимизации 1, таким образом 19.8 становится 20
Input2: 1.4 = 1.2 + 10 % = 1.32 округлились вверх к самому близкому инкременту оптимизации 0.1, таким образом 1.32 становится 1.4
Input3: 18 = 16 + 10 % = 17.6 округлились вверх к самому близкому инкременту оптимизации 1, таким образом 17.6 становится 18
Input4: 1.3 = 1.1 + 10 % = 1.21 округлились вверх к самому близкому инкременту оптимизации 0.1, таким образом 1.21 становится 1.3 - Если Stress test size=3, то основной набор параметров будет просчитываться в диапазоне +10%, -10%.
Например, стратегия Bollinger Band с параметрами 18 1.2 16 1.1 будет просчитываться со значениями
+10 %: 20 1.4 18 1.3 (пример выше),
-10 %: 16 1.0 14 1.0
Stress increment -10% округляется вниз к самому близкому инкрементному значению оптимизации, связанному исходным диапазоном оптимизации.
Вычислим stress-значения:
Input1: 16 = 18 - 10 % = 16.2 округлились вниз к самому близкому инкременту оптимизации 1, таким образом 16.2 становится 16
Input2: 1.0 = 1.2 - 10 % = 1.08 округлились вниз к самому близкому инкременту оптимизации 0.1, таким образом 1.08 становится 1.0
Input3: 14 = 16 - 10 % = 14.4 округлились вниз к самому близкому инкременту оптимизации 1, таким образом 14.4 становится 14
Input4: 1.0 = 1.1 - 10 % = 0.99 округлились вниз к самому близкому инкременту оптимизации 0.1 и ограничили исходным диапазоном оптимизации 1.3, таким образом 0.99 становится 1.0 - Если Stress test size=4, то основной набор параметров будет просчитываться в диапазонах +10%, -10%, +20%
- Если Stress test size =5, то основной набор параметров будет просчитываться в диапазонах +10%, -10%, +20%, -20%.
Улучшение производительности генетической оптимизации.
Теперь можно уменьшить время генетической оптимизации, используя опцию Terminate Optimization, как показано в следующем диалоговом окне.
Если эта опция включена, то генетический оптимизатор автоматически остановится, если результат оптимизации не улучшится за определенной число генераций.
Как правило, если нет никакого улучшения после 10 или больше генераций, можно предположить, что оптимальные целевые параметры для алгоритма найдены и продолжение оптимизации не будет приводить к улучшению результатов.
Новые целевые функции оптимизации.
Добавлено несколько новых функций фитнесса (целей оптимизации), которые устанавливаются в диалоговом окне Chart Analysis Preferences.
Новые функции фитнесса могут быть просмотрены в Strategy Optimization Report (отчете оптимизации стратегии). Для этого новые поля необходимо добавить в Strategy Optimization Report с помощью диалогового окна Optimization Report Fields.

Новые целевые функции оптимизации определяются следующим образом:
- Robustness Index (индекс устойчивости) - индекс устойчивости является отношением градиента кривой прибыльности на интервале проверки (out-of-sample) к градиенту кривой прибыльности на интервале настройки (in-sample).
- Perfect Profit Correlation (совершенная корреляция прибыли) - вычисляет корреляцию фактической кривой прибыли по сравнению с "совершенной" кривой, как будто стратегия смогла купить по каждой минимальной цене и продать по каждой максимальной цене. Генетический оптимизатор будет стремиться найти параметры, которые позволят кривой прибыльности максимально соответствовать "совершенной" кривой.
- Pessimistic Return on Capital (пессимистический возврат на капитал) - функция фитнесса, которая представляет очень консервативное значение возврата на капитал (ROC).
- Expectancy - функция фитнесса, которая измеряет ожидаемую прибыль на доллар, которым рисковали во время сделки. Расчет базируется на методе Van K. Tharp.
- TradeStation Index - функция фитнесса, которая максимизирует чистую прибыль и число прибыльных сделок, минимизируя максимальную внутридневную просадку. Вычисляется по формуле Net Profit * NumWinTrades / AbsValue (Max. Intraday Drawdown).
Улучшения оптимизации стратегии.
Во время оптимизации можно исключить из расчета интервал проверки (Out of Sample) и проводить расчет и поиск оптимальных параметров только на интервале настройки (In Sample). Настройка интервала задается в диалоговом окне Advanced Optimization Options.
Вычисление функции фитнесса на интервале настройки позволяет Вам сравнивать результат оптимизации с работой стратегии на невидимых данных интервала проверки. Эта функция является очень полезной при использовании совместно с новым инструментом TradeStation Walk Forward Optimizer.
Также добавлены новые фильтры к Optimization Report и Strategy Performance Report, которые позволяют просматривать результаты для интервала настройки, интервала проверки или на всех данных.


Автоматическое обновление платформы.
Автоматическое обновление платформы теперь возможно без инсталляции. Для вызова функции проверки можно выбрать в главном меню пункт Help / TradeStation Update Manager.
Параметры обновления платформы доступны в диалоговом окне общих настроек TradeStation.

Обновление загружаются в папку C:\Documents and Settings\User_Name\Application Data\TradeStation Technologies\TradeStation\Versions\9.00.00\Patches и содержатся в файле с именем типа e3706341-d24d-4da3-a9eb-d0efe41eeda0.msp. Запуск msp-файла и выбор в диалоговом окне установки Repair приведет к установке обновления. В этой же папке создается архив для восстановления всех настроек TradeStation.
Выводы.
Кроме исправления ошибок и множества оптимизация, новая версия платформы дает огромные возможности для реализации практически любых фантазий. Язык программирования приобрел большую функциональность, однако остался таким же простым и удобным. Интересные перспективы открывает компонент Timer, который позволяет выполнять код через заданный временной интервал. Появляется возможность интерактивной реакции инструмента теханализа на манипуляции пользователя объектами рисования. Класс для работы с книгами Excel позволяет хранить и анализировать данные сразу в среде Microsoft Office. Отчеты оптимизации и настройки МТС можно хранить в рабочих книгах Excel, что позволяет сократить трату времени на рутинные операции.Скачать дистрибутив TradeStation 9.0 build 8505 с обновлением до build 8816 можно отсюда. Рекомендую ставить build 8505, затем сразу обновлять до build 8816 и потом копировать лекарство.














Комментарии
Пока только из текстовых файлов.
Если открыть счет в tradestation и получить лицензионную TS 9, котировки будут бесплатные или платить IQFeed, eSignal за них ?
Котировки поставляет сама TradeStation.com. Источники типа OwnData или OnDemand Server - это взлом их платформы, своеобразный черный ход. За котировки Forex, по идее, платить не надо:
tradestation.com/.../...
tradestation.com/.../...
Русским раньше счета не открывали, но возможно что-то уже изменилось. Почитайте здесь: forex.kbpauk.ru/showflat.php/Cat/0/Number/74203/page/0/fpart/29/vc/1. Недавно Danilam пробовал открывать счет. Возможно у него получилось.
Были такие же грабли. Удалил TS8, переустановил .net 3.5. После этого инсталляция и обновления работают без проблем.
Пока источник данных - OnDemand Server, который подключается к IQFeed или eSignal.
У вас есть к нему лекарство? У меня есть OnDemandServer 4.0, но без лекарства(
Лекарство есть у traders-software.com, но я пока сам не пробовал. Лично мне хватает работы с текстовиками. Думаю со временем появится OwnData 3 c лекарством, которое позволит подключить TS 9 желающим к real time.
RSS лента комментариев этой записи