Всем привет!!!
Был приятно удивлён, когда увидел на своей почте очень много сообщений с благодарностями за выложенные посты и просьбами продолжать публиковать заметки по разным темам.
Сразу хочу попросить – если вопрос, который Вы хотели бы задать, не является конфиденциальным – лучше задавать его здесь, в комментариях, на страницах БЛОГа. Так я отвечу намного быстрее. Если же Вы хотите обсудить что-то секретное – тогда, конечно… Пишите на 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 в своём БЛОГе. Правда, он торгует на зарубежных рынках, но торгует системно. А самое главное, не жадничает и частенько у него можно встретить интересные идеи для построения торговых систем, а также и готовый код таких систем (правда опять же для зарубежных рынков, но их легко можно переделать и для российского рынка).
Так что те, кто хочет попрактиковаться в написании кода для Велс Лаб – может почерпнуть какие – то идеи не только у нас на БЛОГе, но и там…
Ну на сегодня, наверное, всё!
Попробовал запустить, вот только не хватает IndicatorsVDV.
Эту строчку можно вообще удалить.
Там Эти индикаторы никак не используются…
Они используются в других системах…
А что, не получается запустить? Какую ошибку пишет?
Так получилось, спасибо!
ОК. Я эту строчку вообще удалил из кода, чтобы другие не путались…
Скопировал код, вставил в WLD.
Ругается на строчку
RiskStopLevel = _Peak[Bar] – _KoeffATR * _Atr[Bar - 1];
Не нравится ему _KoeffATR – подчеркивает красным и говорит “Непредусмотренный символ “-” ”
Что делаю не так?
Подскажите!!!
Вопрос снимается
удалил и снова добавил минус – все заработало
видимо какой-то глюк при вставке…
Добрый день.Скачал WealthLab, установил, скопировал код немного пришлось ковычки подредактировать и индикаторсВДВ убрать, все заработало вроде, но подскажите такой вопрос где можно взять архив котировок фьючерса РТС(у вас вообще за несколько лет они)?
Привет!
Исторические котировки акций (в т.ч. котировки на фьючерс на индекс РТС) беру на сайте ФИНАМа. Но, т.к. за год последовательно бывает 4 “активных” фьючерсных контракта – мартовский, июньский, сентябрьский и декабрьский, приходится скачивать эти котировки, слеплять их и ещё – о чём я писал, обязательно удалять первую минуту торгов…
Всё это у нас делается автоматически с помощью “самописной” программки…
А так можно сделать и “ручками”, но медленнее..
VDV, а зачем фьючи клеить, если на финаме уже есть склеенный? Или он чем-то отличается?
Я не знаю, по какому алгоритму они клеют эти фьючи. Да и с программой разницы особой нет – склеинный брать, или самому клеить.
Уф замучился с котировками, вроде нашел скачал в формате cvs, но никак импортировать не получаеться, выдает все время ощибку, можете подскажите как это сделать?
В принципе там сложного ничего нет. Если действительно нужно – могу описать весь процесс загрузки данных в понедельник. Но это довольно много времени займёт, а я хотел с понедельника описать процесс уровневого АРБИТРАЖА на примере фьючерса на рубль-доллар…
Может кто в комментах вкратце опишет процесс экспорта – как это делается или ссылку даст?
Выложил мой способ импорта данных:
http://sites.google.com/site/trendsysru/importwealth
Попробовал сделать экспорт по вашему описанному методу – нашел ошибку
В Date Format надо указывать не yyyymmdd, а yyyyMMdd, а то он вместо месяцев минуты воспринимает и на выходе каша выходит
А в общем, спасибо за полезную информацию!
Только начала с wlb разбираться, подскажите, как настроить импорт, если строчку TimeFormat wlb вообще не подсвечивает( соответственно и ошибку выдаёт.
хм, игнорирование первой строчки помогло, данные выводятся, только с нулевым временем) т.е. есть разделение только по дате.
как решить эту проблему?
Всё таки интересная штука, если начинаешь делиться информацией, то практически сразу получаешь адекватный ответ… Закон сохранения энергии действует и в интернете…
Получил письмо от Аноним Трейдеровича
В своём письме он дал ссылку на то, как можно экспортировать данные для Велс Лаб с сайта Финама.
Плюс сам сайтик очень интересный… (тоже стратегия трендследящая выложена)…
В общем, кому нужно – смотрите: http://sites.google.com/site/trendsysru/importwealth
Спасибо за отзыв о моем сайте, сразу скажу я в этом деле новичок, менее 2х месяцев, в реале роботами еще не торговал, определяюсь с платформой.
При импорте попробуй игнорировать первую строку(там можно указать сколько первых строк не учитывать).
у меня вопрос по оптимизации нескольких инструментов:
возможно ли как то в Велсе сохранять результаты с целью перейти к другому инструменту, а потом каким-нибуль способом сравнить параметры оптимизации разных инструментов
Посмотрел код, интересно, спасибо. Мне кажется, в коде, когда идёт покупка продажа, правильней писать bar + 1, нежели bar.
Ещё вопрос, эта система работает только фРТС? Просто попробовал например на фьюче Сбера – результат не впечатлил.
Привет. Если тип заявки BuyAtStop (или SellAtSotp), то в коде нужно писать именно bar а не bar+1, т.к. здесь идёт покупка (или продажа) на пробой – как только цена коснулась указанного уровня цены. Естественно, в настройках нужно устанавливать правдоподобное проскальзывание.
По поводу других контрактов, честно говоря не тестировал. Появится время – можно попробовать и не обязательно на фьючах – можно на акциях попробовать. Честно говоря я такую систему не торгую, мне больше по душе системы с большим количеством сделок…
Все правильно – и не должно впечатлять. Не бывает двух одинаковых фьючерсов, как не бывает двух одинаковых крокодилов. Для каждого инструмента необходимо проводить оптимизацию параметров стратегии. Только тогда можно будет делать хоть какие-то жизнеспособные выводы.
Есть вопрос по Wealth-Lab. Хочу добавить в него инфикаторы с родного сайта http://www2.wealth-lab.com/WL5WIKI/CommunityIndicatorsMain.ashx
Там лежат их исходники. Не пойму как это сделать. Пытался скомпилировать в VisualStudio10, она пишет что не знает неймспейса WealthLab и ему подобных. А зарегистрировать их в системе тоже не выходит.
Направьте пожалуйста на верный путь.
SergiusD,
чтобы добавить эти индикаторы в Велс из VS2010 нужно:
1) когда открываешь проект в VS надо к добавить библиотеку WealthLab.dll в References проекта.
Для этого нужно скопировать ее в папку проекта, а потом в VS выбрать в меню Project -> Add Reference, в открывшемся окне перейти на вкладку Browse и выбрать dll-ку.
2) скомпилировать проект
Если будет ругаться – то, скорее всего, нужно еще пару dll-ек подключить (см. п. 1)
3) скопировать скомпилированную dll-ку в папку WealthLab
а еще, возможно, тут:
http://www2.wealth-lab.com/WL5WIKI/CommunityIndicatorsMain.ashx
есть и готовая, скомпилированная библиотека, которую достаточно просто скопировать в WealthLab и не вникать в подробности использования VS.
VDV, коллеги по WL!
Кто нибудь вменяемо решил проблему экспорта исторических и реальных даннах из Quik в WL5?? Поделитесь!
За что же нас так мучают? Вместо грубоких размышлений над стратегиями – танцы с бубнами.
Я сам экспортирую в WL4 со стандартным адаптером. А далее WL5 c некоторой задержкой засасывает данные из директория данных WL4.
Еще написал Excel макрос, который сосет данные из Блумберга и сбрасывает их в ACSII файлы, которые потом читает WL5 (но это для всякой экзотики).
Но понятно, что об автоматизации здесь речи не идет.
Спасите! А то я ухожу из WL.
Что то подсказывает что риск в каждой сделке не 0,6%, а 6%
SellAtStop(Bar, p, Math.Max(p.EntryPrice*(1-0.06),_Trough[Bar]));
Антон, привет.
Не совсем так. Этот кусочек кода показывает, что начальный СТОП-ЛОСС ставится на предыдущее дно, но не далее чем на 6% от цены входа. А вот величина риска в одной сделке определяется не расстоянием СТОП-ЛОССА от цены входа, а количеством контрактов, которые задействованы а также заранее введённой величиной максимальной просадки от величины капитала в каждой сделке. Т.е. если расстояние от цены входа до начального StopLoss будет велико – будет задействовано меньше контрактов, чтобы выдержать условие рисковать не более чем на 0,6% от общего капитала. Если расстояние от цены входа в позицию до начального StopLoss уменьшается – появляется возможность вводить в данной конкреной сделке больше количество контрактов.
Вроде постарался доступно написать – если трудно для восприятия – пиши – разберёмся…
Дмитрий, а почему при календарном арбитраже раздвига ближний-дальний ходит от нуля в обе стороны и в итоге почти сходится, а по фьючам бумаг не около нуля, а на разных уровнях: у кого -25, у кого – 170.
И я так понимаю, что по фьючам бумаг это значение может меняться и если задать параметры скажем покупать на -50 руб от среднего значения и продавать на +50руб, то через какое то время среднее может смещаться в какую либо сторону и среднее значение раздвиги ближний-дальний станет не -25 руб, а допустим -50руб, тогда надо опять подстраивать прогу. Тут встает вопрос: в какой момент надо начинать подстраивать и имеет ли смысл вообще торговать календарную раздвигу по бумагам?
Леонид самое главное и приятное свойство спреда, построенного на основании фьючерса и акции состоит в том, что в день экспирации спред неминуемо будет равен нулю. Поэтому есть возможность при отклонении от нуля в ту или иную сторону спокойно усредняться.
Если стратегия предполагает торговлю от “среднего спреда”, то наша программа позволяет установить, к примеру, усреднение за большой период, к примеру, за час и торговать от среднего. Естественно, со временем среднее значение может сдвигаться в ту или иную сторону. Как результат, часть сделок может быть закрыто и в минус также.
сходится к нулю: это касаемо арбитража спот и срочка, а если торгуешь календарный арбитраж?
Там гарантии схождения в ноль нет. Взять хотя бы RIH0-RIM0, там к дате экспирации спрэд вообще улетел. Так никакое усреднее не поможет: будет череда убыточных сделок, т.к. начнешь уредняца, а спрэд будет уходить дальше и дальше, в итоге на каком то этапе придется фиксить огромный лосс.
Леонд,а может так происходит всегда перед эспирацией и на этом можно заработать.Причина тому,что ближний фьюч. перед эспирацией уже никому не нужен,а дальний наоборот.Поэтому спред и улетел.Воэможно это и не так.Как думаете?
Я посмотрел несколько пар фьючей на Ри: у всех разные спрэды в течение торгуемого периода и разный спрэд на дату экспирации: может и в ноль выйти, а может и улететь тыщи а полторы.
Безусловные плюсы такой торговли конечно есть: торгвля внутри дня в последние дни перед экспирацией от средней. Но! По-любому нужен жесткий стоп на депо на случай резкого выброса от средней в одну сторону и последующее движение в эту сторону, т.к. в последние дни нет гарантии возврата к этой средней.
Леонид,мой е-mail: fi1@mail.ru Что бы не засорять нашей перепиской этот сайт,при желании пишите на почту.Готов поделиться своими наблюдениями.
Михаил, привет.
Наоборот, хорошо, что Вы здесь общаетесь. Мы же и задумывали блог как площадку для общения тех, кто заинтересован в торговле с применением стратегий парного трейдинга. Так что никаких проблем в этом нет.
Если хотите – вот ссылка на форум наш – там может быть будет более удобно сложные темы обсуждать… /forum/viewforum.php?f=31
Леонид,улететь-это куда?Если вверх-это хорошо.Если в ноль это ничего страшного.Но может ли упасть сильно спред дальний фьюч.-ближний фьюч.?Есть ли у вас такая статистика?По моим недолгим наблюдениям на эту тему упасть не должен.Понятно,я имею ввиду последний день перед эспирацией.
Дмитрий! Ссылка на Microsoft Visual C# 2008 (рус) не работает-где можно скач эту прогр?
Действительно, почему-то ссылка поменялась. Теперь эту ссылку можно вот здесь найти:
1) версия 2008: http://www.microsoft.com/express/Downloads/#Visual_Studio_2008_Express_Downloads
2) версия 2010: http://www.microsoft.com/express/Downloads/#Visual_Studio_2010_Express_Downloads
Кстати, по тексту тоже ссылку поправил.
А такой вопрос, можно ли в WealthLabe делать стратегии по нескольким инструментам, то есть используя данные по нескольким бумагам?
Определенно, да. Если не напрямую через Велс, то, потратив несколько минут времени, можно в том же Экселе построить спрэд по этим бумагам и работать в Велсе непосредственно с ним.
Меня интересует именно в Велсе в режиме реального времени, чтобы парные арбитражные стратегии за ротобизировать.
Сейчас они пока работаю в Метастоке, через dll Косинского, но постоянная запись в файл и считывание с него тормозят Metastock очень сильно, да и сам dll не стабилен.
Дмитрий, подскажите, а где в данной стратегии учтены проскальзывания о которых вы говорили в предваряющей статье.
При тестировании в Велсе настраиваются параметры комиссия и проскальзывание. Именно там и были установлены эти параметры.
Дмитрий!
У меня WL 5.4…
Ваша система нормально генерит сигналы на днёвках…
А при переходе на минуты-сигналов нет?? что не так делаю??
Снимаю вопрос…
Потому что ответа не дождались? или потому что сами разобрались?
Отчасти разобрался…
Но смущает что на истории около 9 мес т.ф. 5 мин -15 сделок…и результат далеко не лучший??
И ещё вопрос-есть платформа TSLab- системы для неё пишутся вроде на С#-но WLD 5.4 не “понимает” эти сист-??
Как проще адаптировать их под WL ??
здравствуйте можно ли данный код применить к Quikе и как это сделать.если можно подгоните его к квику,
спасибо заранее
Хотелось бы попробовать – как ведет этот код за прошедший с опубликования год – на текущий момент. Будет время – займусь и выложу результат в виде поста.
[...] В нашем блоге ранее уже был пост, посвященный тому, как делать торговые системы в Wealth Lab с помощью программирования на языке [...]
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 нет функционала работы с историческими данными, с графиками, с тестированием.
Она заточена больше на работу со стратегиями парного трейдинга.
Конечно, можно все это дописывать – но зачем это нужно, если уже есть хорошие программы, которые справляются с этим.
Именно поэтому и использую их.
Здравствуйте! Приобрел торгового робота “импульсная система Элдера” возможно с помощью программы Wealht Lab протестировать эту стратегию? заранее спасибо
[...] следующих постах я собираюсь выложить здесь код данной системы в WealthLab. А также рассказать, как можно полностью [...]