С 2003 года проводится ежегодный всероссийский чемпионат по биржевой торговле – конкурс \"Лучший частный инвестор\". Многим трейдерам интересна статистическая составляющая этого конкурса, а именно анализ работы его участников и агрегированные данные. В данной статье показан способ получения статистики по ЛЧИ на примере данных 2011 года с использованием Python. Скрипты на Питоне для выкачивания данных из статистики ЛЧИ и пост процессинга, а также данные по всем участникам за ЛЧИ 2011 скачать здесь. Как использовать? Скачать и установить сборку питона, если он не установлен (ссылка 1 и ссылка 2). Набрать в командной строке команду \"python\". Должна появиться консоль питона (если этого не произошло, необходимо прописать в PATH путь к интерпретатору). Скрипт download.py скачивает данные для заданного года и участника. Пример: python download.py 2011 dr-mart Скрипт agregate.py агрегирует скаченные данные (т.е. раскладывает по инструментам, фиксит вечернюю сессию в хронологическом порядке, немного склеивает сделки и считает балансовую позицию). Пример: python agregate.py 2011 dr-mart В результате должно получиться (dr-mart_RIZ1.csv): code,direction,price,amount,time,date,balance RIZ1,1,122185.0,83,194936,20111005,83 RIZ1,-1,122220.0,-83,194956,20111005,0 RIZ1,-1,125610.0,-30,155054,20111006,-30 RIZ1,1,125965.0,6,174509,20111006,-24 RIZ1,1,125965.0,14,174510,20111006,-10 RIZ1,1,125965.0,1,174511,20111006,-9 RIZ1,1,126110.0,30,174515,20111006,21 RIZ1,1,126100.0,9,174616,20111006,30 RIZ1,1,125965.0,9,174645,20111006,39 RIZ1,-1,125100.0,-30,175144,20111006,9 RIZ1,1,125760.0,21,175858,20111006,30 RIZ1,1,126490.0,30,181004,20111006,60 RIZ1,-1,129025.0,-60,221820,20111006,0 RIZ1,-1,129780.0,-15,125659,20111007,-15 RIZ1,1,130630.0,15,160719,20111007,0 RIZ1,-1,131515.0,-15,175620,20111007,-15 RIZ1,-1,129180.0,-10,203153,20111007,-25 RIZ1,1,130750.0,25,232610,20111007,0 В аттаче — агрегированные текущие данные за 2011 для всех участников. В корне архива lchi/VisualizeStrategy.wld расположена стратегия для WealtLab 5, которая визуализирует агрегированные данные. Порядок действий: Экспортировать данные по инструменту в data sets за период ЛЧИ (например, через Ascii Files — данные от финама размещены в папке lchi/rts_m1_lchi) Создать новую пустую стратегию File → New → New Strategy From Code. В открывшуюся новую стратегию необходимо скопировать и заменить код из VisualizeStrategy.wld Единственный параметр стратегии — это filePath; он идет первой строкой в методе Execute. В него необходимо прописать полный путь до файла, содержащего агрегированные с ЛЧИ данные по инструменту. Например, если распаковать архив lchi.rar в каталог c:/project, после чего мы хотим посмотреть торговлю dr-mart на ri, получаем следующее: string filePath = «c:/project/lchi/data/2011/agregate/dr-mart_RIZ1.csv». Вместо dr_mart_RIZ1.csv может быть любой другой файл из каталога agregate. Все слэши в пути должны быть обратными, как в примере! В результате получим такую картинку (за 16.11.2011 dr-mart): На рисунке изображено следующее: минутный график инструмента, над ним индикатор черным цветом — чистая балансовая позиция, красная пунктирная линимя — ноль, зеленая — максимум чистой балансовой позиции, синяя — минимум.
Источник загружает данные оттуда же, откуда и pro версия wealth-lab. Поддерживаются свечки всех мастей. Вроде как, с фиделити можно много разной инфы утянуть в том числе и макро, но в источнике нельзя. Поддерживается Гидра версии 4.1.19.1 Установка (все почти также, как и для яху-гугл) И снова идем на ГИТХАБ Обращаем внимание на то, что б была включена ветка \"master\" и жмем \"download zip\". 1 После того, как скачали, идем в архиве в папку bin\\Release или bin\\Debug и ищем там Файлы: WealthLab.DataProviders.Common.dll WealthLab.dll Fidelity.Components.dll StockSharp.Hydra.WLTask.dll Копируем его в Hydra\\Plugins Также ищем папку в архиве log4net_1_2_10_0 или Log4Net_old Копируем оттуда log4net.dll и кидаем ее в корень Гидры с заменой. Дело в том, что компоненты велс лаба собраны с более старой версией log4net, чем гидра. Выпилить оттуда эту библиотеку нельзя, равно как и из гидры. Но заменить в гидре можно, тем более что в они фактически и не используется. Запускаем Гидру. В списке Источников должен был появиться WL-source. Если не появился, жмем добавить источник. Настройки. Есть два режима: обычный и перезагрузка. В режиме перезагрузка, будут качаться все отсутствующие данные, начиная с указанной начальной даты. Временной отступ - для обычного режима. При отступе равном, например, 50, будут качаться все отсутствующие данные за последние 50 дней. Полезно, например, если вы считаете какой-нибудь индикатор за последние 50 дней, а все что раньше, вас не интересует. Инструменты При первом запуске, в главной директории Hydra появится текстовый файл WLSourceTickers.txt Записываем в него id необходимых инструментов через пробел, например: AAPL@SMART SPY@SMART APOL@NASDAQ GOOG@SMART SMART это умная система роутинга ордеров по ECN\u0027ам. Типа как exchange board. Можно не обращать внимания. Для импорта инструментов в гидре жмем добавить. 2 3 Инструменты спарсятся и добавятся в базу. Перед началом закачки нужно не забыть добавить желаемые данные - свечки нужного ТФ.
Попробуем сделать простейшую стратегию для долгосрочного инвестирования. В качестве рабочего будем использовать дневной таймфрейм. Вся суть стратегии будет заключаться в простейшей идее, что падение рынка обычно связано с более высокой волатильностью, чем в среднем. Соответственно, мы будем покупать, когда волатильность ниже среднего, и выходить из лонга, когда она повышается. В качестве меры волатильности будем использовать размах бара High - Low. Остается один вопрос: как измерить долгосрочное среднее волатильности? Можно использовать среднее (то есть скользящую среднюю, взятую за определенный период). Но так как мы имеем дело с распределением с тяжелыми хвостами, среднее будет плохой оценкой центра распределения. Поэтому будем использовать робастную оценку центра распределения - в нашем случае это будет медиана или, более точно, скользящая медиана, взятая с большим окном. Наши рассуждения напрямую транслируются в код на WealthLab: using System; using System.Collections.Generic; using System.Text; using System.Drawing; using WealthLab; using WealthLab.Indicators; namespace WealthLab.Strategies { public class MyStrategy : WealthScript { private StrategyParameter smaPeriod; public MyStrategy() { smaPeriod = CreateParameter(\"Range Sma Period\", 1, 1, 50, 1); } protected override void Execute() { DataSeries range = High - Low; DataSeries rangeSma = new WealthLab.Indicators.SMA(range, smaPeriod.ValueInt, \"sma\"); DataSeries signal = rangeSma - new WealthLab.Indicators.Median(range, 200, \"median\"); for(int bar = 0; bar 0) SellAtMarket(bar + 1, LastPosition, \"sell\"); } else { //code your entry rules here if (signal[bar] \u003c 0) BuyAtMarket(bar + 1, \"buy\"); } } } } } Единственный параметр - это длина скользящей средней для сглаживания текущего сигнала High-Low (полный аналог ATR). В дальнейшем мы будем его использовать, лишь чтобы сократить количество входов. Установим сначала smaPeriod = 1, то есть не будем использовать сглаживание сигнала. Получим: Судя по полученным параметрам бэктеста, идея содержит какое-то статистическое преимущество. Теперь попробудем уменьшить количество сигналов, увеличив период фильтрации High-Low. Сначала проверим робастность этого параметра, то есть убедимся, что параметры стратегии сохраняются на широком диапазоне значений параметра. После этого возьмем его, к примеру, равным 12. И как результат получаем: Как видно, стратегия bye \u0026 hold принесла за рассматриваемый период нулевую доходность, в то время как наша простейшая система показала небольшую, не совсем стабильную, но прибыль.
Запускаем Visual Studio, переходим File — New project. Visual C# — Class library, не забываем поставить .NET Framework 2.0. Добавляем ссылку на сборку WealthLab\u0027a (WealthLab.dll). Add Reference — Browse — ищем папку с WLD (как правило, это c:\\Program Files (x86)\\Fidelity Investments\\Wealth-Lab Pro 5\\ ). Выбираем WealthLab.dll. Жмем OK. Создаем два класса.Один ИмяКлассаScript (переименовываем Class1.cs), другой ИмяКлассаHelper (добавляем новый — правый клик по имени проекта, Add — Class). В диалоговом окне подтверждения переименования жмем ОК. Получается так: Открываем ИмяКлассаScript. Добавляем директиву using WealthLab, наследуем класс от WealthScript, имплементим метод Execute() (можно нажать хоткей ALT-SHIFT-F10 затем ENTER). Должно получиться так: Открываем ИмяКлассаHelper. Добавляем директиву using WealthLab, наследуем класс от StrategyHelper, имплементим все свойства (можно нажать хоткей ALT-SHIFT-F10 затем ENTER). Заполняем свойства: Name — имя стратегии; Guid ID — правой кнопкой по имени проекта — свойства (последняя в списке), открывается окно свойств — вкладка Application — справа конпка «Assemble Information» — копируем GUID. Также здесь заполните свойство Description (например, укажите имя стратегии — Test Strategy.) Возвращаемся назад, вставляем скопированное; Author — автор; WealthScriptType — здесь вы должны указать тип вашей стратегии (ИмяКлассаScript). Description — описание стратегии; CreationDate — дата создания; LastModifiedDate — дата последней модификации стратегии. Должно получиться так: Правой кнопкой по имени проекта — свойства (последняя в списке), открывается окно свойств — вкладка Build, свойство Output Path — указываем путь к папке WLD — c:\\Program Files (x86)\\Fidelity Investments\\Wealth-Lab Pro 5\\ ИмяКлассаScript — пишем стратегию в методе Execute() — например, пересечение MA. Должно получиться так: Билдуем стратегию, ставим точки останова. Запускаем WLD, затем в студии выбираем в меню Debug — Attach to Proces, находим процесс wealthlabpro.exe и аттачимся к нему, в WLD жмем File — Open Strategy, ваша стратегия должна быть в корне, со специальной иконкой: Если график открыт, то стратегия сработает при нажатии кнопки ОК, если нет — то при открытии графика: Done. Теперь вы можете удообно отлаживать стратегии, ставить точки останова, смотреть значения переменных. Для удобного аттача к wld\u0027шному процессу можно использовать макрос: Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports EnvDTE90a Imports EnvDTE100 Imports System.Diagnostics \u0027 1. Tools \u003e Macros \u003e Macro IDE \u0027 2. Right Click MyMacros \u003e Add \u003e Add Module \u0027 3. Paste in the code below: \u0027 4. Rename the Macro file DebuggingMacros \u0027 Enable the debug toolbar \u0027 Click the dropdown on the far right and click «Add or Remove buttons» \u003e click «Customize» \u0027 Click «Add Command» \u0027 Select Macro on the left panel \u0027 Find the macro in the list on the right \u0027 Click «ok» \u0027 Click «Modify Selection» and rename the button \u0027 * repeat for nunit macro Public Module DebuggingMacros Public Sub AttachToWealthlab() Dim WLDAgent As String = «WealthLabPro.exe» If Not AttachToProcess(WLDAgent) Then System.Windows.Forms.MessageBox.Show(«Ca n\u0027t find WLD-agent process») End If End Sub Public Function AttachToProcess(ByVal ProcessName As String) As Boolean Dim Processes As EnvDTE.Processes = DTE.Debugger.LocalProcesses Dim Process As EnvDTE.Process Dim ProcessFound As Boolean = False For Each Process In Processes If (Process.Name.Substring(Process.Name.LastIndexOf(\"\\\") + 1) = ProcessName) Then Process.Attach() ProcessFound = True End If Next AttachToProcess = ProcessFound End Function End Module **:::right Автор статьи: AnCh