07/11/2024

Торговая система; Turtle Soup; и её модификация; Turtle Soup Plus One.

 

Торговая система 'Turtle Soup' и её модификация 'Turtle Soup Plus One'

Авторы книги Street Smarts: High Probability Short-Term Trading Strategies Лоуренс Коннорс и Линда Рашке — пара успешных трейдеров, в активе которых в общей сложности 34 года трейдерской работы. Их богатый опыт включает торговлю на биржевых площадках, профильную работу в банках и хедж-фондах, в брокерских и консалтинговых фирмах. По их мнению, для стабильно прибыльной торговли вполне достаточно иметь в активе лишь одну торговую стратегию (ТС). Тем не менее, в книге приведено почти два десятка вариантов ТС, разбитых на четыре группы. Каждая группа относится к определённой фазе рыночных циклов и эксплуатирует один из устойчивых паттернов поведения цены.

Описанные в книге стратегии получили достаточно широкое распространение, но важно понимать, что авторы строили их исходя из поведения рынка 15..20-летней давности. Поэтому у этой статьи две цели — начнём мы с реализации на языке MQL5 первой из описанных Л.Рашке и Л.Коннорсом торговых стратегий, а затем попробуем оценить её эффективность с помощью тестера стратегий MT5. При этом будем использовать доступные через демо-сервер MetaQuotes исторические данные последних лет.

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

Для большинства программистов, которым будет интересна эта статья, актуальна задача освоения объектно-ориентированного программирования. Поэтому я попробую сделать работу над этим советником полезной и для решения этой задачи. Чтобы сделать переход от процедурного подхода к объектно-ориентированному более простым, мы не будем использовать самое сложное в ООП — классы. Зато будет широко использоваться их более простой аналог — структуры. Структуры, объединяя логически связанные данные разных типов и функции для работы с ними, обладают почти всеми присущими классам признаками, включая и наследование. Но для их использования не требуется знания правил оформления кода классов, можно обойтись минимумом дополнений к тому, к чему вы уже привыкли при процедурном программировании.

Торговая система ‘Turtle Soup’ и её модификация ‘Turtle Soup Plus One’

Торговая стратегия под названием «Черепаховый суп» (Turtle Soup) открывает набор стратегий из серии с лаконичным названием «Tests». Чтобы стало понятней, по какому признаку подобрана эта серия, озаглавить её стоило бы «Тестирование ценой границ диапазона или уровней поддержки/сопротивления». Turtle Soup строится на предположении, что цена не сможет пробить 20-дневный диапазон без отскока от границ этого диапазона. Из временного отката от границы либо из ложного пробоя нам и предстоит попытаться извлечь прибыль. Торговая позиция всегда будет направлена внутрь диапазона, а это даёт основание отнести ТС к категории «отбойных».

Кстати, схожесть названия «Turtle Soup» со знаменитой стратегией «Turtles» не случайна — обе отслеживают поведение цены у границ 20-дневного диапазона. По словам авторов книги, они некоторое время пытались использовать пару пробойных стратегий, включая «Turtles», однако обилие ложных пробоев и глубоких откатов делало такую торговлю неэффективной. Но зато выявленные паттерны помогли создать набор правил для извлечения прибыли из движения цены в направлении, противоположном пробою.

Полный набор правил ТС «Turtle Soup» для входа в сделку на покупку можно сформулировать так:

  1. Убедитесь, что со времени предыдущего 20-дневного минимума прошло не менее 3 торговых дней
  2. Дождитесь, когда цена инструмента упадёт ниже 20-дневного минимума
  3. Установите отложенный ордер на покупку на 5-10 пунктов выше только что пробитого вниз ценового минимума
  4. Сразу после срабатывания отложенного ордера установите его StopLoss на 1 пункт ниже минимума этого дня
  5. Используйте Трейлинг Стоп, когда позиция станет прибыльной
  6. Если позиция закрылась по стопу на первый или второй день, разрешён повторный вход на первоначальном уровне

Правила для входа в сделку на продажу аналогичны и применять их, как вы понимаете, надо к верхней границе диапазона — 20-дневному максимуму цен.

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

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

Модификация этой ТС, названная ‘Turtle Soup Plus One’, имеет лишь 2 отличия:

  1. Вместо выставления отложенного ордера сразу после пробоя 20-дневного диапазона, надо дождаться подтверждения сигнала — закрытия бара этого дня за пределами диапазона. Нас вполне устроит и ситуация, если день закроется точно на границе рассматриваемого горизонтального канала.
  2. Для определения уровня начального StopLoss используется соответствующий двухдневный экстремум (максимум или минимум) цены.

Определение параметров канала

Для проверки выполнения условий нам нужно знать максимальную и минимальную цены диапазона, а для их расчёта, в свою очередь, надо определить временные границы. Эти четыре переменные определяют канал на каждый конкретный момент времени, поэтому логично объединить их в одну общую структуру. Добавим в неё ещё две переменные, задействованные в ТС — количество дней (баров), прошедшее после достижения ценой максимума и минимума диапазона:

Все эти переменные будет своевременно обновлять функция с именем f_Set . Для этого ей нужно задать, начиная с какого бара следует строить виртуальный канал ( i_Newest_Bar_Shift ) и на какую глубину просматривать историю ( i_Bars_Limit ):

В этой функции всего 13 строк, но, если вы внимательно прочли справку по MQL-функциям извлечения данных из таймсерий (CopyHigh, CopyLow, CopyTime и др.), то знаете, что с ними не всё так просто. В ряде случаев функции возвращают не столько значений, сколько вы задали, потому что запрашиваемые данные могут быть не готовы при первом доступе к нужной таймсерии. Однако при правильной обработке результатов копирование данных из таймсерий работает так, как вы задумали.

Поэтому будем следовать хотя бы минимальным критериям качественного программирования и добавим в код простейшие обработчики ошибок. Чтобы проще было с ними разбираться, организуем печать в лог информации об ошибках. Логирование очень полезно и при отладке — это позволяет иметь подробную информацию о том, на основании чего робот принял то или иное решение. Поэтому введём новую переменную перечисляемого типа, которая будет определять насколько подробным должно быть логирование:

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

Однако, вернёмся к функции f_Set — со всеми проверками она приобретёт такой вид (выделены добавленные строки):

При выявлении ошибки поступаем просто: прерываем выполнение с расчётом на то, что к следующему тику терминал подгрузит достаточно исторических данных для нормальной работы функций копирования. А чтобы другие пользовательские функции не использовали канал до полноценного завершения процедуры, добавим в структуру соответствующий флаг b_Ready (true = данные подготовлены, false = процесс не завершён). Заодно добавим и флаг изменения параметров канала ( b_Updated ) — для оптимальной работы полезно знать, не изменились ли четыре задействованных в ТС параметра. Для этого придётся ввести ещё одну переменную — сигнатуру канала ( s_Signature ), своего рода слепок параметров. Саму функцию f_Set тоже поместим в структуру, и она (структура CHANNEL) примет окончательный вид:

Функция генерации сигналов

Сигнал на покупку по этой системе определяется всего по двум обязательным условиям:

1. После предыдущего 20-дневного минимума прошло не менее трёх торговых дней

2a. Цена инструмента упала ниже 20-дневного минимума (Turtle Soup)

2б. Дневной бар закрылся не выше 20-дневного минимума (Turtle Soup Plus One)

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

В модуле мы запрограммируем выявление сигналов по правилам обеих модификаций ТС (Turtle Soup и Turtle Soup Plus One), а в настройки советника добавим возможность выбора нужной версии правил. Соответствующую пользовательскую переменную назовём Strategy_Type . В списке стратегий пока будет всего два варианта, поэтому проще было бы обойтись выбором true/false (переменная типа bool). Но мы оставим себе возможность по окончании этого цикла статей свести все переведённые в код стратегии из книги в один советник, поэтому воспользуемся хоть и коротеньким, но нумерованным списком:

Функции выявления сигнала из основной программы нужно передать тип стратегии, т.е., дать знать, следует ли ждать закрытия бара (дня) — переменная b_Wait_For_Bar_Close типа bool. Вторая необходимая переменная — длительность паузы после предыдущего экстремума i_Extremum_Bars . Функция должна вернуть статус сигнала — сложились ли условия для покупки/продажи или пока следует ждать. Соответствующий нумерованный список тоже будет размещён в основном файле эксперта:

Ещё одна структура, которую будут использовать и сигнальный модуль, и функции основной программы — глобальный объект go_Tick , содержащий информацию о самом свежем тике. Это стандартная структура типа MqlTick, которая будет объявлена в основном файле, а её обновление мы позже запрограммируем в теле основной программы (в функции OnTick).

Теперь, наконец-то, можно переходить к самой главной функции модуля

Начнём с проверки выполнения условий для сигнала на продажу — прошло ли достаточное число дней (баров) со времени предыдущего максимума (первое условие) и пробила ли цена верхнюю границу диапазона (второе):

Проверка выполнения условий для сигнала на покупку выполняется аналогично:

Здесь использована переменная d_Actual_Price , которая содержит актуальную для данной версии ТС текущую цену. Для Turtle Soup это последняя известная цена bid, для Turtle Soup Plus One — цена закрытия предыдущего дня (бара):

Функция, включающая минимум необходимого, выглядит так:

Теперь вспомним о том, что объект-канал может оказаться не подготовлен к чтению из него данных (флаг go_Channel.b_Ready = false). Значит, следует добавить проверку этого флага. В этой функции мы тоже используем одну из штатных функций копирования данных из таймсерий (CopyClose), поэтому позаботимся об обработке возможной ошибки. И не забудем об облегчающем отладку логировании значимых данных:

Эта функция будет вызываться по каждому тику, а это сотни тысяч раз в сутки. Однако если первое условие (не меньше трёх дней от последнего экстремума) не выполнено, то вся эта работа после первой проверки становится бессмысленной. Правила хорошего стиля программирования требуют свести к минимуму расход ресурсов, поэтому научим функцию впадать в спячку до начала следующего бара (дня), т.е. до обновления параметров канала:

Это окончательный код функции. Файл сигнального модуля назовём Signal_Turtle_Soup.mqh , поместим в него код, относящийся к каналу и сигналам, а в начало файла добавим поля ввода пользовательских настроек стратегии:

Этот файл надо сохранить в каталог данных терминала — сигнальным библиотекам в нём отведена папка MQL5IncludeExpertSignal.

Базовый торговый советник для проверки ТС

Ближе к началу кода советника поместим поля пользовательских настроек, а перед ними — используемые в настройках списки перечисляемого типа enum. Поля настроек разделим на две группы — «Настройки стратегии» и «Открытие и сопровождение позиций». Настройки первой группы будут включены из сменного файла сигнальной библиотеки при компиляции. Пока мы создали один такой файл, но в последующих статьях будут формализованы и запрограммированы другие стратегии из книги и появится возможность заменять (или добавлять) сигнальные модули вместе с необходимыми им пользовательскими настройками.

Здесь же, в начале кода, подключим файл стандартной библиотеки MQL5 для совершения торговых операций:

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

Настройки трала вводятся в пунктах. С появлением пятизначных котировок появилась и некоторая путаница с этими единицами измерения, поэтому не помешает уточнить: один пункт соответствует минимальному изменению цены инструмента. Это значит, что при котировках с пятью знаками после запятой один пункт равен 0.00001, а при четырёхзначных котировках — 0.0001. Не следует путать пункты с пипсами — пипсы игнорируют реальную точность котировок, всегда переводя их в четырёхзначные. Т.е. если минимальное изменение цены инструмента (пункт) равен 0.00001, то один пипс равен 10 пунктам, а при цене пункта 0.0001 цены пипса и пункта совпадают.

При работе трала эти настройки используются на каждом тике, а пересчёт введённых пользователем пунктов в реальные цены инструмента, хоть и не отнимает существенных ресурсов процессора, но всё же производится сотни тысяч раз в сутки. Правильнее будет один раз пересчитать введённые пользователем значения при инициализации эксперта и сохранить их в глобальные переменные для последующего использования. Так же можно поступить и с переменными, которые будут задействованы при нормализации размера лота — ограничения сервера на максимальный и минимальный размер, а также шаг изменения остаются постоянными в течение всего времени работы робота, поэтому нет необходимости считывать их каждый раз заново. Объявление глобальных переменных и функция инициализации будут выглядеть так:

Надо отметить, что в стандартной библиотеке MQL5 есть модуль трала нужного нам типа (TrailingFixedPips.mqh) и его можно было бы включить в код так же, как мы это сделали с классом для совершения торговых операций. Но он не полностью соответствует особенностям этого конкретного советника, поэтому трал мы напишем сами и вставим в тело робота в формате самостоятельной пользовательской функции:

Здесь проверка допустимости размещения SL на рассчитанном уровне вынесена в отдельную функцию fb_Is_Acceptable_Distance , чтобы использовать её при валидации уровня установки отложенного ордера и при установке StopLoss открытой позиции.

Теперь перейдём к основной рабочей области в коде советника, которая вызывается функцией-обработчиком события поступления нового тика OnTick. Согласно правилам стратегии, при наличии открытой позиции новых сигналов искать не следует, поэтому начнём с соответствующей проверки. Если позиция существует, у робота будет два варианта действий: либо рассчитать и установить начальный StopLoss для новой позиции, либо активировать функцию трала, которая определит, есть ли необходимость перемещать StopLoss, и произведёт соответствующую операцию. С вызовом функции трала всё просто, а для расчёта уровня StopLoss будем использовать введённый пользователем и пересчитанный из пунктов в цену инструмента отступ от экстремума gd_Exit_Offset . Сам экстремум цены определим с помощью штатных функций MQL5 CopyHigh или CopyLow. Рассчитанные таким образом уровни надо будет проверить на валидность с помощью функции fb_Is_Acceptable_Distance и содержащегося в структуре go_Tick текущего значения цены. Эти расчёты и проверки для ордеров BuyStop и SellStop в коде будут разделены:

Кроме уже считанных новых параметров тика, в обновлении нуждаются и параметры канала — они используются при выявлении сигнала. Но вызывать ответственную за такое обновление функцию f_Set структуры go_Channel имеет смысл только после закрытия очередного бара, всё остальное время эти параметры неизменны. У робота есть и ещё одно действие, которое тоже привязано к началу нового дня (бара) — удаление ставшего неактуальным вчерашнего отложенного ордера. Запрограммируем эти два действия:

Использованная здесь функция fi_Get_Pending_Type возвращает тип отложенного ордера, а по полученной ссылке на переменную i_Order_Ticket помещает в неё номер тикета. Тип ордера позже будет нужен для сверки с актуальным на этом тике направлением сигнала, а тикет используется в том случае, если ордер придётся удалять. Если же отложенного ордера нет, оба значения будут равны WRONG_VALUE. Листинг этой функции:

Теперь всё готово к определению статуса сигнала. Если условия ТС не выполнены (сигнал примет статус ENTRY_NONE или ENTRY_UNKNOWN), работу основной программы на этом тике можно завершать:

Если сигнал есть, сравним с направлением существующего отложенного ордера, если тот уже установлен:

Теперь, когда сомнений в необходимости нового отложенного ордера не осталось, рассчитаем его параметры. Согласно правилам стратегии, ордер надо установить с отступом внутрь от границ канала. StopLoss должен быть размещён с противоположной стороны границы, рядом с экстремумом сегодняшней или двухдневной (в зависимости от выбранной разновидности стратегии) цены. Но вычислять положение StopLoss следует только после срабатывания отложенного ордера — код для этой операции приведён выше.

Актуальные границы канала прочтём из структуры go_Channel , а введённый пользователем и пересчитанный в цены инструмента отступ для входа содержится в переменной gd_Entry_Offset . Рассчитанный уровень надо будет проверить на валидность с помощью функции fb_Is_Acceptable_Distance и содержащегося в структуре go_Tick текущего значения цены. Эти расчёты и проверки для ордеров BuyStop и SellStop в коде будут разделены:

Если рассчитанный уровень установки отложенного ордера прошёл проверку, можно организовывать отправку нужного приказа на сервер с помощью класса стандартной библиотеки:

На этом программирование советника будет завершено, и после компиляции перейдём к анализу его работы в тестере стратегий.

Тестирование стратегии на исторических данных

В своей книге Коннорс и Рашке иллюстрируют стратегию графиками более чем двадцатилетней давности, поэтому основной целью тестирования была проверка её работоспособности на более современных данных. Использовались исходные параметры и дневной таймфрейм, указанные авторами. 20 лет назад пятизначные котировки не были распространены, а тестирование проводилось именно на пятизначных котировках демо-сервера MetaQuotes, поэтому оригинальные отступы в 1 и 10 пунктов были трансформированы в 10 и 100. Параметры трала в описании стратегии не упоминаются вообще, поэтому я использовал те, которые показались наиболее адекватными дневному таймфрейму.

График результатов тестирования стратегии Turtle Soup на USDJPY за последние пять лет:

Turtle Soup, USDJPY, D1, 5 лет

График результатов тестирования стратегии Turtle Soup Plus One с теми же параметрами и на том же участке истории того же инструмента:

Turtle Soup Plus One, USDJPY, D1, 5 лет

График результатов тестирования на котировках золота за последние пять лет. Стратегия Turtle Soup:

Turtle Soup, XAUUSD, D1, 5 лет

Turtle Soup Plus One:

Turtle Soup Plus One, XAUUSD, D1, 5 лет

График результатов тестирования на котировках нефти (crude oil) за последние четыре года. Стратегия Turtle Soup:

Turtle Soup, OIL, D1, 4 года

Turtle Soup Plus One:

Turtle Soup Plus One, OIL, D1, 4 года

Полные отчёты всех тестов есть в приложенных файлах.

Выводы предоставляю делать вам, но обязан дать необходимое пояснение. Коннорс и Рашке предостерегают от чисто механического следования правилам любой из приведённых в книге стратегий. Они считают обязательным анализ того, как именно цена подходит к границам канала и как ведёт себя после их тестирования. К сожалению, на этом они не останавливаются сколько-нибудь подробно. Что касается оптимизации — разумеется, можно попробовать адаптировать параметры к другим таймфреймам, выбрать наиболее соответствующие этой ТС инструменты и параметры.

Заключение

Мы формализовали и запрограммировали правила первой пары из описанных в книге Street Smarts: High Probability Short-Term Trading Strategies торговых стратегий — Turtle Soup и Turtle Soup Plus One. Советник и сигнальная библиотека содержат все описанные Рашке и Коннорс правила, но в них нет некоторых важных подробностей авторской торговли, которые упомянуты лишь вскользь. Несложно предположить, что следует, как минимум, учитывать гэпы и границы торговых сессий. Кроме этого, кажется логичным попробовать ограничить торговлю одним входом в день или одним прибыльным входом, держать отложенный ордер более чем до начала следующих суток. Этим вы можете и заняться, если появится желание усовершенствовать описанный здесь советник.

Высокоприбыльная торговая стратегия «Черепаший суп» — торгуйте на расслабоне!

Стратегия «Черепаший суп»

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

Подготовка к торговле «Черепаший суп»

Начать торговлю следует с установки на свою персоналку платформы MetaTrader4 и к ней шаблона торговой системы «Черепаший суп». Файл шаблона, который вы скачали, переносим в папку «templates» каталога МТ4, что после установки спрятался на диске «С» в программном каталоге ProgramFiles.

После этого, открываем МТ4, и через кнопку Шаблоны:

применяем шаблон «Черепаший суп», ставя для него таймфрейм М5:

Подготовка к торговле «Черепаший суп»

Далее открываем график котировок еще одного такого же торгового актива, а таймфрейм для него ставим М15 и тоже применяем к нему шаблон. Эти 2 окна нужно расположить рядом, создав себе, таким образом, площадку для теханализа:

«Черепаший суп»

Теперь расскажу вкратце о брокере Binomo. Эта брокерская компания была выбрана потому что она идеально подходит для торговли по данной системе, и кроме этого обладает рядом преимуществ:

  • Наличие минимального размера торговой позиции – от 1USD, при минимальном размере торгового счета – от 10USD.
  • Наличие отлично подобранного торгового инструментария (данная торговая система под него адаптирована)
  • Незапятнанная репутация в интернете
  • Максимально быстрый вывод средств – до 4 часов

Поэтому система вместе с брокером Биномо позволит вам быстренько вырастить ваш депозит до желаемых размеров!

Принцип торговли по системе

Когда заключать сделки ВВЕРХ:

  1. Наблюдаем за графиком котировок таймфрейма М15 и ждем, когда возникнет шестой по счету столбик гистограммы, после того, как индикатор MACD пересек нулевой уровень вверх
  2. Теперь наблюдаем за графиком котировок таймфрейма М5 и ждем чтобы индикатор Stoch пересек уровень 30
  3. Далее ждем закрытия ценовой свечи, где появились сигналы, и открытия новой, после чего входим сделкой ВВЕРХ:

«Черепаший суп» стратегия бинарных опционов

Когда заключать сделки ВНИЗ:

  1. Наблюдаем за графиком котировок таймфрейма М15 и ждем, когда возникнет шестой по счету столбик гистограммы, после того, как индикатор MACD пересек нулевой уровень вниз
  2. Теперь наблюдаем за графиком котировок таймфрейма М5 и ждем, чтобы индикатор Stoch пересек уровень 70
  3. Далее ждем закрытия ценовой свечи, где появились сигналы, и открытия новой, после чего входим сделкой ВНИЗ:

«Черепаший суп» стратегия торговли бинарных опционов

Поскольку в торговле по стратегии задействованы 2 таймфрейма (старший и младший) – у нас есть возможность торговать всегда по направлению к основному тренду, заключая сделки именно в момент его выхода из краткосрочной коррекции.

В целом прибыльность стратегии «Черепаший суп» достаточно высокая. Количество сделок, закрытых в убыток редко может превышать 30%. А это значит, что полученной прибыли вам вполне хватит для быстрого разгона депозита.

Опционы и экспирации

Опционы для трейдинга по данной системе используем компании Биномо, а срок экспирации выбираем для них 30 минут. Именно при таком времени экспирации стратегия показывает наиболее прибыльные результаты. Тем более что такой срок экспирации есть у брокера бинарных опционов Биномо.

Кроме всего, не забывайте так же правила манименеджмента:использовать в торговле не больше 2% своего депо. То есть с депозитом $50, размер сделки нужно ставить $1 (такое идеальное соотношение доступно в компании Binomo). Если у вашего брокера минимальный размер сделки больше 1-5USD – бегите от этого жулика – в такого брокера вам прибыли не видать.

Ну а такое интересное название стратегия получила благодаря спокойной торговле по ней, без напряжения мозгов. Поэтому вы сможете так же зарабатывать не напрягаясь!

Источник https://www.mql5.com/ru/articles/2717

Источник https://primeoption.ru/vysokopribylnaya-torgovaya-strategiya-cherepashij-sup-torgujte-na-rasslabone

Источник

Источник