Иван Коваль-Зайцев
Иван Коваль-Зайцев личный блог
18 декабря 2013, 15:20

Мощный инструмент в системостроительстве! Пост пятый.

Это уже пятый пост из серии про основы программирования торговых систем на языке Easy (power) language. Сегодня я расскажу о крутой штуке, которая называется Variables. Обожаю их! А ещё будет пара слов об устройстве конструкции кода. Тоже интересный и немаловажный момент!
 
Итак, Динамические переменные. С тех пор как было принято решение делать платный курс по языку, я стал пытаться оставлять самые «сладкие» темы для его слушателей. Недаром из перечня будущих постов ушел пункт про «фишки кодинга». Моё ноу-хау стоит того, чтобы транслироваться ограниченной аудитории.
 
Если Вас интересуют подробности обучения – напишите мне в личку или на электронную почту ttradesystems сбк gmail.com.
 
И эта тема про Variables – она такая, что с одной стороны хочется её оставить для платной части банкета. Но с другой – это очень важная составляющая практически любой системы, важная часть структуры кода. И это очень мощный инструмент. А я обещал «делиться так, что вы сможете, приложив усилия, самостоятельно освоить язык». Ну, раз обещал…

 
Мы уже успели рассмотреть тему с переменными Inputs – наше «Дано», которое задается один раз перед каждым «прогоном» системы на истории.
 
Но есть ещё один тип переменных – Variables (Variable, Var, Vars).
 
Это такие переменные, которые в течение одного прогона стратегии могут меняться. Такие переменные, которые рассчитываются «в реальном времени» в соответствии с условиями рынка по заранее заданным параметрам.
 
Для примера вспомним всё ту же нашу старую, как мы уже выяснили нерабочую систему. (я взял вариант, который неплохо работает в 2013 году, если не учитывать проскальзывание, тот, который мы ещё на часовиках тестировали. На нем проще всего показать.)
 
Inputs:
MinForLong(200),
MinForShort(200),
SL(400),
TP(250);
 
If time<>2350 and close-open>MinForShort then sell short next bar open;
If time<>2350 and open-close>MinForLong then buy next bar open;
 
If time=2350 then sell this bar close;
If time=2350 then buy to cover this bar close;
 
SetStopLoss(SL);
SetProfitTarget(TP);
 
До сих пор мы использовали стоп-лосс и тэйк-профит в виде заранее заданной величины в пунктах.
 
А что, если мы попробуем ставить этот стоп на уровень хай сигнальной свечи для шорта и на уровень лоу сигнальной свечи для лонга? А тэйк-профит на противоположный экстремум, ага! Картинка для иллюстрации нашего желания:
 
 Мощный инструмент в системостроительстве! Пост пятый.
 
Но как это сделать, если у каждой сигнальной свечки свой уровень хай и лоу? На помощь приходят Variables.
 
Переменные SL и TP мы перенесем из обычных Inputs в новый раздел. И расскажем программе: как и в какой момент их надо рассчитать.
 
Variables:
SL(400),
TP(250);       
 
В какой момент – понятно: как только сигнальная свечка появляется, нам нужны уровни стоп и тэйк для новой позиции.
 
Теперь вопрос – как? В позицию мы входим по цене открытия следующей свечи. Это ровно то же самое, что и цена закрытия этой свечи – может, на 10 пунктов отличается, это сейчас не важно. Если перед нами сигнальная свеча для шорта – то есть растущая свеча – как узнать, какое расстояние будет от входа в позицию до хая этой свечи? Просто нужно вычесть из значения High уровень Close.
 
Для сигнальной лонговой свечи от Close отнимаем Low.
 
В обоих случаях мы получим значение в пунктах от уровня входа в текущую позицию до уровня стоп-лосса, которое потом можно попросить Мультичартс подставить в SetStopLoss(значение в пунктах).
 
Аналогично делаем и для уровня тэйк-профит.
 
Итак, для растущей свечи (шортовый сигнал):
SL=High-Close;
TP=Close-Low;
 
Для падающей свечи (лонговый сигнал):
 
SL=Close-Low;
TP=High-Close;
 
Теперь нужно сказать программе, чтобы она считала это в момент, когда появляется сигнальная свеча.
 
Чтобы не писать каждый раз заново условия сигнальной свечи (а нам нужно по три раза для каждой сигнальной свечи: 1. если сигнальная свеча – то рассчитай нам SL, 2. если сигнальная свеча, то рассчитай нам TP и 3. если сигнальная свеча, то войди в позицию), так вот, чтобы не городить огороды в Power Language есть возможность один раз назвать условия, при которых нужно совершить несколько действий.
 
До сих пор мы использовали конструкция If…then…;
 
А теперь будем пользоваться новой If…then begin 1; 2; 3; end;
 
После слова begin никаких знаков препинаний не нужно. После каждого нового действия, которое выполняется при данном условии, нужно поставить точку с запятой. В конце всего нужно написать end;
 
Код для шортовой части:
 
If time<>2350 and close>open and close-open>MinForShort then begin
SL=High-Close;
TP=Close-Low;
sell short next bar open;
end;
 
Ну вот и всё. Про переменные рассказал, про новую конструкцию кода тоже.
 
На самом деле, эти Variables позволяют выполнять очень много разных действий в стратегии – «запоминать» величины, значения, включать/выключать куски кода при определенных условия, считать события по порядку… Да много всего. Обо всем писать здесь не буду. Но ограниченной группе лиц расскажу все моменты, которые я использую при написании новой стратегии.
 
Финальный код:
 
Inputs:
MinForLong(200),
MinForShort(200);
vars:
SL(400),
TP(250);
 
If time<>2350 and close-open>MinForShort then begin
SL=High-Close;
TP=Close-Low;
sell short next bar open;
end;
 
If time<>2350 and open-close>MinForLong then begin
SL=Close-Low;
TP=High-Close;
buy next bar open;
end;
 
If time=2350 then begin
sell this bar close;
buy to cover this bar close;
end;
 
SetStopLoss(SL);
SetProfitTarget(TP);
 
Перфоманс ухудшился, но цели улучшить стратегии и не стояло. Цель была – узнать про возможности языка и начать использовать их для заработка огромных денег на бирже!:)
 
Кстати, в этом коде допущена грубая ошибка. Её найти – ваше домашнее задание:) Это одна из важных частей курса – разбор типовых (и не очень) ошибок. Некоторые из них могут стоить вам денег или же заставить выкинуть в мусорное ведро хорошую систему, которая из-за неточностей в коде покажет слабый результат.
 
Напоминаю Вам, что всё ещё действует предложение, о котором я говорил в понедельничном посте.
 
Для тех, кто только что подключился, рассказываю. Серия постов:
 
1. Установка и настройка программы Multicharts.
2. Основы кодинга, структура кода.
3. Исправление ошибок. Дата и время. Проскальзывание.
4. Основы оптимизации и практические примеры в Multicharts.
5. Динамические переменные.
6. Использование нескольких таймфреймов одновременно.
7. Настройка программы Multicharts, часть 2, атака роботов.
8. Что-нибудь ещё придумаю. Примеры кусков кодов, разбор словаря с наиболее полезными функциями.
 
Профитов!
 
4 Комментария

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

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