Тимофей Мартынов
Тимофей Мартынов личный блог
15 декабря 2012, 13:56

Создание стратегии в Wealth-Lab. Первые проблемы.

Чуть-чуть углубившись в Wealth-Lab, сразу стало понятно, что геморроя тут будет больше, чем в TSLabe. Конечно в последнем я тоже испытывал некоторые трудности, но не тратил столько времени на их преодоление.

1. Данные по фьючерсу РТС в Wealth-Lab мы импортировали.

2. Соответственно построили график. Как рисовать на графике или как построить индикатор — труда не вызывает. Более того, если потыкаться, можно даже увидеть код на языке программирования.

Язык в WLD почему-то называется Wealth-Script, а не C#. Ну это наверное как Stocksharp назвали свою библиотеку S#, то разработчики WLD назвали свой набор WealthScript, при этом используется семантика C#.

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

File->New->New Strategy From Rules (Ctrl+Shift+R).

Создание стратегии в Wealth-Lab. Первые проблемы.

Ну вот собственно об этом видео и о том геморрое, с которым я столкнулся. Видео для таких же лохов как я, либо для тех, кто вообще не работал с wealth-lab


Краткое содержание:
1. как быстро создать свою стратегию в Wealth-Lab из правил
2. как запустить стратегию в Wealth-Lab
3. как посмотреть код стратегии




Вот кусок полученного текста программы с моими попытками разобраться в нем:
Wealth-Lab

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

С другой стороны, по велслабу я знаю, если что, где найти обучающий материал о том, как составить программу (тот же обучающий курс Дмитрия Власова и Игоря Чечета), а вот с TSLab'ом пока не знаю как выйти за рамки визуального составления алгоритмов из блок-схем.


Вопросы которые у меня есть на данный момент:

  • как связать код WLD с кодом VS? (ответ на этот вопрос получил из каментов, ссылка: http://anch-s-journal.livejournal.com/14388.html)
  • зачем нужен VS если в WLD есть встроенный компилятор?
  • непонятно где хранится код, который мы открыли в WLD и в каком формате он хранится...
  • а не сужает ли круг возможностей программирование в рамках т.н. wealth-Script?
  • чем Stocksharp лучше или ваще отличается принципиально от WLD и его возможностей
60 Комментариев
  • Алексей (Bacardi)
    15 декабря 2012, 14:01
    еще интересно как вписать gettime, чтобы торговался например с 11.00 до 19.00
    • fau
      15 декабря 2012, 14:50
      Bacardi, подсказка Date[bar].Hour
      • Алексей (Bacardi)
        15 декабря 2012, 14:52
        fau, это мне внизу уже подсказали, только у меня с программированием не особо, знаешь как полностью эту вещь вписать?
        • fau
          15 декабря 2012, 14:56
          Bacardi, перед входом в сделку сделай проверку на время, типо
          if(Date[bar].Hour >= 11 && Date[bar].Hour <= 19)…
          • Алексей (Bacardi)
            15 декабря 2012, 16:25
            fau, спасибо огромнейшее!!! все заработало)
  • l-way
    15 декабря 2012, 14:05
    непонятно где хранится код, который мы открыли в WLD и в каком формате он хранится…
    В 5.4 хранился в файле на диске. Файл xml формата.

    зачем нужен VS если в WLD есть встроенный компилятор?
    В 5.4 vs можно использовать для отладки. Я вообще все страты пишу в vs — там удобнее. Wl только для отображения сделок На графике.
    • Алексей (Bacardi)
      15 декабря 2012, 14:10
      l-way, а ты знаешь как вписать gettime, чтобы тестировать с 11.00 до 19.00?
      • l-way
        15 декабря 2012, 14:14
        Bacardi, не очень понял задачу. Если смысл в том, что бы открывать и закрывать позиции толь с 11до 19, тогда просто добавить фильтр по времен текущего бара — date[n]
        • Алексей (Bacardi)
          15 декабря 2012, 14:16
          l-way, вот это надо с 11 до 19, а как это написать?
          • l-way
            15 декабря 2012, 14:19
            Bacardi, if date[bar].hour > 11…
            • Алексей (Bacardi)
              15 декабря 2012, 14:22
              l-way, а можешь эту строчку полностью написать?
          • jtrade
            15 декабря 2012, 23:03
            Bacardi, Как вариант, в 5.4 можно вот так поступить
            public int GetTime(int bar)
            {
            return Date[bar].Hour * 100 + Date[bar].Minute;
            }
            Затем использовать например так:
            if (GetTime(bar)>=1100 && GetTime(bar)<=1840 )
            {
            //
            }
      • Marsel Tazetdinov
        15 декабря 2012, 14:14
        Тимофей Мартынов, anch-s-journal.livejournal.com/14388.html
      • l-way
        15 декабря 2012, 14:18
        Тимофей Мартынов, а я не перебрасываю — у меня все тесты в vs в своем фреймворке. И статистика вся там. Но графиков нормальных пока нет. Поэтому сделки из vs грузятся в файл, а программа в wl на графике их отображает.
        Раньше просто в wl писал.

        Иначе 6 использовал бы
          • l-way
            15 декабря 2012, 14:27
            Тимофей Мартынов, недостатки — плохой редактор кода, не удобный для объемных стратегий, тормоза/медленная работа, глюки при формировании из минутных данных старших таймфреймов. Не удобство написания прикладных программ, нпример для обработки данных — типа склейки фьючей, доп статистики, которой нет в wl и т.д. с тиками там какие то проблемы были.
            А преимущест по сути только удобные графики. По этому использую только их
  • Marsel Tazetdinov
    15 декабря 2012, 14:13
    Мартик, только не оператор, а метод, все что красное в велсе это методы
      • Marsel Tazetdinov
        15 декабря 2012, 14:15
        Тимофей Мартынов, я к этому иду Мартик)
      • Marsel Tazetdinov
        15 декабря 2012, 14:17
        Тимофей Мартынов, неа я там не рассказывал, возможно сказал что такая возможность есть и все, я тебе линк выше кинул, там нормальная инструкция, под любой велс слаботает
      • l-way
        15 декабря 2012, 14:32
        Тимофей Мартынов, читаешь и парсишь файл. Можно напрямую загружать с финама, но тут надо парсить еще ответ сервера
  • Marsel Tazetdinov
    15 декабря 2012, 14:25
    1) зачем нужен VS если в WLD есть встроенный компилятор?
    разница как между вордом и блокнотом, но если кодить что-то не сложное VS реально не нужен

    2) непонятно где хранится код, который мы открыли в WLD и в каком формате он хранится…

    C:\Users\<Твой юзер в винде>\AppData\Roaming\Fidelity Investments\WealthLabDev\1.0.0.0\Data\Strategies

    хранится в формате XML, не знаю почему, и это, нужно скрытые папки сделать видимыми чтобы туда зайти

    3) а не сужает ли круг возможностей программирование в рамках т.н. wealth-Script?

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

    4) чем Stocksharp лучше или ваще отличается принципиально от WLD и его возможностей

    гибче и быстрее, S# это чистый C# без примесей :)
    • mio-my-mio
      15 декабря 2012, 18:31
      Марсель Тазетдинов, только ради Intellisense имеет смысл использовать родной Майкрософтовской пакет :)

      1)Если уже и вступать на путь .NET программирования, лучше это делать в «родной» среде, являющейся стандартом де-факто и де-юро :) Наверняка, совсем скоро, любому юннату захочется превратить свой код в настоящий проект, либо консольный, либо WinForms…

      2)хранится в формате XML, не знаю почему...

      «XML-файлы и файлы других расширений, основанные на языке XML, получили очень широкое распространение. В XML-файлах хранятся самые различные данные — от настроек приложений до баз данных. Файлы на основе XML используются для обмена информацией в Интернете и между программами (для этого данный язык разметки и был изначально задуман). Т.к. файлы формата XML содержат текстовые данные, их можно легко отредактировать в любом текстовом редакторе.»

      3)Представим себе, что стратегия и её WL-код созданы, что дальше??? Разве не возникнет необходимости в создании настоящего приложения?
      А где его создавать, как не в VS?

      4)K VS можно подключить как WL, так и S#…
      • Marsel Tazetdinov
        15 декабря 2012, 19:14
        mio-my-mio, ну да согласен, в других редакторах дебага либо нет в принципе, либо что-то из серии, вывести в аутпут :)
  • Амадей_МФ
    15 декабря 2012, 14:27
    «обнаружим возможность строить торговую стратегию на основе простых правил. Это для меня оказалось новостью, потому что я думал что в WLD можно только запрограммировать свою стратегию»

    хм… я кстати раньше вам говорил (http://smart-lab.ru/blog/92537.php) про этот генератор скриптов, что писать роботов лучше учиться у него. Это самый эффективный путь.

  • Амадей_МФ
    15 декабря 2012, 14:31
    С# можно вообще не изучать — хватит школьных знаний
  • VpnS
    15 декабря 2012, 14:39
    S# — это просто библиотека в c# или нечто иное?
    где подробнее почитать?
  • StockChart.ru
    15 декабря 2012, 14:49
    Не понятно вот что — неужели работа скрипта идет по анализу свечек, а не отдельных сделок. Если да, то это же… вопиюще
    • А. Г.
      15 декабря 2012, 16:07
      RuTicker.com,

      Вообще то посвечное эквити стратегии — это правильно по сравнению со статистикой сделок и посделочной эквити.

      Так что логика WLB в этой части правильная. Другое дело, что меня этот скрипт не устраивает из-за DataSeries, так как не каждый алгоритм ложится на операции с массивами, а выборка конечного подмассива из DataSeries на каждом шаге работы стратегии — это жуткие «тормоза».
      • StockChart.ru
        15 декабря 2012, 17:51
        А. Г., с чего бы? Свечки удобны для человека, но для алгоритма они совершенно не естественны.
        • HugoRu
          16 декабря 2012, 02:03
          RuTicker.com, полностью согласен, также есть еще один минус свечей: чтобы система дала сигнал на сделку нужно ждать окончания свечи, что в трендовых стратегиях совсем не айс.
          • А. Г.
            16 декабря 2012, 03:21
            HugoRu,

            Вообще то в WLD можно и с тиками работать, а совершать сделку на поступившем тике с внесением его в условия совершения сделки — это заглядывание в будущее. Поэтому то, что совершить сделку можно только на следующем тике — это правильно.
          • skatino
            16 декабря 2012, 12:40
            HugoRu, необязательно ждать… зависит от стратегии.

            просто дело в том, что большинство стратегий тестируется на истории… которая состоит только из свечей.
        • А. Г.
          16 декабря 2012, 03:19
          RuTicker.com,

          У любого алгоритма есть решение сменить позицию (совершить сделку) и не менять позицию и эти решения

          а. равнозначны по важности
          б. совершаются по тактам поступления новой информации

          Именно отсюда и следует, что с точки зрения оценки качества торгового алгоритма надо смотреть на все такты поступления новой информации, а не только на те, когда совершались сделки.
        • skatino
          16 декабря 2012, 12:35
          RuTicker.com, очень правильное замечание…
  • Амадей_МФ
    15 декабря 2012, 15:06
    LastPosition — последняя созданная позиция

    Опять же повторюсь что писал вам раньше (http://smart-lab.ru/blog/92537.php), что полезно почитать хелп-велзлабовский (за 4 часа прочитаете всё, это полезный хелп польза/время). Заходите HELP -> WealthscriptQuickRef -> там это всё есть

    про «Group1» — верно, это лишь метка ордера чтобы отличать одни от других
  • Некто
    15 декабря 2012, 16:19
    блин, это просто разрыв мозга, что Тимофей ушёл c рбк и теперь вот учится программировать на C#… так не бывает, не могу читать, не верю!
  • mio-my-mio
    15 декабря 2012, 18:36
    Тимофей, можно выкладывать не картинки кода, а постить его на pastebin.com, или на подобные сайты для code snippets,
    a затем давать ссылку на сам код :)
  • Дмитрий Власов
    15 декабря 2012, 23:08
    О том, как связать Wealth-Lab c VisualStudio (в т.ч. видео): finlabportal.ru/2012/08/kak-ustanovit-svyaz-mezhdu-wealth-lab-i-visual-studio-dlya-otladki-torgovoj-strategii/
  • Дмитрий Власов
    15 декабря 2012, 23:11
    «зачем нужен VS если в WLD есть встроенный компилятор» VS это все равно, что мощный текстовый редактор. Да, текст можно писать и в блокноте (аналог редактора велсовского), но удобнее делать это все-же в Word. Помимо того VS позволяет отлаживать код, делать точки остановок, удобно хранить готовые стратегии, группируя их (Решение — Проект — Класс). Можно автоматизировать многие процессы при программированиии…
  • Дмитрий Власов
    15 декабря 2012, 23:26
    Для того, чтобы найти файлы стратегий велсовских на компе нужно сделать следующее:

    1) Сначала открыть скрытые папки:
    — В проводнике нажать «Alt»
    — В появившемся меню выбрать «Сервис» — Параметры папок…
    — Перейти на закладку «ВИд»
    — Переместиться вниз и в самом низу выбрать «Показывать скрытые файлы, папки и диски, а также убрать флажок с „Скрывать защищенные системные файлы
    — нажать “ОК».

    2) Переходим: С:\Пользователии\<Конкретный пользователь>\AppData\Roaming\Fidelity Investments\WealthLabDev\1.0.0.0\Data\Strategies

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

    Кстати в папке С:\Пользователии\<Конкретный пользователь>\AppData\Roaming\Fidelity Investments\WealthLabDev\1.0.0.0\Data\

    Можно найти папку с провайдерами данных (к примеру FinamProvider) — где хранятся файлы котировок…
    • Дмитрий Власов
      15 декабря 2012, 23:29
      Дмитрий Власов, Wealth-Script в Wealth-Lab раньше был языком… Теперь язык C#, а Wealth-Script — это по сути библиотека классов (или даже класс, находящийся в библиотеке WEalthLab.dll). От этого класса всегда наследуется класс создаваемой стратегии (:WealthScript). Как результат нам становятся доступны все методы (и не только методы), которые для нас создали разработчики велса (к примеру, такие как рисование на графике, приказы BuyAtMarket(), ShortAtClose() и т.п.). Как итог нам не нужно изобретать велосипед, а нужно просто взять его, научиться ездить и ехать.
  • Игорь Чечет
    16 декабря 2012, 10:07
    Тимофей, попробую облегчить тебе жизнь (ничего, что на ты?)

    1. В курсе есть переведенная инструкция по разработке от Дмитрия Власова. Адскую работу Дмитрий проделал, зато на выходе имеем 135 страниц качественно переведенного материала по разработке. Воспользуйся им, тогда будет легче разбираться в WLD.
    2. Также в курсе есть отдельное видео по настройке связки между WLD и VS. Работает со всеми версиями WLD и VS.
    3. В курсе есть учебные ТС. Посмотри их, разбери, погоняй. Потом сможешь любую ТС сделать сам.

    Что касается вопросов:

    1. C# — это стандартизованный по ISO язык программирования. На нем можно написать все, что угодно. Microsoft выдает .NET Framework. В нем много чего есть. Здесь нас больше интересуют уже готовые библиотеки классов. Например, хочешь ты поработать со временем — пожалуйста, есть класс DateTime. Хочешь поработать с математикой — тебе в помощь класс Math. Разработчикам WLD осталось только написать свою библиотеку, которую назвали WealthScript. С ней ты и будешь работать, чтобы получать данные из свечек, индикаторов, заходить в позиции и выходить из них. Как только потребуется еще что-то — весь .NET Framework к твоим услугам.
    2. VS я использую для создания ТС, индикаторов и трейдерских компонент. Индикаторы и компоненты в исходных кодах выложены у меня на форуме, можешь их скачать и поизучать. Когда ты пишешь простые ТС, тогда все равно, где их писать. Если ТС посложнее с замысловатой логикой, тогда будет полезна отладка из VS. Ставишь точки останова, запускаешь свой проект, он подгружает WLD. В WLD запускаешь ТС, как она дойдет до точки останова, сразу откроется VS, где ты сможешь посмотреть все значения переменных, пройти код по шагам. Очень хорошо для нахождения ошибок кодирования. Вторая «фишка» VS — это представление твоих ТС в виде библиотеки. На выходе у тебя будет DLL файл. Можешь его спокойно переносить с компьютера на компьютер. Третья причина использования VS — это удобство разработки. Помощь в выборе переменных, свойств и методов (Intellisence), автоматическое форматирование кода, лучшая визуализация. Очень сильно сокращается время написания кода.

    3. Почему ТС, написанные в WLD, хранятся в XML. Ответ прост. XML — стандарт для описания структуры данных и самих данных. Если в ТС есть параметры, то для каждого тикера можно задать Preferred Values. Проще всего взять код ТС, загнать его в XML, туда же заносить все значения параметров оптимизации для каждого тикера.
  • Игорь Чечет
    16 декабря 2012, 10:13
    Тимофей, по поводу Group1. Тоже простая штука. Когда ты заходишь в позицию, то можешь каждой позиции дать метку. Затем из массива активных позиций ты можешь найти любую по ее метке. Хорошо для многопозиционных ТС, где ты определяешь, какую позицию прикрыть.

    Здесь такая конструкция используется просто из-за того, что в WLD для правил писали универсальный код. Смысла для данной ТС он не имеет. Но вот если бы ты в правилах определил бы многопозиционную ТС, тогда по Group1 искалась бы позиция.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн