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

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

Всем привет!!!

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

Сразу хочу попросить – если вопрос, который Вы хотели бы задать, не является конфиденциальным – лучше задавать его здесь, в комментариях, на страницах БЛОГа. Так я отвечу намного быстрее. Если же Вы хотите обсудить что-то секретное – тогда, конечно… Пишите на vdv@finlabportal.ru Но в этом случае, ответ иногда будет немного позднее, т.к. просматриваю почту нечасто (1 раз в день).

Самыми востребованными оказались темы, посвященные АРБИТРАЖУ и, как не странно, работе с программой Wealth-Lab. Обязательно учту Ваши пожелания при написании следующих постов!

А сегодня, как и обещал – выложу код системы для Wealth-Lab, про который писал в предыдущем посте..

Итак, ничего сложного в написании кода для тестирования торговой системы совершенно нет…

Скажу сразу, я программистом не являюсь. Мои знания ограничиваются изучением языка БЕЙСИК ещё в школе. Но я буквально за 2 недели научился писать код, который позволяет описать логику торговых систем и со всех сторон анализировать такие торговые системы.

Конечно, мне повезло, я могу постоянно, при возникновении вопросов, получать консультацию у ребят, которые очень хорошо «шарят» в программировании и знают практически все нюансы языка C#.

Немного советов, которые позволят Вам, даже если Вы не являетесь программистами, легко освоить некоторые особенности того языка программирования, который используется в Wealth-Lab pro (5.4).

Во-первых:  где взять саму программу Wealth-Lab pro?

Вот по этой ссылке Вы можете скачать и установить себе программу совершенно легально и бесплатно (на целый месяц). Это Wealth-Lab Pro 5 (30 дневный триал от брокера Fidelity).

Месяца, я думаю, вполне хватит для того чтобы оценить, насколько Вам удобно работать с такой программой. Если удобно, то дальше, как в сказке, перед Вами 3 пути:

  • Отказаться от программы;
  • Купить лицензию для работы с программой;
  • Третий путь пусть каждый определяет для себя самостоятельно ;-)

Во-вторых: На каком языке мы будем описывать торговую систему?

Язык, который используется для написания кода, описывающего Вашу торговую систему называется C#.  В программе Wealth-Lab есть собственный редактор, который поможет создавать и редактировать код. Добраться до него можно следующим образом:

File – New – New Strategy from Code (можно нажать на сочетание клавиш ( Ctrl + Shift + S).

Выглядит это примерно так:

Рисунок №1:

После того, Как Вы проделаете эту операцию – откроется окно редактора, в котором Вы сразу можете начинать творить…

Рисунок №2:

Однако, писать код в таком редакторе – не очень удобно, именно поэтому я советую Вам скачать и установить (заметьте, опять совершенно бесплатно) программу, которая позволит Вам с комфортом описывать на языке C# любые торговые стратегии..

Эта программа называется Microsoft Visual C# 2008, экспресс выпуск. Что приятно, она полностью на русском языке (даже справка).

Скачать эту программу можно вот здесь… (версия 2008, версия 2010).

После того, как Вы установите данную программу – писать, править и проверять на отсутствие ошибок код программы становится так же удобно, как писать текст в хорошем текстовом редакторе.

Т.е. если проводить аналогию, те, кто пишет программу во встроенном редакторе Велс Лаба – это писатель, редактирующий свой текст например в Блокноте. Писать небольшие вещи можно и даже удобно.

А те, кто работает в Microsoft Visual C# 2008 – использует уже более продвинутый редактор (например, Microsoft Word).

Вот Вам ещё пара интересных ссылочек:

1)    Visual Studio Learning Pack 2.0 (ранее известный, как Visual Studio Middle School Power Toy) это программный пакет, созданный компанией Microsoft для помощи студентам в изучении компьютерного программирования. Скачать можно здесь!!!

2)    Центр начинающего разработчика

3)    Учебник

А вообще не заморачивайтесь – просто подписывайтесь на новые посты нашего БЛОГа по RSS или e-mail. Дальше будут статьи, показывающие, как конкретно применять C# для построения торговых систем… ;-)

Далее процесс протекает следующим образом: В Visual C# пишется и отлаживается рабочий код. Выглядит это примерно вот так:

Рисунок 3:

После чего, с помощью копипаста весь код переносится в редактор Велс Лаба. И уже оттуда запускается на выполнение….

Ну а теперь, как и обещал – выкладываю код для системы для фьючерса на индекс РТС, которая позволяет зарабатывать, совершая менее 3 сделок в месяц:


using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace StrategesVDV
{

    public class ZigZag : WealthScript
    {

        StrategyParameter strategyParameter1;
        StrategyParameter strategyParameter2;
        StrategyParameter strategyParameter3;
        StrategyParameter strategyParameter4;

        public ZigZag()
        {
            //оптимизировано для 5 минут индекса РТС
            strategyParameter1 = CreateParameter("PercentPeak", 32, 20, 50, 1);
            strategyParameter2 = CreateParameter("_PercentTrough", 44, 20, 50, 1);
            strategyParameter3 = CreateParameter("Period_ATR", 11, 8, 15, 1);
            strategyParameter4 = CreateParameter("Koeff_ATR", 13, 8, 15, 1);
        }

        protected override void Execute()
        {
            double _PercentPeak = strategyParameter1.Value / 10;
            double _PercentTrough = strategyParameter2.Value / 10;
            int _PeriodATR = strategyParameter3.ValueInt;
            double _KoeffATR = strategyParameter4.Value / 10.0;

            DataSeries _Atr = ATR.Series(Bars, _PeriodATR);
            Peak _Peak = Peak.Series(Bars.High, _PercentPeak, PeakTroughMode.Percent);
            Trough _Trough = Trough.Series(Bars.Low, _PercentTrough, PeakTroughMode.Percent);

            //Выводим максимумы и минимумы на график:

            PlotSeries(PricePane, _Peak, Color.Green, LineStyle.Solid, 1);
            PlotSeries(PricePane, _Trough, Color.Red, LineStyle.Solid, 1);

            for (int Bar = Math.Max(_PeriodATR, 3) + 3; Bar < Bars.Count; Bar++)
            {
                Position p = LastPosition;

                if (IsLastPositionActive)
                {
                    if (p.PositionType == PositionType.Long)

                        SellAtStop(Bar, p, Math.Max(p.EntryPrice * (1 - 0.06), _Trough[Bar]));

                    else if (p.PositionType == PositionType.Short)

                        CoverAtStop(Bar, p, Math.Min(p.EntryPrice * (1 + 0.06), _Peak[Bar]));
                }

                else
                {
                    if (_Peak[Bar] > _Trough[Bar])
                    {
                        RiskStopLevel = _Peak[Bar] - _KoeffATR * _Atr[Bar - 1];
                        BuyAtStop(Bar, _Peak[Bar]);
                    }

                    if (!IsLastPositionActive)
                    {
                        if (_Peak[Bar] > _Trough[Bar])
                        {
                            RiskStopLevel = _Trough[Bar] + _KoeffATR * _Atr[Bar - 1];
                            ShortAtStop(Bar, _Trough[Bar]);
                        }

                    }

                }

            }

        }

    }

}

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

Кстати, скажу сразу, мне очень нравится как пишет jc_trader в своём БЛОГе. Правда, он торгует на зарубежных рынках, но торгует системно. А самое главное, не жадничает и частенько у него можно встретить интересные идеи для построения торговых систем, а также и готовый код таких систем (правда опять же для зарубежных рынков, но их легко можно переделать и для российского рынка).

Так что те, кто хочет попрактиковаться в написании кода для Велс Лаб – может почерпнуть какие – то идеи не только у нас на БЛОГе, но и там…

Ну на сегодня, наверное, всё!

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

  1. Michael пишет:

    Попробовал запустить, вот только не хватает IndicatorsVDV.

    • VDV пишет:

      Эту строчку можно вообще удалить.
      Там Эти индикаторы никак не используются…
      Они используются в других системах… :-)
      А что, не получается запустить? Какую ошибку пишет?

  2. Michael пишет:

    Так получилось, спасибо!

    • VDV пишет:

      ОК. Я эту строчку вообще удалил из кода, чтобы другие не путались…

      • SS пишет:

        Скопировал код, вставил в WLD.
        Ругается на строчку

        RiskStopLevel = _Peak[Bar] – _KoeffATR * _Atr[Bar - 1];

        Не нравится ему _KoeffATR – подчеркивает красным и говорит “Непредусмотренный символ “-” ”

        Что делаю не так?
        Подскажите!!!

        • SS пишет:

          Вопрос снимается :)
          удалил и снова добавил минус – все заработало
          видимо какой-то глюк при вставке…

  3. Андрей пишет:

    Добрый день.Скачал WealthLab, установил, скопировал код немного пришлось ковычки подредактировать и индикаторсВДВ убрать, все заработало вроде, но подскажите такой вопрос где можно взять архив котировок фьючерса РТС(у вас вообще за несколько лет они)?

    • VDV пишет:

      Привет!
      Исторические котировки акций (в т.ч. котировки на фьючерс на индекс РТС) беру на сайте ФИНАМа. Но, т.к. за год последовательно бывает 4 “активных” фьючерсных контракта – мартовский, июньский, сентябрьский и декабрьский, приходится скачивать эти котировки, слеплять их и ещё – о чём я писал, обязательно удалять первую минуту торгов…
      Всё это у нас делается автоматически с помощью “самописной” программки…
      А так можно сделать и “ручками”, но медленнее..

      • Slick пишет:

        VDV, а зачем фьючи клеить, если на финаме уже есть склеенный? Или он чем-то отличается?

        • VDV пишет:

          Я не знаю, по какому алгоритму они клеют эти фьючи. Да и с программой разницы особой нет – склеинный брать, или самому клеить.

  4. Андрей пишет:

    Уф замучился с котировками, вроде нашел скачал в формате cvs, но никак импортировать не получаеться, выдает все время ощибку, можете подскажите как это сделать?

    • VDV пишет:

      В принципе там сложного ничего нет. Если действительно нужно – могу описать весь процесс загрузки данных в понедельник. Но это довольно много времени займёт, а я хотел с понедельника описать процесс уровневого АРБИТРАЖА на примере фьючерса на рубль-доллар…
      Может кто в комментах вкратце опишет процесс экспорта – как это делается или ссылку даст?

      • anotrade пишет:

        Выложил мой способ импорта данных:
        http://sites.google.com/site/trendsysru/importwealth

        • Anton пишет:

          Попробовал сделать экспорт по вашему описанному методу – нашел ошибку
          В Date Format надо указывать не yyyymmdd, а yyyyMMdd, а то он вместо месяцев минуты воспринимает и на выходе каша выходит
          А в общем, спасибо за полезную информацию!

        • Jazz пишет:

          Только начала с wlb разбираться, подскажите, как настроить импорт, если строчку TimeFormat wlb вообще не подсвечивает( соответственно и ошибку выдаёт.

          • Jazz пишет:

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

      • VDV пишет:

        Всё таки интересная штука, если начинаешь делиться информацией, то практически сразу получаешь адекватный ответ… Закон сохранения энергии действует и в интернете…
        Получил письмо от Аноним Трейдеровича :-)
        В своём письме он дал ссылку на то, как можно экспортировать данные для Велс Лаб с сайта Финама.
        Плюс сам сайтик очень интересный… (тоже стратегия трендследящая выложена)…
        В общем, кому нужно – смотрите: http://sites.google.com/site/trendsysru/importwealth

        • anotrade пишет:

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

    • TH_one пишет:

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

  5. anotrade пишет:

    у меня вопрос по оптимизации нескольких инструментов:
    возможно ли как то в Велсе сохранять результаты с целью перейти к другому инструменту, а потом каким-нибуль способом сравнить параметры оптимизации разных инструментов

  6. Od пишет:

    Посмотрел код, интересно, спасибо. Мне кажется, в коде, когда идёт покупка продажа, правильней писать bar + 1, нежели bar.
    Ещё вопрос, эта система работает только фРТС? Просто попробовал например на фьюче Сбера – результат не впечатлил.

    • VDV пишет:

      Привет. Если тип заявки BuyAtStop (или SellAtSotp), то в коде нужно писать именно bar а не bar+1, т.к. здесь идёт покупка (или продажа) на пробой – как только цена коснулась указанного уровня цены. Естественно, в настройках нужно устанавливать правдоподобное проскальзывание.
      По поводу других контрактов, честно говоря не тестировал. Появится время – можно попробовать и не обязательно на фьючах – можно на акциях попробовать. Честно говоря я такую систему не торгую, мне больше по душе системы с большим количеством сделок…

    • gorky пишет:

      Все правильно – и не должно впечатлять. Не бывает двух одинаковых фьючерсов, как не бывает двух одинаковых крокодилов. Для каждого инструмента необходимо проводить оптимизацию параметров стратегии. Только тогда можно будет делать хоть какие-то жизнеспособные выводы.

  7. SergiusD пишет:

    Есть вопрос по Wealth-Lab. Хочу добавить в него инфикаторы с родного сайта http://www2.wealth-lab.com/WL5WIKI/CommunityIndicatorsMain.ashx
    Там лежат их исходники. Не пойму как это сделать. Пытался скомпилировать в VisualStudio10, она пишет что не знает неймспейса WealthLab и ему подобных. А зарегистрировать их в системе тоже не выходит.
    Направьте пожалуйста на верный путь.

    • gorky пишет:

      SergiusD,
      чтобы добавить эти индикаторы в Велс из VS2010 нужно:

      1) когда открываешь проект в VS надо к добавить библиотеку WealthLab.dll в References проекта.
      Для этого нужно скопировать ее в папку проекта, а потом в VS выбрать в меню Project -> Add Reference, в открывшемся окне перейти на вкладку Browse и выбрать dll-ку.

      2) скомпилировать проект
      Если будет ругаться – то, скорее всего, нужно еще пару dll-ек подключить (см. п. 1)

      3) скопировать скомпилированную dll-ку в папку WealthLab

    • gorky пишет:

      а еще, возможно, тут:

      http://www2.wealth-lab.com/WL5WIKI/CommunityIndicatorsMain.ashx

      есть и готовая, скомпилированная библиотека, которую достаточно просто скопировать в WealthLab и не вникать в подробности использования VS.

  8. Андрей пишет:

    VDV, коллеги по WL!

    Кто нибудь вменяемо решил проблему экспорта исторических и реальных даннах из Quik в WL5?? Поделитесь!

    За что же нас так мучают? Вместо грубоких размышлений над стратегиями – танцы с бубнами.

    Я сам экспортирую в WL4 со стандартным адаптером. А далее WL5 c некоторой задержкой засасывает данные из директория данных WL4.

    Еще написал Excel макрос, который сосет данные из Блумберга и сбрасывает их в ACSII файлы, которые потом читает WL5 (но это для всякой экзотики).

    Но понятно, что об автоматизации здесь речи не идет.

    Спасите! А то я ухожу из WL.

  9. Anton пишет:

    Что то подсказывает что риск в каждой сделке не 0,6%, а 6%

    SellAtStop(Bar, p, Math.Max(p.EntryPrice*(1-0.06),_Trough[Bar]));

    • Антон, привет.
      Не совсем так. Этот кусочек кода показывает, что начальный СТОП-ЛОСС ставится на предыдущее дно, но не далее чем на 6% от цены входа. А вот величина риска в одной сделке определяется не расстоянием СТОП-ЛОССА от цены входа, а количеством контрактов, которые задействованы а также заранее введённой величиной максимальной просадки от величины капитала в каждой сделке. Т.е. если расстояние от цены входа до начального StopLoss будет велико – будет задействовано меньше контрактов, чтобы выдержать условие рисковать не более чем на 0,6% от общего капитала. Если расстояние от цены входа в позицию до начального StopLoss уменьшается – появляется возможность вводить в данной конкреной сделке больше количество контрактов.
      Вроде постарался доступно написать – если трудно для восприятия – пиши – разберёмся…

  10. Леонид пишет:

    Дмитрий, а почему при календарном арбитраже раздвига ближний-дальний ходит от нуля в обе стороны и в итоге почти сходится, а по фьючам бумаг не около нуля, а на разных уровнях: у кого -25, у кого – 170.
    И я так понимаю, что по фьючам бумаг это значение может меняться и если задать параметры скажем покупать на -50 руб от среднего значения и продавать на +50руб, то через какое то время среднее может смещаться в какую либо сторону и среднее значение раздвиги ближний-дальний станет не -25 руб, а допустим -50руб, тогда надо опять подстраивать прогу. Тут встает вопрос: в какой момент надо начинать подстраивать и имеет ли смысл вообще торговать календарную раздвигу по бумагам?

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

      Если стратегия предполагает торговлю от “среднего спреда”, то наша программа позволяет установить, к примеру, усреднение за большой период, к примеру, за час и торговать от среднего. Естественно, со временем среднее значение может сдвигаться в ту или иную сторону. Как результат, часть сделок может быть закрыто и в минус также.

  11. Леонид пишет:

    сходится к нулю: это касаемо арбитража спот и срочка, а если торгуешь календарный арбитраж?
    Там гарантии схождения в ноль нет. Взять хотя бы RIH0-RIM0, там к дате экспирации спрэд вообще улетел. Так никакое усреднее не поможет: будет череда убыточных сделок, т.к. начнешь уредняца, а спрэд будет уходить дальше и дальше, в итоге на каком то этапе придется фиксить огромный лосс.

  12. Михаил пишет:

    Леонд,а может так происходит всегда перед эспирацией и на этом можно заработать.Причина тому,что ближний фьюч. перед эспирацией уже никому не нужен,а дальний наоборот.Поэтому спред и улетел.Воэможно это и не так.Как думаете?

  13. Леонид пишет:

    Я посмотрел несколько пар фьючей на Ри: у всех разные спрэды в течение торгуемого периода и разный спрэд на дату экспирации: может и в ноль выйти, а может и улететь тыщи а полторы.
    Безусловные плюсы такой торговли конечно есть: торгвля внутри дня в последние дни перед экспирацией от средней. Но! По-любому нужен жесткий стоп на депо на случай резкого выброса от средней в одну сторону и последующее движение в эту сторону, т.к. в последние дни нет гарантии возврата к этой средней.

    • Михаил пишет:

      Леонид,мой е-mail: fi1@mail.ru Что бы не засорять нашей перепиской этот сайт,при желании пишите на почту.Готов поделиться своими наблюдениями.

      • Михаил, привет.
        Наоборот, хорошо, что Вы здесь общаетесь. Мы же и задумывали блог как площадку для общения тех, кто заинтересован в торговле с применением стратегий парного трейдинга. Так что никаких проблем в этом нет.
        Если хотите – вот ссылка на форум наш – там может быть будет более удобно сложные темы обсуждать… http://finlabportal.ru/forum/viewforum.php?f=31

  14. Михаил пишет:

    Леонид,улететь-это куда?Если вверх-это хорошо.Если в ноль это ничего страшного.Но может ли упасть сильно спред дальний фьюч.-ближний фьюч.?Есть ли у вас такая статистика?По моим недолгим наблюдениям на эту тему упасть не должен.Понятно,я имею ввиду последний день перед эспирацией.

  15. marko пишет:

    Дмитрий! Ссылка на Microsoft Visual C# 2008 (рус) не работает-где можно скач эту прогр?

  16. Kostin Andrey пишет:

    А такой вопрос, можно ли в WealthLabe делать стратегии по нескольким инструментам, то есть используя данные по нескольким бумагам?

    • gorky пишет:

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

      • Kostin Andrey пишет:

        Меня интересует именно в Велсе в режиме реального времени, чтобы парные арбитражные стратегии за ротобизировать.
        Сейчас они пока работаю в Метастоке, через dll Косинского, но постоянная запись в файл и считывание с него тормозят Metastock очень сильно, да и сам dll не стабилен.

  17. Skaarj пишет:

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

  18. alt пишет:

    Дмитрий!
    У меня WL 5.4…
    Ваша система нормально генерит сигналы на днёвках…
    А при переходе на минуты-сигналов нет?? что не так делаю??

  19. alt пишет:

    Снимаю вопрос…

  20. alt пишет:

    Отчасти разобрался…
    Но смущает что на истории около 9 мес т.ф. 5 мин -15 сделок…и результат далеко не лучший??
    И ещё вопрос-есть платформа TSLab- системы для неё пишутся вроде на С#-но WLD 5.4 не “понимает” эти сист-??
    Как проще адаптировать их под WL ??

  21. sergey пишет:

    здравствуйте можно ли данный код применить к Quikе и как это сделать.если можно подгоните его к квику,

    спасибо заранее

    • Хотелось бы попробовать – как ведет этот код за прошедший с опубликования год – на текущий момент. Будет время – займусь и выложу результат в виде поста.

  22. [...] В нашем блоге ранее уже был пост, посвященный тому, как делать торговые системы в Wealth Lab с помощью программирования на языке [...]

  23. Евгений пишет:

    StrategyParameter strategyParameter1(2,3,4) – это методы ,как я понял, уже прописаны в библиотеках WealthLab ? Мы подставляем только данные ? А как программу соединить с реальнвми торгами?В FinLab есть свой интерфейс с вводом сервера,логина,пароля – а как этот выложенный код запускать ? Хотя бы напишите где и что читать по этому вопросу – чтобы код превратить в программу, которая работает с сервером.Язык C# изучаю, сам код более менее понятен – классы,методы… ? Но как я понимаю есть роботы ,каторые торгуют напрямую , а есть – через терминал.Как вообще запустить этот код на исторических данных . Получить данные думаю разберусь – на Метастоке уже пробовал. Каков способ включения на прогон и каков способ подкючения к торгам(брокер Алор+)?В любом случае для подключения нужен целый алгоритм – кто разбирается подскажите.И вообще мне непонятно как будут восприниматься заявки – что в библиотеках WealthLab уже все алгоритмы прописаны как надо ? Поясните пожалуйста как прилепить всё это к тестированию и реальным торгам.

    • Wealth Lab позволяет только тестироать стратегии. Чтобы подключить Wealth Lab к реальным торгам – нужно дополнительно сделать (или купить или найти) брокер адаптер. Но на мой взгляд – удобнее делать следующим образом: в Wealth Lab тестировать и оптимизировать стратегии, а автоматизировать торговлю с помощью программы TSLab Я именно так и делаю. В TSLab стратегия торговли также пишется на языке C#. Обещаю в ближайших постах пошагово показать – как это делается.

      • Вячеслав пишет:

        Дмитрий, а почему, если не секрет, Вы используете TSLab, а не FinLab.MTS ?
        В обоих возможность писать на C#
        Или чем то TSLab функциональнее, тогда чем? Я не рассматриваю сейчас возможность оптимизации и тестирования, предполагаем, что для этого мы используем Wealth Lab )))

        • в FinLab.MTS нет функционала работы с историческими данными, с графиками, с тестированием.
          Она заточена больше на работу со стратегиями парного трейдинга.
          Конечно, можно все это дописывать – но зачем это нужно, если уже есть хорошие программы, которые справляются с этим.
          Именно поэтому и использую их.

  24. павел пишет:

    Здравствуйте! Приобрел торгового робота “импульсная система Элдера” возможно с помощью программы Wealht Lab протестировать эту стратегию? заранее спасибо

  25. [...] следующих постах я собираюсь выложить здесь код данной системы в WealthLab. А также рассказать, как можно полностью [...]

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