Иван Коваль-Зайцев
Иван Коваль-Зайцев личный блог
28 ноября 2013, 13:27

Научитесь писать простую стратегию с нуля за 15 минут!

Это второй пост из серии про основы программирования торговых систем на языке Easy (power) language. На примере простой стратегии я расскажу, как написать условия для входа, выхода из позиции, как поставить стоп лосс и тэйк профит, как при этом выстроить код так, чтобы систему можно было оптимизировать.
 
Тем, кто не читал, советую первый пост – там про настройку программы Multicharts. Первые шаги, так сказать…
 
Easy Language дословно переводится «Лёгкий язык». Простота программирования на Изи заключается в его несложной структуре, в интуитивно понятных формах. В принципе, Редактору, встроенному в Multicharts, достаточно просто по-английский «сказать» то, что вы хотите сделать – и высока вероятность, что программа вас поймет и сделает именно то, что вы хотели.

 
Конечно, необходимо знать некоторые общие принципы и структуры.
 
Например, в конце каждой логически завершенной фразы нужно ставить точку с запятой;
 
Но, это я забегаю немного вперед…
 
Я думаю, что существует какая-нибудь официальная философия языка – подобно той, что есть у языка Python, например, но лично мне она не попадалась. Поэтому попробую взять некоторые высказывания из философии Python, которые, на мой взгляд, отлично подходят к Easy Language:
 
— Красивое лучше, чем уродливое.
— Явное лучше, чем неявное.
— Простое лучше, чем сложное.
— Сложное лучше, чем запутанное.
— Разреженное лучше, чем плотное.
— Читаемость имеет значение.
— При этом практичность важнее безупречности.
— Если реализацию сложно объяснить — идея плоха.
— Если реализацию легко объяснить — идея, возможно, хороша.
 
Когда вы пишете код на Изи, не пытайтесь впихнуть всю свою идею в одну строчку. Упрощайте!
 
Disclaimer: Понять основы программирования легче всего на примере. В этом посте я взял самое простое и самое первое, что пришло мне в голову. Это НЕ рабочая стратегия. Это просто идея, которая имеет право быть проверенной на исторических данных. Те параметры и значения, которые я использую в ней, даны просто для наглядного примера работы разных элементов структуры кода.
 
Я работаю больше всего с фьючерсом на индекс РТС, поэтому все примеры я писал, представляя себе именно его. Но всё это с легкостью переносится и на акции, и на валюты.
 
Итак, поговорим о сложности и простоте. Например, нужно продавать на растущем рынке, при условии, что растет он уже час, поставив стоп в размере 100 пунктов, а тэйкпрофит на 200 пунктов, не забывая о том, что рост меньше, чем на 200 пунктов – таковым не является, а покупать при этом нужно на падающем рынке, даже если сейчас открыта позиция шорт, естественно, с теми же условиями.
 
Если просто перевести эту фразу на английский язык и поставить в конце точку с запятой, ничего не получится. Нужно упрощать.
 
Допустим, под растущим рынком мы понимаем растущую часовую свечку. Это значит, что цена закрытия этой свечи будет выше, чем цена её открытия.
 
А условие, что рынок должен вырасти на 200 пунктов, как записать? По сути, это есть минимальная разница между ценой закрытия свечи и ее открытия.
 
Так и запишем:
 
Если закрытие больше открытия, и закрытие минус открытие больше 200 пунктов, то надо продавать немедленно.
 
Аналогично для лонга:
 
Если открытие больше закрытия, и открытие минус закрытие больше 200 пунктов, то надо покупать.
 
Для входа в позицию и выхода из нее, что называется, «по рынку» при историческом тестировании чаще всего используются выражения «по цене закрытия этого бара» или «по цене открытия следующего бара».
 
Кстати, все знают, что бары и свечки – это одно и тоже, просто разный стиль отрисовки?
 
Научитесь писать простую стратегию с нуля за 15 минут! 
 
Существует несколько способов установить Стоп Лосс для позиции, но самый простой и распространенный – это слово УстановитьСтопЛосс(в скобках значение в пунктах).
 
Аналогичные действия для тэйк профита — УстановитьПрибыльЦель(в скобках значение в пунктах).
 
Давайте, картинку нарисуем для нашей идеи, чтоб совсем просто было:
 
 Научитесь писать простую стратегию с нуля за 15 минут!
 
 
Итак, у нас есть всё, для того, чтобы код начал работать:
 
Если закрытие больше открытия, и закрытие минус открытие больше 200 пунктов, то надо продавать по цене открытия следующей свечи;
 
Если открытие больше закрытия, и открытие минус закрытие больше 200 пунктов, то надо покупать;
 
УстановитьСтопЛосс(100);
УстановитьПрибыльЦель(200);
 
Пора переводить на английский.
 
If close>open and close-open>200 then sell short next bar open;
If open>close and open-close>200 then buy next bar open;
SetStopLoss(100);
SetProfitTarget(200);
 
Важно: для того, чтобы закрыть длинную позицию используется просто слово sell. Но для того, чтобы инициировать новую короткую позицию, нужно добавить слово short, sell short.
 
Для открытия лонга используется обычное buy. Но если мы просто хотим закрыть шортовую позицию, не открывая при этом лонг, то нужно написать buy to cover.
 
В нашем примере стратегия либо закрывается по стопу или тэйку, либо «переворачивается» в обратную сторону, поэтому пока что отдельных фраз на закрытие позиций без открытия при этом новых нет, но позже я добавлю и такие.
 
Внимательный читатель заметил, что в этом коде есть как минимум 4 параметра, которые можно оптимизировать: размер сигнальной свечи для шорта, размер сигнальной свечи для лонга, размера стопа и размер тэйка.
 
Для того, чтобы Multicharts дал возможность вам автоматически совершить несколько «прогонов» стратегии на истории с разными параметрами, все эти числовые значения нужно заменить на буквенные переменные, предварительно рассказав программе, что мы под этим подразумеваем.
 
Есть такой раздел в структуре – называется Inputs. Это помните: в школе решали задачки и перед каждым решением писали в тетрадке «Дано: площадь=10м2, сторона А=5м»? Inputs так и переводится – вводные.
 
Так вот, после этого слова мы объявляем программе о переменных, которые будем использовать в коде. Все переменные, о которых мы напишем после слова Inputs, появятся затем в оптимизаторе стратегий.
 
Итак, введем 4 переменные. Минимум для лонга, минимум для шорта, SL – сокращенно от Stop Loss и TP – от Take Profit. В скобках нужно указать значение, которое программа должна использовать по умолчанию – на тот случай, если мы будем прогонять стратегию на истории без использования оптимизатора.
 
Inputs: MinForLong(200), MinForShort(200), SL(100), TP(200);
 
Заметьте, фраза не закончена, пока не поставлена точка с запятой. А после слова Inputs стоит двоеточие – важно!
 
Ну, вот и все, осталось заменить в коде числовые значения на наши буквенные переменные, и программа станет сама подставлять нужные значения в указанных местах.
 
И последнее, что я хотел бы добавить в этот замечательный уникальный код. Давайте запретим программе переносить позицию «через ночь». Для этого нужно закрыть все позиции на последней свечке торгов:
 
If time=2350 then sell this bar close;
If time=2350 then buy to cover this bar close;
 
Эти две фразы только закрывают позиции, не открывая при этом новых. Я об этом упоминал уже выше по тексту.
 
Вот и всё. Финальный код для Easy Language:
Inputs:
MinForLong(200),
MinForShort(200),
SL(100),
TP(200);
 
If close>open and close-open>MinForShort then sell short next bar open;
If open>close 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);
 
После написания кода не забудьте его «скомпилировать» — нажмите F3.
 
Как запустить тест стратегии на графике я уже рассказывал в предыдущем посте.
 
Как работать с оптимизатором – думаю, разберетесь. В любом случае, пару слов про него расскажу в следующем посте.
 
В качестве Домашнего задания подумайте сами, какой косяк допущен в этом коде? Их даже 2 при беглом осмотре. Внешне всё выглядит хорошо, но на рынке могут возникать такие ситуации, которые код не учитывает, и всё будет идти немножко не так, как мы предполагали… Если что, это я не про проскальзывание. О нем – в следующем посте!
 
Пост получился длинным, тем не менее, я, конечно же, не смог в нем рассмотреть все особенности и возможности языка Easy Language. Несмотря на своё название и простоту в использовании, на этом языке можно решить очень много различных задач, главное – правильно сформулировать.
 
Если уровень английского языка позволяет, советую почитать встроенный в Multicharts словарь формул и зарезервированных слов. Для этого войдите в PowerLanguage Editor и там выберите справа вкладку dictionary:
 
 Научитесь писать простую стратегию с нуля за 15 минут!
 
 
Ну и напоследок – график эквити за 2013 год с оптимальными значениями:) Просто так:)
 
 Научитесь писать простую стратегию с нуля за 15 минут!          
 
Это был второй пост из серии про Easy language и Multicharts. В следующем я расскажу об оптимизации, проскальзывании, коснусь ещё немного структуры кода. Самые основы. Наверное, уже на следующей неделе.
 
Тем, кто только что подключился, рассказываю. Серия постов:
 
  1. Установка и настройка программы Multicharts.
  2. Основы кодинга, структура кода.
  3. Основы оптимизации и практические примеры в Multicharts.
  4. Фишки кодинга, решение простых задач.
  5. Настройка программы Multicharts, часть 2, атака роботов.
  6. Что-нибудь ещё придумаю, если аудитория довольна останется. Примеры кусков кодов, разбор словаря с наиболее полезными функциями.
 
Профитов!
27 Комментариев
  • churinga
    28 ноября 2013, 13:48
    А на cme на мультичартсе будет бот робить?
  • Denis StrJ
    28 ноября 2013, 14:11
    Спасибо. Слежу)
  • anatolyutkin
    28 ноября 2013, 14:15
    Вот много где уже встречаю конструктив типа:
    If close>open and close-open>200…
    Вы же простоту пропагандируете. Почему бы не написать:
    If close-open>200...? Это то же самое.
  • Spekyl
    28 ноября 2013, 14:18
    Зачем все это варварство делать, если есть версия для .net?

    Там можно сложную стратегию за 15 минут написать.
    • Denis StrJ
      28 ноября 2013, 14:24
      Spekyl, программисту не сложно видимо на .net, но как писал автор это же изи ланглич для простых смертных;)
    • lama
      28 ноября 2013, 14:26
      Spekyl, Эта «сложная» стратегия пишется на Easy L. за 1 минуту. Функциональность та же. Смысл переплачивать временем?
      • Spekyl
        28 ноября 2013, 15:40
        Denoy.ru, разберешься с c# — и сможешь писать свои стратегии на чем угодно, хоть на экзеле или квике через внешнее приложение. А изи ленгвич это для обратной совместимости с тем барахлом, что уже за 10 лет понаписали для трейдстешн.
        Больше ни для чего не годится, по большом счету.
  • Denis StrJ
    28 ноября 2013, 14:21
    А как записать, если в определенное время требуется закрыть позицию имеющуюся if поза and time=2222 then close this bar типо)) хочу вникнуть, тут все же проще несложные вещи написать и протестировать как я погляжу)
      • Denis StrJ
        28 ноября 2013, 14:25
        Иван Коваль-Зайцев, Да, в 22:22 если есть открытая позиция — закрыть.
      • lama
        28 ноября 2013, 14:29
        Иван Коваль-Зайцев, Спасибо, что просвещаете народ. Хочу прояснить ситуацию (для того же народа :)), что выражение:
        If time=2350 then sell this bar close;
        If time=2350 then buy to cover this bar close;
        закроет сделку на первом (в идеале) тике следующей торговой сессии, а не вечером.
          • SergeyJu
            28 ноября 2013, 15:07
            Иван Коваль-Зайцев, поясните, график в пунктах или в долларах, а если в долларах, то сколько фьючей открывалось.
            И второй вопрос. Эта штука при наличии позиции может открыть еще или по умолчанию — нет.
              • SergeyJu
                28 ноября 2013, 15:41
                Иван Коваль-Зайцев, тогда результат на сделку очень маленький. Такой грааль может легко оказаться ловушкой. Хорошо бы сей факт выделить более выпукло.
                  • SergeyJu
                    28 ноября 2013, 15:56
                    Иван Коваль-Зайцев, вот!
      • lama
        28 ноября 2013, 14:32
        Иван Коваль-Зайцев, 2 min тоже сгодится :)
  • Exzotik404
    28 ноября 2013, 20:58
    тоже начинаю писать роботов, из всего списка прог выбрал именно мультичартс — мне нравится) жду продолжения)
  • _sg_
    28 ноября 2013, 23:19
    слышал, что есть проблемы при установке на 64-разрядные оси
  • Rustam_TheTrader
    29 ноября 2013, 03:06
    Спасибо)
  • Алекс Майер
    19 сентября 2016, 20:22
    >> Тем, кто не читал, советую первый пост – там про настройку программы Multicharts

    Извините за оффтопик, саму программу берите здесь: http://getanyplatform.com

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

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