Обзор TradeStation 9.1 build 12098 [Update 1-12].

Walk-Forward Optimizer.
EasyLanguage 9.
Среда разработки TradeStation Development Environment (TDE).
EasyLanguage Utilization Monitor.
Генетическое Stress-тестирование во время оптимизации.
Улучшение производительности генетической оптимизации.
Новые целевые функции оптимизации.
Улучшения оптимизации стратегии.
Автоматическое обновление платформы.
Многоядерная оптимизация.
Торговля с графика.
Выводы.



Walk-Forward Optimizer.

Версия TradeStation 9.1 build 12098 теперь включает свежеприобретенный и интегрированный Walk-Forward Optimizer (далее WFO). Вызвать WFO можно через главное меню "View / Walk-Forward Optimizer" ("Вид / Walk-Forward оптимизатор").

Данные для WFO сохраняются во время оптимизации стратегии:

36-wfo

Описанию WFO чуть позднее будет посвящена отдельная статья.

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:
    MarketDepthProvider MD( NULL ),
    Vector SizeBook( NULL ),
    Timer UDTmr( NULL ),
    Workbook MarketDepthWB( NULL );
    Ссылаясь на тип в EasyLanguage, объявление объекта можно снабдить префиксом библиотеки:

    method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args)

  • Local Methods (локальные методы).

    EasyLanguage 9.0 теперь поддерживает локальные методы. Подобно функциям EasyLanguage, они могут использоваться, чтобы улучшить читаемость и упростить структуру кода. Локальные методы выполняются быстрее, чем функции EasyLanguage и поддерживают рекурсивный вызов.

  • Event Handlers (обработчики событий).

    Многие из компонентов, описанных в разделе ToolBox, могут предоставить информацию по мере ее доступности с помощью соответствующих обработчиков событий. Например, обработчик события таймера будет производить вызов вашего кода через заданный временной интервал. Код инструментов теханализа так же получил несколько событий: Initialized и UnInitialized. Эти события будут происходить однократно, во время первого и последнего запуска кода соответственно.

    Для включения обработки события AnalysisTechnique_Initialized необходимо в среде разработки TradeStation зайти во вкладку Properties (вкладки справа), нажать на значок Events (События) с иконкой в виде молнии. Затем для события с именем Initialized надо указать название обработчика события AnalysisTechnique_Initialized:

    37-events

  • 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;
В EasyLanguage 9.0 добавлены новые ключевые слова и операторы:
  • 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 ;
Библиотека классов EasyLanguage (ECL) содержит более 100 классов, позволяющих создавать мощные торговые решения. Компоненты ToolBox так же являются частью ECL.


Классы в 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).

Новое свойство Count возвращает число элементов объекта ComboBox.
GroupBox – панель с подписью для визуальной идентификации логически связанных элементов управления формы.
Label - выводит текст на форме.
ListView - выводит на экран набор элементов в многоколонном формате. Реагирует на щелчок пользователя, когда делается выбор элемента (SelectedIndexChanged).

Новый метод AddRow, класса elsystem.windows.forms.ListView, может вызываться для увеличения производительности за счет добавления предварительно подготовленной объекта ListViewItem.
NumericUpDown – выводит на экран числовые значения, которые пользователь может быстро постепенно увеличить или постепенно уменьшить с предопределенном значением шага.
Panel - панель для визуальной идентификации логически связанных элементов управления формы.
RadioButton – группа взаимоисключающих опций. Реагирует на щелчок пользователя (Click) и позволяет запрашивать состояние (Checked) во время выполнения.
TextBox – поле ввода текста.
LinkLabel – текст с гиперссылкой.

Формы и элементы управления создаются и используются, так же как и другие классы Библиотеки классов 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 9.1 build 12098 были добавлены новые возможности EasyLanguage:
  • Метод GetMyWorkDirectory() позволяет определить местоположение рабочей папки платформы. Разбор пути позволит также узнать корневой каталог TradeStation.

  • Новый класс Alarm позволяет запускать события уведомлений в разное время. Уведомления могут быть созданы методом Create с передачей параметра DateTime:

    alarm

  • Новый класс GlobalValue предоставляет удобный способ обмена информацией между различными экземплярами инструментов теханализа, работающими одновременно внутри платформы TradeStation. GlobalValue является производным от класса компонента и может быть просто перетащен из панели элементов TDE. В следующем примере, метод Sample_Server задает значение и Sample_Client извлекает это значение. В этом примере предполагается, что компонент GlobalVariable был вытянут в обоих индикаторах из панели элементов и в редакторе свойств назван как myClose:

    // Sample Server

    Using elsystem;

    Vars:
    GlobalValue GlobalValue1(null),

    GlobalValue1 = GlobalValue.Create();
    GlobalValue1.Name = "MyValue1";
    GlobalValue1.Channel = "MyValue1";
    GlobalValue1.Load = true;
    GlobalValue1.DoubleValue = 123.45;
    print(" Set ", GlobalValue1.DoubleValue);

    // Sample Client
    Using elsystem;

    Vars:
    GlobalValue GlobalValue1(null),

    GlobalValue1 = GlobalValue.Create();
    GlobalValue1.Name = "MyValue1";
    GlobalValue1.Channel = "MyValue1";
    GlobalValue1.Load = true;
    print(ldt, " Get ", GlobalValue1.DoubleValue);

    Такой код гораздо проще, чем при использовании GlobalDictionary.

  • Новый метод elsystem.Environment.Start позволяет открывать документы:

    Using elsystem;
    Using elsystem.windows.forms;
    // Declare variables for the form and linklabel control
    Vars: Form MyForm(null), LinkLabel MyLabel(null);
    // Create the form and linklabel when the analysis technique is initialized
    method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args )
    begin
      MyForm = Form.Create("LinkLabel Sample", 200, 100); // Create the form
      MyLabel = LinkLabel.Create("TradeStation Home Page", 150, 20); // Create the linklabel
      MyLabel.Location(25, 25); // Place the label 25 pixels from the top and left of the form
      MyLabel.LinkClicked += OnLinkClicked; // Tell the label to call the OnLinkClicked method when user clicks it
      MyForm.AddControl(MyLabel); // Add the label to the form
      MyForm.Show(); //Show the form
    end;
    // This method is called when the label is clicked
    Method void OnLinkClicked(Object sender, EventArgs args)
    begin
      Environment.Start("www.tradestation.com"); // Call Start, passing the TradeStation link
    end;
    

  • Пространство имен Elsystem.collections получило метод Clone(), который позволяет сделать копию существующей коллекции.

  • Пространство имен Elsystem.drawing получило класса Font и свойство FontStyle для изменения атрибутов шрифта.

  • Форма получила свойство Dock, которое позволяет прикрепить форму к окну. Свойству Dock может быть присвоено значение из перечисления DockStyle. Если нескольким формам назначено одно и то же место для прикрепления, то для каждой из форм будут автоматически созданы вкладки:

    41-1-dock

    Пристыкованная панель может быть легко скрыта или показана выбором пункта главного меню View / EasyLanguage Application Bar:

    41-2-dock

    Событие Resize и свойство WindowState позволяют знать, когда размер формы изменен. Вы можете реагировать на событие Resize, чтобы изменить расположение элементов управления в форме на основе текущего размера:

    41-3-dock

  • Класс ComboBox получил метод Clear(), который используется для удаления всех элементов. Новое свойство SelectedText позволяет узнать, какой именно элемент был выделен во время вызова события SelectedIndexChanged.

  • Класс TextBox получил свойство Multiline, которое позволяет использовать элементы с большими блоками текста.

  • Классы Label, GroupBox, ComboBox, Button, CheckBox, RadioButton получили свойство FlatStyle, которое может принимать одно из значений: Flat, Popup, Standard, System.

  • Классы ListView, NumericUpDown, Panel получили свойство BorderStyle, которое может принимать одно из значений: Fixed3D, FixedSingle, None.

  • Новый компонент ChartingHost содержит ряд событий, позволяющих программно реагировать на клики в окне с графиками. Обработчик EventArgs предоставляет подробную информацию о месте, где произошел клик. Так как ChartingHost является компонентом, он легко может быть добавлен к вашему инструменту теханализа. Индикатор ChartTrading является реальным примером использования этого компонента.

  • Класс RadarScreenHost предоставляет информацию о клике в окне RadarScreen.

  • Два новых класса StreamReader и StreamWriter добавлены в пространство имен elsystem.io. Эти классы предоставляют возможность записи и чтения из текстовых файлов. Следующий пример читает файл данных и сохраняет данные в Dictionary:

    45-io

  • На основе обратной связи от пользователей, были внесены изменения для улучшения скорости работы с классами Global Dictionary и Global Value.

  • В пространство имен Elsystem.windows.forms добавлены два новых элемента управления: Chart и Grid. Элемент Chart используется для отображения графиков. Элемент Grid используется для отображения таблицы. Эти элементы управления будут полезны в представлении сложных данных в удобном и понятном виде.

    Элемент управления Chart может отображать одну или более серий данный в 2-D и 3-D стиле. Поддерживаются следующие стили графиков: Area, Bar, BoxPlot, Bubble, CandleStick, Column, Doughnut, ErrorBar, FastLine, FastPoint, Funnel, Kagi, Line, Pie, Point, PointAndFigure, Polar, Pyramid, Radar, Range, RangeBar, RangeColumn, Renko, Spline, SplineArea, SplineAngle, StackedArea, StackedArea100, StackedBar, StackedBar100, StackedColumn, StackedColumn100, StepLine, Stock, ThreeLineBreak.

    Для использования элемента управления Chart, вы создаете и добавляете его к форме так же, как и любой другой элемент управления. Кроме того, необходимо создать одно или несколько ChartAreas, которые будут отображать данные. Вам также необходимо создать одно или несколько ChartSeries, которые будут содержать сами данные, которые будут отображаться в ChartArea. Шкалы и легенды добавлять не обязательно.

    Элемент DataGridView позволяет отображать данные в табличном формате. Для начала использования необходимо создать элемент DataGridView и добавить его на форму. Столбцы и строки могут быть добавлены с помощью классов DataGridViewColumn и DataGridViewRow.

    Оба элемента управления позволяют настраивать их внешний вид с помощью богатого набора свойств и методов:

    46-chart

  • Добавлена возможность узнать из кода текущее значение параметра MaxBarsBack:

    47

    Если необходимо запросить данные, которые могут превышать ограничение, установленное параметром MaxBarsBack, вы можете использовать свойство BarsAgo. В этом случае не будет ошибки из-за обращения назад на большее число баров, чем разрешает параметр MaxBarsBack. Так же не будет выполняться автоматический пересчет параметра MaxBarsBack.

Среда разработки TradeStation Development Environment (TDE).


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


Новый компонент можно вставить в лоток компонент, дважды кликнув по его названию или перетащить его из 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 (автозаполнение) была также улучшена и позволяет теперь показать объектные элементы. Можно быстро получить доступ к свойствам и методам объекта, без необходимости запоминать всю библиотеку классов.

Для работы с закладками добавлены две горячие клавиши. Для установки закладки в коде надо нажать Ctrl+F2. Для перехода между закладками надо нажимать F2.

Флажок "Search hidden text" был добавлен в диалоговое окно поиска. Когда этот флажок включен, поиск будет происходить и в свернутых регионах кода, который в противном случае в поиск включаться не будут.

Проекты – это новая функциональность TDE, которая поможет трейдерам более эффективно организовать и управлять их работой. С проектами, вы можете сгруппировать связанные между собой инструменты теханализа так, чтобы они могли быть открыты, закрыты, импортируемы, экспортируемы и проверены вместе как группа.

Для создания проекта надо выбрать в главном меню "File / Project / New...":

42-1-projects

После создания проекта, добавьте или создайте инструмент теханализа, щелкнув правой кнопкой мыши и выбрав пункт контекстного меню "Add New Item..." или "Add Existing Item...":

42-2-projects

В приведенном ниже примере был создан проект "Leading Indicators" с добавленными к нему индикаторами CCI, Momentum и Stochastic:

42-3-projects

Все инструменты теханализа и зависимые файлы отображаются в панели инструментов нового проекта. Вы можете перейти к любому файлу, дважды щелкнув по его имени. Чтобы экспортировать проект, щелкните правой кнопкой мыши на имени проекта, выберите пункт меню "Export " и укажите имя файла. Экспортированный файл будет иметь расширение ELP и включает в себя все инструменты теханализа проекта. ELP-файл может быть использован для резервного копирования вашей работы или для того, чтобы поделиться ею с другими.

Как только вы закончите работу, просто выберите "Close Project " из пункта главного меню File / Project. Ваш проект и относящиеся к нему инструменты теханализа будут закрыты. Чтобы открыть проект, выберите "Open Project " из пункта главного меню File / Project.

Файлы проектов на основе XML с расширением .elx по умолчанию находятся в папке MyWork. Они хранят ссылки на инструменты теханализа, которые включены в проект наряду с заметками пользователя.

Два новых элемента были добавлены в контекстное меню, которое вызывается правым кликом в панели вывода сообщений TDE:

43-output

Выбор "Show Error Help" откроет online справку с описанием ошибки. Выбор "Copy" скопирует текст ошибки в буфер обмена. Затем этот текст можно использовать для отправки в службу поддержки.

В функционал Backup/Restore добавлены отдельные пункты для сохранения/восстановления конфигурации TDE. Для вызова Backup/Restore в главном меню выберите "File / Backup/Restore TradeStation":

44-backup

EasyLanguage Utilization Monitor.

EasyLanguage Utilization Monitor - монитор загрузки процессора со стороны инструментов, созданных на базе EasyLanguage. Вызов окна монитора осуществляется через меню View / EasyLanguage Utilization Monitor:


Вызов 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.01.00\Patches и содержатся в файле с расширением msp. Запуск msp-файла и выбор в диалоговом окне установки Repair приведет к установке обновления. В этой же папке создается архив для восстановления всех настроек TradeStation с расширением tsa.

Многоядерная оптимизация.

Возможность распределять расчеты EasyLanguage на несколько отдельных ядер процессора позволяет более эффективно производить несколько параллельных расчетов, а также использовать дополнительную память в 64-битной среде. В результате интенсивные расчеты происходят намного быстрее и не влияют на работу всей платформы TradeStation.

Когда поддержка многоядерности включена, каждому окну будет назначено отдельное ядро в циклическом режиме. Например, рабочая область открывается на четырехъядерной системе и содержит восемь окон с графиками (обозначаются буквами от А до Н):
  • Окну A будет назначено ядро 1.
  • Окну B будет назначено ядро 2.
  • Окну C будет назначено ядро 3.
  • Окну D будет назначено ядро 4.
  • Окну E будет назначено ядро 1.
  • Окну F будет назначено ядро 2.
  • Окну G будет назначено ядро 3.
  • Окну H будет назначено ядро 4.
Во время открытия окон они будут назначаться ядрам в циклическом режиме. Если некоторые окна закрываются, тем самым освобождая нагрузку на ядра, все последующие недавно открытые или созданные окна автоматически будут подключены к менее загруженному ядру, чтобы сохранять баланс равномерной загрузки.

Важно отметить, что использование многоядерности может повлиять на работу с библиотеками DLL. Дело в том, что каждая библиотека будет загружаться отдельно для каждого ядра. Поэтому каждая библиотека будет иметь свой набор локальных данных. Раньше, при отсутствии многоядерности, библиотека загружалась однократно для всей платформы. Поэтому все вызовы из кода EasyLanguage были обращены к одной библиотеке, которая имела один общий для всех вызовов блок локальной памяти. При включенной многоядерности, каждая библиотека будет иметь свой локальный объем памяти. Например, при включенной многоядерности Puls будет загружаться отдельно для каждого ядра, иметь свой набор серий. Изменение данных со стороны одного ядра никак не будет видно при запросе тех же данных другим ядром. Поэтому для многоядерной работы надо использовать shared memory или аналогичные методы. Но лучше всего использовать встроенные механизмы TradeStation для работы с глобальными данными внутри платформы.

Для включения поддержки многоядерности надо выбрать в главном меню View / Chart Analysis Preferences. Далее в папке General надо включить флажок " beside "Enable use of multiple CPU cores":

Multi-Core Chart Analysis

Поддержка многоядерности в TradeStation позволяет при оптимизации отдельной торговой стратегии использовать только одно отдельное ядро. Это конечно позволяет продолжать вести работу с другими окнами или запустить несколько параллельных расчетов. Однако такая реализация уступает механизмам, реализованным в MultiCharts или MetaTrader 5. В MultiCharts во время оптимизации торговой стратегии задействуются для расчета все доступные ядра. MetaTrader 5 для расчетов может задействовать не только ядра одного компьютера, но и ядра других компьютеров или вычислительные ресурсы облака. Что потенциально должно уменьшать время проведения ресурсоемких расчетов.

Лично мне для расчетов, которые необходимы для торговли основными моделями теханализа, ресурсов TradeStation более чем достаточно. Можно даже утверждать, что если считать надо очень много, значит предварительная работа не была проведена достаточно хорошо и стоит подумать над тем, почему алгоритм такой сложный и как этот ресурсоемкий расчет соотносится с подгонкой под кривую.

Торговля с графика.

Новый индикатор "ChartTrading" позволяет вам быстро и легко размещать сделки, управлять позициями и ордерами с графика. Кликая и перетаскивая, вы можете управлять позициями и ордерами. Индикатор ChartTrading полностью написан на EasyLanguage. Предоставляется с исходным кодом, который вы можете менять так, как вам захочется. Это означает, что нет предела тому, как можно изменить или расширить применение этого инструмента в соответствии с вашими уникальными потребностями торговли.

39-1-ct

Для начала работы с ChartTrading нажмите на панели инструментов кнопку ChartTrading ChartTrading или выберите «Chart Trading» в контекстном меню.

Функции ChartTrading позволяют дискретным трейдерам интуитивно размещать и редактировать ордера непосредственно на графике. Ордера легко перемещаются на новый уровень цен путем перетаскивания, могут быть отменены нажатием клавиши удаления и редактирования с помощью правой кнопки мыши. Панель ChartTrading, прикрепленная к одной из сторон окна с графиком, позволяет просматривать детали позиций, а также легко закрыть позицию или отменить ордер.

Выводы.

Кроме исправления ошибок и множества оптимизация, новая версия платформы дает огромные возможности для реализации практически любых фантазий. Язык программирования приобрел большую функциональность, однако остался таким же простым и удобным. Интересные перспективы открывает компонент Timer, который позволяет выполнять код через заданный временной интервал. Появляется возможность интерактивной реакции инструмента теханализа на манипуляции пользователя объектами рисования. Класс для работы с книгами Excel позволяет хранить и анализировать данные сразу в среде Microsoft Office. Отчеты оптимизации и настройки МТС можно хранить в рабочих книгах Excel, что позволяет сократить трату времени на рутинные операции.

Pavel Gelium 2000-2017 © All rights reserved.