English 中文 Español Deutsch 日本語 Português
Конструктор трейдера: Drag Trade Library

Конструктор трейдера: Drag Trade Library

MetaTrader 4Примеры | 7 мая 2010, 06:19
7 061 14
TheXpert
TheXpert

Введение

На момент написания продукта уже существовало несколько продуктов, реализующих – в той или иной мере – функционал, представленный в библиотеке, или похожий на него. Не могу сказать, что библиотека лучше или хуже. Некоторым, например небезызвестному Автографу, она сильно проигрывает в функционале, другим в удобстве. Однако, у Drag Trade Library есть свои особенности, и надеюсь, продукт окажется востребованным.

1. Цели создания

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

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

2. Структура

Функционал библиотеки можно разбить на четыре блока:

  1. Торговый блок
  2. Информационный блок
  3. Блок работы с ордерами
  4. Блок настроек


Рис. 1. Функционал библиотеки

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

2.1. Принципы отключения/подключения блоков

Весь функционал по отрисовке и обработке блоков находится в советнике. Однако отрисовка информации и большинства управляющих и информационных объектов происходит не в главном окне инструмента. Место для отрисовки предоставляют псевдоиндикаторы, они же являются выключателями функционала. Это значит, что наличие соответствующего индикатора на графике означает, что соответствующий функционал советника включен и работает.

Сами индикаторы никакой смысловой нагрузки не несут. Предоставление места их единственная задача.

Рис 2. Вспомогательные индикаторы

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

3. Пользовательский интерфейс

3.1. Настройки советника

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

Сам процесс происходит применением соответствующего скрипта к нужному графику.

На данный момент есть 3 скрипта с настройками:

  • DragTrade_CommentsSettings.mq4 – настройки, относящиеся к комментариям (логи, отображаемые в подокне торговли).
  • DragTrade_ObjectsSettings.mq4 – настройки общего вида пользовательского интерфейса – вид управляющих и информационных объектов.
  • DragTrade_TradeSettings.mq4 – настройки торговли библиотеки.

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

Реализация этой особенности использует глобальные переменные терминала для хранения настроек. Это налагает некоторые ограничения на ее использование – таким образом нельзя передавать строки, т.к. максимальный размер передаваемой информации ограничен и равен размеру типа double, т.е. 8 байт.

Пример установки свойств советника можно посмотреть ниже. Для запущенного советника меняются настройки вывода комментариев и объектов:

Для того, чтобы можно было свободно проводить тестирование стратегии на тестере, не боясь сбить или поменять параметры для онлайн-торговли, передача параметров для онлайн режима и тест-режима различается. Установка свойств для одного не окажет влияния на другой.

Поэтому, если хочется поменять параметры по умолчанию в тестере, необходимо воспользоваться аналогичными скриптами для тест-режима:

  • DragTrade_TesterCommentsSettings.mq4 – настройки, относящиеся к комментариям (логи, отображаемые в подокне торговли).
  • DragTrade_TesterObjectsSettings.mq4 – настройки общего вида пользовательского интерфейса – вид управляющих и информационных объектов.
  • DragTrade_TesterTradeSettings.mq4 – настройки торговли библиотеки.
3.2. Функционал

Итак, интерфейс разбит на 3 независимые отключаемые области:

  • DragTrade_Infobar (Информационный блок)
  • DragTrade_OrdersBar (Блок работы с ордерами)
  • DragTrade_Toolbar (Торговый блок)

Целиком это выглядит так:


Рассмотрим более подробно каждый из них.

3.2.1. Информационная панель

Информационная панель является областью для отображения информации. Это наиболее простая часть функционала. Отображается как общая информация по счету и инструменту, так и текущие настройки библиотеки.

Рис 3. Информационная панель

Информация для отображения легко наращивается, правда, для этого придется править код библиотеки.

Для тех, кого это не пугает – функционал находится в функциях: void ClearInformation() и void DrawInformation()

3.2.2. Панель ордеров

На данной панели отображается информация по текущим (отрытым) ордерам инструмента, а также находятся элементы управления ими.

Рис 4. Панель ордеров

Что можно делать при подключении этой панели:

  • закрытие любого ордера из списка открытых для даной валютной пары (здесь и далее в соответствии с настройками магиков для оветника), включая пыночные и отложенные ордеры.
  • закрытие всех ордеров на покупку
  • закрытие всех ордеров на продажу
  • удаление всех отложенных ордеров
  • удаление и закрытие всех ордеров

В следующем видео наглядно представлен функционал данной панели:

3.2.3. Торговая панель

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

Рис 5. Торговая панель

Что можно делать при подключении этой панели:

  • Открытие и закрытие рыночных ордеров.
  • Открытие отложенных ордеров, как стоповых, так и лимитных. Т.к. я пока не придумал нормального способа выставления стоп-уровней для отложенных ордеров, на данный момент они отсутствуют и поставить их без помощи встроенных возможностей терминала (то бишь окна модификации ордера) не представляется возможным.
  • Удаление отложенных ордеров
  • Изменение стоп-уровней ордера.
  • Изменение цены срабатывания лимитных и стоп-ордеров.

Открытие рыночных ордеров происходит следующим образом:

  • ценовым указателем на графике необходимо установить цену стоп-лосса будущего ордера.
  • необходимо совместить управляющие объекты для "Open Market Order" ("Открыть рыночный ордер")

Закрытие рыночного ордера происходит простым перетягиванием любого из стоп-уровней по другую сторону цены.

На видео ниже показаны примеры работы с рыночными ордерами

Работа с ордерами на покупку:




Работа с ордерами на продажу:




Открытие отложенных ордеров происходит так:

  • ценовым указателем на графике необходимо установить цену срабатывания будущего ордера.
  • необходимо совместить управляющие объекты для "Open Stop Order" ("Открыть стоп-ордер"), если Вы хотите открыть ордер на пробой или для "Open Limit Order" ("Открыть лимитный ордер"), если Вы хотите открыть ордер на отскок.

Закрытие рыночного ордера происходит простым перетягиванием линии ордера по другую сторону цены.

На видео ниже показаны примеры работы с отложенными ордерами.

Работа со стоп-ордерами:




Работа с лимитными ордерами:



4. Встраивание в советник

Наконец, самое интересное.

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

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

//+------------------------------------------------------------------+
//|                                      DragTrade_Example_v_1.0.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, TheXpert"
#property link      "theforexpert@gmail.com"

extern int      Magic          = 1111;
extern int      EAMagic        = 1234;
extern int      TimesToRepeat  = 3;
extern int      Slippage       = 3;

#include <DragTrade_v_1.0/DragTradeLib_v_1.0.mqh>

bool Testing;

int init()
{
   Testing = IsTesting();
   DragTrade_Init(Magic, EAMagic, TimesToRepeat, Slippage, "Drag Trade Example");

   Comment_("Test Example of using Drag Trade Library");

   return(0);
}

int deinit()
{
   DragTrade_Deinit();
   return(0);
}

int start()
{
   DragTrade_Start();
   
   return(0);
}

Данный код можно использовать как готовый советник для торговли мышкой.

В данном приведенном выше коде обработка событий будет по пришествии нового тика.

Основные моменты добавления библиотеки:

  • Функции init и deinit в советнике необходимы и обязательны
  • Включить заголовочный файл библиотеки DragTradeLib_v_1.mqh и убедиться в наличии компонентов библиотеки на соответствующих им местах.
  • В соответствующих функциях советника необходимо вызвать функции библиотеки:
  1. DragTrade_Init
  2. DragTrade_Deinit
  3. DragTrade_Start

Функция DragTrade_Init имеет следующий вид:

   void DragTrade_Init(int magic, int eaMagic, int timesToRepeat, int slippage, string ordersComment = "");

Остановимся подробнее на передаваемых параметрах:

  • int magic – магический номер, используемый библиотекой. Именно с ним будут ордера, открытые с помощью библиотеки. Если передаваемое значение равно -1, открываемые сделки откроются с магиком 0, и при отображении фильтрация по магику не осуществляется.
  • int eaMagic – магический номер стратегии. Введен для того, чтобы релизуемая стратегия не путала ордера, открытые автоматически и руками. Если хочется, чтобы стратегия «видела» эти ордера, можно задать одинаковые магики или реализовать учет двух разных магиков. Если значение равно -1, дополнительный магик не используется.
  • int timesToRepeat – торговая настройка. Количество попыток открытия сделки, если причина ошибки позволяет повторить попытку незамедлительно.
  • int slippage – торговая настройка. Проскальзывание.
  • string ordersComment – комментарий для ордеров, открытых с помощью библиотеки.

Если хочется быстрого исполнения команд, функцию start советника можно зациклить:

int start()
{
   while (!IsStopped())
   {
      DragTrade_Start();
      Sleep(200);
   }
   return(0);
}

Однако такой советник нельзя будет протестировать в тестере -- он зависнет.

Выходом будет предусмотреть различное поведение для тестера:

int start()
{
   if (Testing)
   {
      DragTrade_Start();
   }
   else
   {
      while (!IsStopped())
      {
         RefreshRates();
         
         DragTrade_Start();
         Sleep(200);
      }
   }
   
   return(0);
}

Именно такой простейший советник идет в стандартной поставке, приложенной к статье.

Кроме того, в ней имеется стандартный советник MACD Sample, к которому приделана библиотека, а также используются библиотечные торговые функции.

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

5. Установка библиотеки

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

6. Лицензия

/* =============================================================================================== */
/* Copyright (c) 2010 Труханович Андрей Николаевич (aka TheXpert)                                  */
/*                                                                                                 */
/* Данная лицензия разрешает, безвозмездно, лицам, получившим копию данного программного           */
/* обеспечения и сопутствующей документации (в дальнейшем именуемыми "Программное Обеспечение"),   */
/* использовать Программное Обеспечение без ограничений, включая неограниченное право на           */
/* использование, копирование, изменение, добавление, публикацию, распространение,                 */
/* сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам,              */
/* которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:       */
/*                                                                                                 */
/*                                                                                                 */
/* Вышеупомянутый копирайт и данные условия должны быть включены во все копии или значимые         */
/* части данного Программного Обеспечения.                                                         */
/*                                                                                                 */
/* ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ ЛЮБОГО ВИДА ГАРАНТИЙ, ЯВНО       */
/* ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ,   */
/* СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И НЕНАРУШЕНИЯ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ     */
/* ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ       */
/* ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ    */
/* СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ      */
/* ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.                                                          */
/* =============================================================================================== */

Заключение

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

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

Кода довольно много, поэтому скорее всего остались мелкие ошибки и недочеты. Буду очень признателен, если Вы будете сообщать о них.

Посильное (не гарантированное) сопровождение кода я постараюсь обеспечить. Я только "ЗА" развитие проекта другими людьми при соблюдении условий лицензии. Замечания и пожелания по работе библиотеки постараюсь учесть в следующих версиях.

Удачи Вам и легкой торговли!
Прикрепленные файлы |
Последние комментарии | Перейти к обсуждению на форуме трейдеров (14)
alex196187
alex196187 | 15 дек. 2010 в 00:16
Идея хорошая, но вот если можно нывести все блоки (не в отбельных окнах) а на график, и раставить все элементы по своему усмотрению, как удобно для каждого. Было бы идеал.
TheXpert
TheXpert | 21 янв. 2011 в 12:49
alex196187:
Идея хорошая, но вот если можно нывести все блоки (не в отбельных окнах) а на график, и раставить все элементы по своему усмотрению, как удобно для каждого. Было бы идеал.

Такая идея рассматривалась. Но я был вынужден от нее отказаться по нескольким причинам.

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

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

Причина третья -- отсутствие графического блока управления блоками, упомянутого выше. Он не только жрал бы ресурсы постоянно, он еще нетривиален в исполнении к тому же.

Другое дело MT5, но это и разговор другой.

lasso:

Допустим я тестирую в визуальном режиме, "по ценам открытия", на М15, и хочу открыть позицию "с рынка". В результате позиция открывается по цене открытия следующего бара, а это уже совсем другая цена.... ((

Есть ли какие-нибудь варианты сделать что-то наподобие эмуляции тика?

Я в принципе для себя нашел выход из ситуации. Но может быть есть более элегантное решение?

Если Вы нашли выход, поделитесь, потому что я не вижу возможностей для решения этой проблемы.
Juri
Juri | 15 июл. 2011 в 17:36

Уважаемые, кто подскажет. Все распокавал, разнес по папкам. Сделал комплит, дает ошибку: 'DragTrade_v_1.0/DragTradeLib_v_1.0.mqh' - cannot open the program file C:\Program Files\FxPro - MetaTrader\experts\DragTrade_Example_v_1.0.mq4 (12, 1)
Такая же история с Drag MACD Sample: 'DragTrade_v_1.0/DragTradeLib_v_1.0.mqh' - cannot open the program file C:\Program Files\FxPro - MetaTrader\experts\DragTrade MACD Sample.mq4 (48, 1)
Несколько раз проверил файлы в папках, на месте ли они. В одном месте только не знал, что делать. Когдая открыл папку Include, дальше была сразу следующая папка: DragTrade_v_1/0 По логике вещей необходимо и мне создать новую папку с тем же наименованием и поместить файлы в нее. Но создать повую папку с таким названием программа не разрешила, поэтому 9 файлов поместил прямо в папку Include. Но там еще есть папка с названием DragTrade properties. Я открыл эту папку и продолжил размещать файлы за предыдущими 9 файлами в папке Include.

Где ошибка, что необходимо сделать?

TheXpert
TheXpert | 18 июл. 2011 в 12:45
Narajana:

Где ошибка, что необходимо сделать?

Разносить по папкам ничего не надо. В архиве все файлы уже разнесены, все, что вам необходимо сделать, распаковать архив в папку терминала и скомпилировать.

Если проблема не решится, пишите мне в личку.

Vitali Lebianok
Vitali Lebianok | 1 июл. 2016 в 19:13

Искал как создать подобную консоль и наткнулся на ваш материал, очень понравился, но у меня немножко другие устовия.

Есть идея, поясните как правильно реализовать.

 

Задача. Красивая торговая консоль, хорошо функционирующая.
Нужно в мт4 сделать маленькую рабочую панель с кнопками, макросами, заточенная под сеточную торговлю , суть которой все сделки по сетке будут открываться в одно направление.
(всего на графике будет 22 активных кнопок в маленькой панельке вверху) 10 кнопок под каждую сделку. 1я кнопка открывает 1й ордер с условиями скрытый тейк(скрипт чтоб брокер не видел), 2я кнопка открывает скрытую отложку (также скрипт чтоб брокер не видел) от 1й по условиям на определенное количество пунктов, а также устанавливает на ней скрытый тейк, и так далее на все 10 кнопок. Все кнопки расположить по горизонтали, под каждой кнопкой ,сделать кнопку чтоб закрыть этот ордер, 21я закрывает все ордера, и последняя кнопка 22я меняет направление для открытия сделок вверх или вниз. В итоге у нас получается 10 столбцов по горизонтали, в столбце 2 кнопки ,и одна кнопка которая закрывает все ордера. Также под каждым столбцом указывать сумму сколько данный ордер приносит прибыли либо убытка. Также итоговый Тотал по всем 10 ордерам.

Переход с MQL4 на MQL5 Переход с MQL4 на MQL5
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
MetaTrader 5: Публикация торговых прогнозов и отчетов реальной торговли по e-mail в блогах, социальных сетях и специализированных сайтах MetaTrader 5: Публикация торговых прогнозов и отчетов реальной торговли по e-mail в блогах, социальных сетях и специализированных сайтах
Цель данной статьи - представить готовые решения для публикации прогнозов с использованием MetaTrader 5. Рассмотрен ряд идей: от использования специализированных сайтов для публикации торговых отчетов до создания своего собственного блога и финальной интеграции с социальными микроблогами, которые позволяют объединить множество трейдеров, использующих прогнозы. Все представленные здесь решения на 100% бесплатные и могут быть использованы всеми, кто знаком с базовыми понятиями почтовых и ftp-сервисов. Данные методы могут быть легко использованы и в коммерческих сервисах по предоставлению торговых прогнозов.
Virtual Order Manager для управления ордерами в позициях терминала MetaTrader 5 Virtual Order Manager для управления ордерами в позициях терминала MetaTrader 5
Эта библиотека классов может быть добавлена в советники, написанные для MetaTrader 5, чтобы они могли работать с ордерами в рамках подхода, реализованного в MetaTrader 4, а не в рамках позиционно-ориентированного подхода платформы MetaTrader 5. Это достигается путем отслеживания "виртуальных" ордеров в терминале MetaTrader 5, поддержки стопов, невидимых для брокера, и установкой дальних защитных реальных стопов на торговом сервере.
Использование WinInet.dll для обмена данными между терминалами через Интернет Использование WinInet.dll для обмена данными между терминалами через Интернет
В статье рассматриваются принципы работы с Интернет посредством HTTP запросов и обмен данными между терминалами с использованием промежуточного сервера. Представлен библиотечный класс MqlNet для работы с ресурсами Интернет в среде MQL5. Мониторинг цен от разных брокеров, обмен сообщениями с другими трейдерами не выходя из терминала, поиск информации в Интернете - вот только некоторые примеры, рассматриваемые в этой статье.