Это уже пятый пост из серии про основы программирования торговых систем на языке 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. Что-нибудь ещё придумаю. Примеры кусков кодов, разбор словаря с наиболее полезными функциями.
Профитов!
Взять Multicharts можно здесь: http://getanyplatform.com