Как получить доступ к сделкам тестера после окончания тестирования? - страница 3

 
sergeev:


просто как фишка и возможность. может кому пригодится

1. Это ex4 файл. например main.ex4

2. Это наш файл для работы.


Вау, класс! Работает?

Сдаётся мне, что вот так вот по простому далеко не всегда прокатит подменить Init(), // там всяка-разна инициализация неведомая может быть нужна

а вот Deinit() вроде как ничего и не мешает, а его-то как раз и нужно мучать.

И вапче, чего-то ты перемудрил с кодом. Вот такой вариант лучше, если конечно заработает:

#import "main.ex4"
        int init();
        int start();
#import
//------------------------------------------------------------------
int deinit()
{
        // обработали ордера истории
        for (int i=0; i<OrdersHistoryTotal(); i++)
        {
                OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
                //...
        }
        return(0);
}

Проверить надо.

 
MetaDriver:

Вау, класс! Работает?

да. проверил на демке. скрытая Do выполняется четко.

Сдаётся мне, что вот так вот по простому далеко не всегда прокатит подменить Init(), // там всяка-разна инициализация неведомая может быть нужна

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

а вот Deinit() вроде как ничего и не мешает, а его-то как раз и нужно мучать.

И вапче, чего-то ты перемудрил с кодом. Вот такой вариант лучше, если конечно заработает:

проблема в том, что если start отсутствует, то МЕ возмущается.
чтоб компенсировать организовать все-таки его запуск- надо внешний start вызвать в своём init. поэтому импорт чужого init наверно не даст требуемого эффекта. Хотя могу ошибаться, я попробую в понедельник на демке как только ипортный старт и инит сработает.

 

sergeev:

проблема в том, что если start отсутствует, то МЕ возмущается.

чтоб компенсировать организовать все-таки его запуск- надо внешний start вызвать в своём init. поэтому импорт чужого init наверно не даст требуемого эффекта. Хотя могу ошибаться, я попробую в понедельник на демке как только ипортный старт и инит сработает.

Добрался до MT4. Попробовал. Ничего не выйдет. Была слабая надежда на синтаксис типа

#import "HiddenExpert.ex4"
   int init();
   int start();
#import
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
  HiddenExpert.init();
}
.............

Не заработало, естестно. :)

Но если б даже заработало, проблема с передачей extern-параметров абсолютно неразрешима. Так что... тупичёкс. Хотя и занятный. :)

 

Вау, прикольно, не думал применять импорт в таком ракурсе.

Проблему со стартом и инитом и деинитом можно решить двойным импортом. Т.е. делаем библиотеку, туда импортим все функции и оболакиваем в функции с другими именами, которые в свою очередь импортим. Как-то так:

importLib.mq4

#import "main.ex4"
        int init();
        int start();
        int deinit();
#import

int ImportInit()
{
   init();
}

int ImportStart()
{
   start();
}

int ImportDeinit()
{
   deinit();
}
//////-------------------------------------------------------


expert.mq4

#import "ImportLib.ex4"
        int ImportInit();
        int ImportStart();
        int ImportDeinit();
#import

int init()
{
   ImportInit();
}

int start()
{
   ImportStart();
}

int deinit()
{
   ImportDeinit();
}
 
TheXpert:

Вау, прикольно, не думал применять импорт в таком ракурсе.

Проблему со стартом и инитом и деинитом можно решить двойным импортом. Т.е. делаем библиотеку, туда импортим все функции и оболакиваем в функции с другими именами, которые в свою очередь импортим. Как-то так:

importLib.mq4

expert.mq4

Этазачёт!!

А что делать с extern-параметрами дважды вложённого?

 

TheXpert:

Отлично. тема развивается. :)

не забудем поставить

#property library

в importLib.mq4 чтоб функции не выкинуло

 
MetaDriver:

А что делать с extern-параметрами дважды вложённого?

Не знаю, скорее всего ничего не сделаешь.
 
MetaDriver:

А что делать с extern-параметрами дважды вложённого?

как обычно должен быть вариант, на уровне ноухау :)

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

 
sergeev:

как обычно должен быть вариант, на уровне ноухау :)

Вряд ли. Именно в этом и есть прелесть библиотеки -- это самостоятельный закрытый набор функций.
 
TheXpert:
Не знаю, скорее всего ничего не сделаешь.

Я вот тоже так думаю. Вариант с декомпиляцией не рассматриваем, ибо не хорошо как-то...

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

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