Финансовая лаборатория

Биржевая торговля и торговые роботы

Давайте сегодня посмотрим как можно из Wealth-Lab прямо напрямую подключиться к Visual Studio.

Для чего это нужно: Если мы научимся этому, то сможем отлаживать любые торговые стратегии, любые индикаторы, любые модули управления размером позиции (PosSizers) прямо в Visual Studio.

Для того, чтобы это сделать необходимо проделать следующее.

Во-первых в Visual Studio необходимо создать новый проект. Давайте назовем этот проект “Otladka”

Для этого делаем следующие шаги:

1) Находим Solution Explorer и нажимаем правой кнопкой мыши по названию решения (Solution).

2) В появившемся контекстном меню выбираем пункт:

Add >> New Project… (Добавить >> Новый проект)

Сразу после нажатия появится окно добавления нового проекта

3)  В окне добавления нового проекта проделываем следующие шаги:

  •  в самом верху выбираем .NET Framework 3.5
  •  выбираем тип проекта "Class Library" (библиотека классов).
  • В поле Name: даем название проекту (к примеру, "05_Otladka")
  • В поле Location: указываем где должно располагаться решение (Solution), содержащее данный создаваемый проект.
  • Нажимаем кнопку "ОК", подтверждая создание нового проекта

4) Теперь удаляем созданный в новом проекте класс по умолчанию (обычно называется Class1.cs) и добавляем в проект класс, который содержит код торговой стратегии. В нашем случае для демонстрации процесса подключения Wealth-Lab к Visual Studio воспользуемся простейшая торговой стратегией пересечения двух скользящих средних (название класса стратегии: MA_44144@OPT)

5) Теперь для того, чтобы была возможность в коде стратегии пользоваться методами и свойствами библиотеки WealthScript, нужно добавить в нашем проекте ссылки на библиотеки WealthLab.dll и WealthLab.Indicators.dll

Делается это так:

В Solution Explorer нажимаем правой кнопкой на строку "References" ("Ссылки") и в появившемся контекстном меню кликаем по "Add Reference…"

Затем переходим на закладку "Browse", находим там папку, в которой находится файл, запускающий Wealth-Lab и в этой папке находим необходимые нам файлы (WealthLab.dll и WealthLab.Indicators.dll). Выделяем их и нажимаем "ОК", добавляя таким образом ссылки на выбранные библиотеки.

Если Вы уже ранее в данном решении уже добавляли ссылки, легче всего будет перейти на закладку "Recent" (Недавно использовались) и найти данные библиотеки там.

6) Теперь добавляем в класс стратегии дополнительный специфический класс Helper.

Здесь приведен пример кода простейшей стратегии совместно с классом Helper...


/*
 * Это стратегия, для демонстрации возможности подключения Wealth-Lab к Visual Studio
 * Подробная статья об этой стратегии располагается по адресу:
 *  http://finlabportal.ru/2012/08/kak-ustanovit-svyaz-mezhdu-wealth-lab-i-visual-studio-dlya-otladki-torgovoj-strategii/
 * Видео процесса подключения можно найти тут: http://www.youtube.com/watch?feature=player_embedded&v=y8mlnMDvZhU
 *
*/
using System;
using System.Collections.Generic;
using System.Text;
using WealthLab;
using WealthLab.Indicators;
using System.Drawing;

namespace Example.Strategies.Optimization
{
    //это основной код стратегии
    class MA_44х144_otl : WealthLab.WealthScript
    {
        #region Объявляем параметры торговой стратегии

            private StrategyParameter _slowPeriod;
            private StrategyParameter _fastPeriod;

        #endregion

        #region Конструктор класса

            public MA_44х144_otl()
        {
            _fastPeriod = CreateParameter("Fast Period", 44, 1, 100, 1); //Устанавливаем значение параметров по умолчанию от, до и шаг
            _slowPeriod = CreateParameter("Slow Period", 144, 20, 200, 1);
        }
            #endregion

            protected override void Execute()
        {
            int firstValidValue = 1; // Первое значение свечки при которой существуют все индикаторы

                #region Индикаторы

                // Быстрая скользящая средняя
                int fastPeriod = _fastPeriod.ValueInt; //Определяем период скользящей средней
                DataSeries smaFast = SMA.Series(Close, fastPeriod); //Создаем ряд(массив) данных в каждой ячейке которого храниться значение индикатора
                PlotSeries(PricePane, smaFast, Color.Green, LineStyle.Solid, 2); // Отображаем наш ряд данных на графике цен в WLD
                firstValidValue = Math.Max(firstValidValue, smaFast.FirstValidValue);

                // Медленная скользящая средняя
                int slowPeriod = _slowPeriod.ValueInt; //Определяем период скользящей средней
                DataSeries smaSlow = SMA.Series(Close, slowPeriod); //Создаем ряд(массив) данных в каждой ячейке которого храниться значение индикатора
                PlotSeries(PricePane, smaSlow, Color.Red, LineStyle.Solid, 2); // Отображаем наш ряд данных на графике цен в WLD
                firstValidValue = Math.Max(firstValidValue, smaSlow.FirstValidValue); //Присваиваю переменной firstValidValue максимальное значение
                                                                                      //самого длинного периода из существующих индикаторов

                 #endregion

            for (int bar = firstValidValue; bar < Bars.Count-1; bar++)
            {
                if (IsLastPositionActive) //Если есть открытая позиция
                {
                    if (CrossUnder(bar, smaFast, smaSlow)) //Быстрая пересекает медленную сверху вниз

                        SellAtMarket(bar + 1, LastPosition); //Продаем по рынку на следующем баре
                }
                else //Активных позиций нет
                {
                    if (CrossOver(bar, smaFast, smaSlow)) //Быстрая пересекает медленную снизу вверх

                        BuyAtMarket(bar + 1); //Покупаем на следующем баре по цене открытия

                }
            }
        }
    }

    //для отладки стратегии и связки Wealth-Lab c Visual Studio нужно добавить класс Helper
    //это код стратеги HELPER
    public class MA_44х144_otlHelper : StrategyHelper
    {
        public override string Author
        {
            get { return "Власов Дмитрий Викторович"; } //в кавычках пишем автора стратегии
        }

        public override DateTime CreationDate
        {
            get { return new DateTime(2012, 08, 02); } //в скобках указываем дату создания стратегии (год, месяц, дата)
        }

        public override string Description //здесь неоходио сдеать краткое описание стратегии (оставив открывающий тег) - будет виднов велсе
        {
            get { return "Покупка на пересечении скользящих средних (Description в классе Helper)"; }
        }

        public override Guid ID
        {
            get { return new Guid("7817cb9f-b00d-499f-9739-33fd59653efc"); } //правой кнопкой по проекту, затем "Свойства" и в "Assembly Information" находим ID
        }

        public override DateTime LastModifiedDate
        {
            get { return new DateTime(2012, 08, 02); } //указываем дат модификации стратегии
        }

        public override string Name
        {
            get { return "MA_44х144_otl"; } //здесь в кавычках указываем название стратегии
        }

        public override System.Type WealthScriptType
        {
            get { return typeof(MA_44х144_otl); } //в скобках указываем точное имя основного класса стратегии.
        }
    }
}

Этот класс необходим для того, чтобы осуществить процесс стыковки Wealth-Lab с Visual Studio.

Название данного класса до слова Helper должно в точности соответствовать названию основного класса стратегии.

7) Теперь этот класс необходимо отредактировать.

Делается это очень просто - давайте пробежимся по каждому из пунктов:

Name:

Внутри кавычек здесь пишется название стратегии… Точное совпадение с названием класса стратегии здесь не обязательно, но чтобы в последующем не путаться - лучше написать именно оригинальное название стратегии

System.Guide ID

Для того, чтобы найти значение ID нужно проделать следующее:

нажимаем правой кнопкой по названию проекта:

В открывшемся окне переходим на закладку "Application" и проверяем:

  • Target Frameework: .NET Framework 3.5
  • Output type: Class Library

Нажимаем на кнопку "Assembly Information…" (Информация о сборке")

В результате появляется форма "Assembly Information"

Здесь нужно заполнить два поля:

Discription (Описание) - здесь мы должны написать осмысленную фразу. Эта фраза будет видна из Wealth-Lab когда мы будем выбирать папку, в которой находятся те стратегии, которые мы поместили в проект для отладки.

GUID: - здесь ничего менять не нужно, просто выделяем этот код и копируем его в буфер обмена.

Делаем все остальные настройки, необходимые для настройки соединения:

Переходим в закладку "Build" ("Построение")

Здесь мы должны указать папку, куда будет выкладываться dll (библиотека классов), содержащая все стратегии, которые содержатся в данном проекте.

Указать мы должны ту папку, в которой находится файл, запускающий Wealth-Lab.

Теперь переходим в закладку "Debug" (Отладка) и выбираем опцию "Start external programm" и указываем файл, запускающий Wealth-Lab.

Заполняем System.Guid ID

В скобках открываем кавычки и внутрь кавычек вставляем тот код, который мы скопировали ранее, после чего закрываем кавычки.

Author: внутри кавычек пишется имя автора стратегии

System.Type WealthScriptType

Здесь в скобках должно быть указано точное имя класса нашей стратегии.

Discription (Описание):

Здесь мы пишем краткое описание стратегии. Это описание в дальнейшем будет видно в программе Wealth-Lab в Strategy Explorer.

Чтобы описание в Wealth-Lab отображалось правильно (чтобы не было псевдосимволов) здесь нужно внести вот такую надпись:

get { return "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />Покупка на пересечении скользящих средних"; }

Даная конструкция показывает, какого типа должен быть текс и если она будет отсутствовать, то когда мы перейдем к соответствующей стратегии в Wealth-Lab, то увидим не осмысленный текст из русских букв, а набор символов, который невозможно прочитать.

Далее вносим дату создания и дату модификации стратегий. Как это сделать - можно увидеть в примере.

Теперь сохраняем результаты.

8) Строим проект:

Нажимаем правой кнопкой по названию проекта и из контекстного меню выбираем пункт "Build" ("Построить").

Это делается для того, чтобы во-первых, проверить нет ли ошибок в коде. Если такие ошибки есть, то у нас перед глазами появится сообщение об ошибке.

Во-вторых, сразу после процесса построения в папке, где находится файл, запускающий Wealth-Lab появится dll, которая содержит все те стратегии, которые мы "упаковали" в данный проект.

Благодаря наличию данной dll мы сможем подключиться к нашей стратегии из Wealth-Lab.

9) Теперь открываем программу Wealth-Lab.  После того, как программа Wealth-Lab запустилась, мы снова переходим в Visual Studio и в главном меню находим пункт, который позволит нам подключиться к процессу.

Debug >> Attach to Process…

Сразу после этого выскочит формочка подключения к процессу. Здесь нужно в списке доступных процессов найти Wealth-Lab Dev. Для этого лучше отсортировать все процессы, нажав на столбец Process и в самом верху обнаружим нужный нам процесс.

Это процесс называется WealthLabDev.exe. Выбираем его левой кнопкой мыши и нажимаем кнопку внизу формы "Attach".

10) Теперь снова переходим в программу Wealth-Lab.

В Wealth-Lab нам нужно открыть Strategy Explorer - для чего нажимаем на кнопку "Open Strategy"

В папках открытого окна с существующими стратегиями мы увидим ссылку с тем названием, которое вводили в свойствах проекта при вводе информации о сборке.

Выбрав эту ссылку справа мы увидим все стратегии, которые мы включили в наш проект при его построении в Visual Studio. Причем у каждой из этих стратегий можно будет прочитать четко по-русски описание (напоминаю, мы делали это описание в классе Helper).

Открываем стратегию, подготовленную нами в Visual Studio, щелкнув по ее названию и кликнув на кнопку "ОК". Выбираем финансовый инструмент и  видим, что стратегия благополучно открылась .

Особенностью данного окна стратегий является то, что мы вообще не видим закладки "Editor".

В качестве редактора будет выступать Visual Studio. Именно здесь мы можем править код стратегии, отлаживать стратегию и делать другие, очень интересные вещи. Это все равно, что писать текст не в обыкновенном блокноте (которым, по сути, является родной редактор программы Wealth-Lab), а в навороченном текстовом редакторе.

Подключив подобным образом Wealth-Lab к Visual Studio мы можем воспользоваться всем богатством данной программы для отладки кода - делать точки остановки, следить в режиме реального времени за значением любых переменных, маленькими шагами проходить весь код стратегии.

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

Более подробно за всем процессом подключения Wealth-Lab к Visual Studio и способам отладки стратегии в Visual Studio Вы можете посмотреть в данном видео.

Это видео, отображающее процесс подключения Wealth-Lab к Visual Studio и отладки стратегий, было записано мною в процессе индивидуального обучения, которое я провожу для всех желающих лучше узнать Wealth-Lab и язык программирования C# в процессе индивидуальных занятий (с разрешения того, для кого данное занятие проводилось). Каждое такое занятие я снимаю на видео и отдаю этот "минифильм" в течение нескольких дней после проведения занятия.

В конце сегодняшнего поста напоминаю Вам о том, что в понедельник 06 августа 2012 года в 15 часов начнется бесплатный вебинар, который я буду проводить для всех желающих получше узнать о программе Wealth-Lab и языке программирования C#. К моему удивлению, на текущий момент записалось уже более 80 человек из 90 возможных. Если хотя бы половина из записавшихся посетит данный вебинар - будет очень круто. Кто записался - не забывайте о времени начала.

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

Рубрики: Wealth-Lab, WealthScript

Комментариев: 20

  1. Roma пишет:

    интересуюсь созданием торгового робота в Wealth-Lab для торговли на американском рынке. можете помочь?

    • Роман, кажется, я Вам по почте уже отвечал. Для американского рынка написать торговую стратегию в велсе можно, конечно, но вот чтобы автоторговлю использовать с применением Wealth-Lab – здесь возникают трудности. Если получится у Fidelity счет открыть, то там версия Wealth-Lab PRO с уже готовым подключением к этому брокеру. А как – то связать велс с другими американскими брокерами… не знаю, как это сделать.

  2. Stas пишет:

    А какую “студию” использовать? Я установил 10, но в ней нет некоторых меню, в частности: при создании проекта, нет возможности выбрать версию фреймворка; в “свойствах проекта” в вкладке “дебаг” нет возможности указать экзешный файл велза; так же нельзя загрузить ссылку на using System.Drawing.
    Подскажите пожалуйста как быть?

  3. Alexey пишет:

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

  4. Vitaliy пишет:

    Stas.
    Как мне кажется, в данном примере использовалось Visual Studio не экспресс-выпуска, а более профессиональный (т.е «платный»).
    Что касается System.Drawing, его надо подключать дополнительно – как мы делали с WealthLab.dll и WealthLab.Indicators.dll, только вкладка .Net.

    • По поводу платности – есть возможность в течение 30 дней использовать бесплатно Visual Studio pro. Затем продлить это бесплатное использование еще на 30 дней. Кроме того у Microsoft есть специальные предложения для учителей и преподавателей, студентов, маленьких компаний… Так что воспользоваться программами Microsoft можно не платя больших денег.

  5. Игорь Афанасьев пишет:

    Дмитрий, что то, я затупил. Не могу понять, а где заполняется System.Guid ID, что не могу понять где его искать?

  6. Игорь Афанасьев пишет:

    Ой, извини :) предыдущий вопрос по System.Guid ID снимается, действительно тупанул :) Разобрался

  7. Vitaliy пишет:

    Настроил все как показано в данной статье.
    Создаю ДЛЛ в папке с WLD.
    Пытаюсь подключиться к процессу, вроде все проходит, но «стопы» не работаю, да и при перестроении пишет ошибку.
    Подскажите, в чем может быть причина?

    Текст ошибки в VS 2010:
    Ошибка 1 не удалось скопировать файл “obj\Debug5_Otladka.dll” в “..\..\..\..\..\..\..\Program Files\MS123\Wealth-Lab Developer 65_Otladka.dll”. Процесс не может получить доступ к файлу “..\..\..\..\..\..\..\Program Files\MS123\Wealth-Lab Developer 65_Otladka.dll”, так как этот файл используется другим процессом. 05_Otladka

  8. Vitaliy пишет:

    В видео показано, как Вы перехватываете выполнение ДЛЛ и переходите в VS (время на видео 19:15). Но как бы я не пытался, перехватывать выполнение не получается.
    Подскажите, в чем может быть причина?
    Делал все в точности как показано на видео.

    ПО использую:
    VS PRO – trial
    WLD – trial

  9. Buyan пишет:

    Дмитрий, огромное спасибо за такую подробную инструкцию! Ваше руководство намного лучше, чем руководство самих велслабовцев!

    • Спасибо, я старался. Правда все, что делаю на этом блоге – делаю для себя, чтобы если вдруго прекращу заниматься этим делом, а потом решу возобновить – смог разобраться и вспомнил что раньше делал… :-)

  10. Роман пишет:

    Подскажите – при запуске Wealthlab, после создания dll в каталоге велза возникает ошибка “System.TypeInitializationException” и он не запускается. С чем это может быть связано?

  11. Роман пишет:

    Сделал весь процесс в windows7, запускается без проблем.
    Видимо ошибка вылетает из-за восьмой винды, так как после создания otladka.dll, wealthlab просто не запускается, а в studio вылетает вышеобозначенная ошибка

  12. Сергей Доценко пишет:

    Дмитрий, не буду Вас благодарить устно (письменно ))), ибо это слишком много, хорошенько гляну что у Вас купить.

    аа.. и это… у мня WL 6.4, то framework уже нужно брать 4й, 3.5 уже не работает…. в остальном всё ооч. корректно!

  13. Руслан пишет:

    Спасибо за отличное видео, все получилось как надо!
    Единственно, нет ли возможности в велс лабе иметь возможность листать график прямо во время отладки? Он у меня напрочь виснет при запуске до конца завершения отладки, а хотелось бы видеть там например как же выглядит визуально бар номер 145. Пытался запустить две копии велс лаба одновременно, но он не позволяет такого сделать ни штатными ни сторонними прогами.

Оставить комментарий