Разработка расширений MQL для Windows посредством библиотек (dll) - страница 4

 
embezz писал (а) >>

Разве сейчас такая возможность отсутствует?

имелось ввиду управление процессом тестирования из ЭКСПЕРТА!

а не создание набора  вызовов - последовательно нажимащего кнопки

 ( или праралелной загрузки ЕЩЕ одной копии МЕТАТРЕЙДЕРА)

  хотя это решение тоже вполне продуктивно и описанно в статьях


---

т е 

  что бы при работе ЭКСПЕРТ мог  ( не прерывая свою работу - паралельно запустить тестирование - не прибегая к механизму нажатий кнопок )

1-запустить  тестер

2-остановить тестер

   ( остановить по условию - или достижению какой либо точки ) и т п в общем управлять процессом полноценно

3-получить доступ к таблице результатов ( не прибегая к извращениям с парсингом файлов  )

4-управлять интерфейссом т бишь - подавать на вход тестеру ИМЯ ЭКСПЕРТА и не обязательно себя - таймфрейм метод тестирования - оптимизацию и т д

 ---

управление через DLL - не позволяет к примеру использовать технологиию  на чемпионате ! 

Да и хотелось бы от разработчиков получить - инструментарий в виде функций

а не использовать "КОСТЫЛЬНЫЕ"  методы

если MT5 и MQL5  это будут позволять - откроются более широкие возможности

использования  ТЕСТЕРА ( написанного профессионалами )  - прямо из экспертов 

что позволит создавать более жизнеспособные ЭКСПЕРТЫ

 
YuraZ писал (а) >>

имелось ввиду управление процессом тестирования из ЭКСПЕРТА!

Юрий, вы, видимо, умеете читать мысли на расстоянии, я, увы, не умею.

Т.к. то что вы написали - это не "возможности обращения из него к внешним библиотекам (в том числе и к DLL)."

 
embezz писал (а) >>

Юрий, вы, видимо, умеете читать мысли на расстоянии, я, увы, не умею.

Т.к. то что вы написали - это не "возможности обращения из него к внешним библиотекам (в том числе и к DLL)."


я понимаю, что  к DLL отношения никакого не имеет!

это скорее  желание - иметь такой сервис внутри MQL5 + MT5

--

а Вы как предлагаете  из внешних-своих  DLL управлять тистированием ?

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

А как результаты на ходу считывать? например, что бы советник получив результат, мог прервать дальнейшее тестирование.

у Вас есть неплохой вариант,  как это реализуемо?

---

Мне не очень нравится вариант который описан в статье

Автоматическая оптимизация торгового робота в процессе реальной торговли

- напримеор,  из за отсутвия контроля самого тестирования,

например невозможно оборвать его, если получен тот или иной результат.

 
YuraZ писал (а) >>

...

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

__

Я в тему не сильно рвался, и предлагать ничего не хотел. Если надо, то вот мои 5 копеек:

Из своих длл остается только Windows API, т.к. API MetaTrader нам не видать...

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

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

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

 

 

Для Embezz и YuraZ.

Когда я писал на счет тестера и библиотек вот что имелось ввиду.

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

При тестировании обнаружилась вот такая непритная ситуация: При тестирвовании выполняется код который находится только в start() и полностью игнорируется все то что находится за его пределами. На мой взгляд это очень серьезный недостаток тестера и скажем так - "Достаточно большой косяк разработчиков тестера".

С библиотеками DLL еще сложней, они не вызываются из тестера даже если вызов ижет из основного рабочего цикла, я про start().

PS

Приходится тестировать советник кусками или псиать дублированный код для работы именно в режиме тестирования.

 
embezz писал (а) >>

Из своих длл остается только Windows API, т.к. API MetaTrader нам не видать...

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

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

PS

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

На счет остального API было бы совсем неплохо, если бы разработчики пошли хотябы по пути ФК и сделали вариант как я его называю «Не торгового API».

 
Interesting писал (а) >>

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

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

Хм, ничего не понял, можно по подробнее...

Interesting писал (а) >>

С библиотеками DLL еще сложней, они не вызываются из тестера даже если вызов ижет из основного рабочего цикла, я про start().

Возможно я не так понял, но у меня все нормально работает. Вот простейший пример.

DLL:

library TestDLL;
 
uses
  SysUtils;
 
{$R *.res}
 
 
function TestProc(AddStr: PChar): PChar; stdcall;
begin
  result:= PChar(AddStr+' '+DateTimeToStr(Now));
end;
 
exports
  TestProc;
 
begin
end.

Советник:

#property copyright "embezz"
#property link      ""
 
#import  "TestDLL.dll"
string TestProc(string AddStr);
#import
 
int init() {
   Print(TestProc("Init"));
   return(0);
}
 
int deinit() {
   Print(TestProc("Deinit"));
   return(0);
}
 
int start() {
   Print(TestProc("Start"));
   return(0);
}

Лог из тестера:

10:58:39 TestDLLv2 started for testing
10:58:39 2008.06.09 00:00 TestDLLv2 EURUSD,Daily: Init 15.09.2008 10:58:39
10:58:39 2008.06.09 00:00 TestDLLv2 EURUSD,Daily: Start 15.09.2008 10:58:39
10:58:39 2008.06.09 23:59 TestDLLv2 EURUSD,Daily: Start 15.09.2008 10:58:39
10:58:39 2008.06.09 23:59 TestDLLv2 EURUSD,Daily: Deinit 15.09.2008 10:58:39

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