Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXIII): Основной торговый класс - контроль допустимых параметров" - страница 2

 
Artyom Trishkin:

Что подразумевается под "состоянием эксперта"?

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

не важно какая ТС, но некая ТС с у которой ордера выставляются по не зависимому принципу, но момент включения второй ТС важен, т.е. мультиэксперт можно назвать, или 2 ТС в одном ЕА...

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




как и в Вашем большом эксперте, возможно возникнет необходимость сохранения данных, поэтому и спрашиваю будет или уже писали или не предусмотрены классы/функции для сохранения сложных форматов данных?

 
Artyom Trishkin:

библиотека может.

В истории торговли MT4 этой же информации нет.

 
fxsaber:

В истории торговли MT4 этой же информации нет.

Да, нет. Но есть (на данный момент) в списке событий. Он записывается на протяжении работы эксперта. И в нём всё доступно.

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

 
Igor Makanu:

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

не важно какая ТС, но некая ТС с у которой ордера выставляются по не зависимому принципу, но момент включения второй ТС важен, т.е. мультиэксперт можно назвать, или 2 ТС в одном ЕА...

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




как и в Вашем большом эксперте, возможно возникнет необходимость сохранения данных, поэтому и спрашиваю будет или уже писали или не предусмотрены классы/функции для сохранения сложных форматов данных?

Не очень понимаю честно говоря. Как библиотека может знать о логике ещё не созданного эксперта? Она же предназначена для облегчения создания программ для терминалов, и совершенно не в курсе какие программы при её помощи будут создаваться.

В то же время, если что-то сложно определить программно, то вполне вероятно, что с помощью библиотеки это будет сделать просто, и тогда будет возможность самому экспертописателю всё быстро проконтролировать.

Мне для большего понимания нужен не абстрактный пример.

 
Artyom Trishkin:

Не очень понимаю честно говоря. Как библиотека может знать о логике ещё не созданного эксперта? Она же предназначена для облегчения создания программ для терминалов, и совершенно не в курсе какие программы при её помощи будут создаваться.

В то же время, если что-то сложно определить программно, то вполне вероятно, что с помощью библиотеки это будет сделать просто, и тогда будет возможность самому экспертописателю всё быстро проконтролировать.

Мне для большего понимания нужен не абстрактный пример.

достаточно чтобы Вы реализовали:

Artyom Trishkin:

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

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

 
Igor Makanu:

достаточно чтобы Вы реализовали:

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

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

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

Но то, о чём писалось - что нужно понимать когда какая ТС первой вступила в торговлю - для этого не нужны такие сложности. Ведь библиотека видит всю историю терминала от пополнения счёта, и до настоящего времени. Для MetaTrader4 важно самостоятельно разрешить в терминале всю историю. Я не стал этого делать при помощи dll - планы предоставить возможные возможности (каламбурчик) штатными средствами, потому dll и не рассматривал, и не буду рассматривать.

Поэтому можно всегда быстро найти все сделки каждой ТС за любой промежуток времени и сравнить. Какая сделка первая - той ТС и тапки.

 
Igor Makanu:

MQL4 не хранит историю сработавших отложенных ордеров, в истории ордеров можно только определить:

Я проверял данный функционал библиотеки на mql4. История тут совсем не при делах, библиотека отлавливает сам факт активации отложенного ордера и в этот момент доступны все свойства открытой позиции.

 
Alexey Viktorov:

Я проверял данный функционал библиотеки на mql4. История тут совсем не при делах, библиотека отлавливает сам факт активации отложенного ордера и в этот момент доступны все свойства открытой позиции.

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

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

В CEngine есть метод GetListAllOrdersEvents(), который возвращает в управляющую программу полный список всех торговых событий, произошедших на счёте с момента запуска программы, работающей на основе библиотеки.

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

   //--- Получаем полный список всех торговых событий на счёте
   CArrayObj *list=engine.GetListAllOrdersEvents();
   //--- Оставляем в списке только события, принадлежащие эксперту (или ордерам) с магиком 100500
   list=CSelect::ByOrderProperty(list,ORDER_PROP_MAGIC,100500,EQUAL);

А затем в цикле по полученному списку можно получать поочерёдно все торговые события из списка и работать с ними.

   if(list!=NULL)
     {
      for(int i=0;i<list.Total();i++)
        {
         CEvent *event=list.At(i);
         if(event==NULL)
            continue;
         Print("----------------------");
         event.Print();
        }
     }
 
Artyom Trishkin:

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

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

В CEngine есть метод GetListAllOrdersEvents(), который возвращает в управляющую программу полный список всех торговых событий, произошедших на счёте с момента запуска программы, работающей на основе библиотеки.

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

А затем в цикле по полученному списку можно получать поочерёдно все торговые события из списка и работать с ними.

Я сказал только о том, что важно для меня на текущий момент. И что проверено. Спасибо за разъяснения, когда будет необходимость буду терзать тебя вопросами.

 
  Здравствуйте! Скачал последнюю версию библиотеки и Експерт Part_23, поставил на тестер визуальный режим и рыночные
ордера открываются, а все отложенные нет, в журнале пишет "2019.10.27 10:13:32.157 2019.09.23 10:00:02   failed sell stop limit 2.00 RTS-12.19 at 135750 (135800) sl: 135900 tp: 135600 [Invalid expiration].
Биржевые символы, брокер Открытие, version 5.00 build 2190.
  И еще.. В предыдущих статьях, по-моему в части 14 или 15 Вы обещали наряду с коллекцией символов создать и классы для работы
со стаканом, но так почему-то и не создали, а ведь это базовые потребности библиотеки наряду с символами и аккаунтами, а Вы ушли уже

далеко в улучшения библиотеки (ресурсы, звуки и т.д.) а базовые задачи, как я считаю, пропустили.

   Спасибо, библиотека очень нужная.

Причина обращения: