Глюки индикатора в тестере

 

Потребовалось в индикаторе пройтись по открытым ордерам. Код традиционный. На демо работает нормально, в тестере в первом принте в OrderTicket() 

вместо значений 1,2,3...n выдает какую-то чушь, близкую к диапазону рыночных ордеров на счете, например 138759457 и другие подобные числа

bool CheckForNewOrder(string symbol, int &cmd)
{
    static int cmd1, ticket = -1;
    static string smb;
    static bool result;
    result = false;
    for(int n = OrdersTotal()-1; n >=0; n--)
        if(OrderSelect(n, SELECT_BY_POS, MODE_TRADES))
        {
            cmd1 = OrderType();
            smb = OrderSymbol();
            if(cmd1 < 2 && smb == symbol)
            {
                Print("ticket = ", ticket, "  OrderTicket() = ", OrderTicket());    
                if(OrderTicket() > ticket)
                {
                    ticket = OrderTicket();
                    cmd = cmd1;
                }    
            }
        }
    if(MaxTicket < ticket)
    {
        MaxTicket = ticket;
        result = true;
        Print("Новый ордер, ticket = ", ticket, "  cmd = ", cmd);
    }   
    return result;     
}
 

А вы не в курсе что индикатор в визуале берет данные из рыночного окружения, что ли ?

 
Привет! Извиняюсь за вопрос но хочу спросить, вот это выражение:
int &cmd

что значит & перед cmd? Я только в процессе изучения и уже много раз видел такое но не могу самостоятельно разобраться... Подскажите кому не лень

 
Maksim Neimerik:
Привет! Извиняюсь за вопрос но хочу спросить, вот это выражение:

что значит & перед cmd? Я только в процессе изучения и уже много раз видел такое но не могу самостоятельно разобраться... Подскажите кому не лень


Это значит, что переменная передается в функцию по ссылке, а не по значению. Фактически, передается ее адрес

void func1(int n)
{
   n++;
}

void func2(int& n)
{
   n++;
}

int nnn = 10;
func1(nnn); // nnn не изменилась, так как в функцию передалась ее копия
func2(nnn); // nnn равно 11, так как в функцию передалась ее ссылка
 

здесь : https://docs.mql4.com/ru/basis/function/parameterpass

Передача параметров - Функции - Основы языка - Справочник MQL4
Передача параметров - Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Передача параметров - Функции - Основы языка - Справочник MQL4
 
Rustamzhan Salidzhanov:

А вы не в курсе что индикатор в визуале берет данные из рыночного окружения, что ли ?


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

 
Alexey Volchanskiy:

Это значит, что переменная передается в функцию по ссылке, а не по значению. Фактически, передается ее адрес

Спасибо! Буду дальше учится, пока с трудом понимаю все это...
 
Alexey Volchanskiy:

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


   Ну как бы визуальный чарт и тестер это немного разные вещи. запросите Bid к примеру, будете приятно удивлены. А потом Close[0] ...

   Вызывайте из под iCustom и вот тогда получите то, что ожидаете

 
Rustamzhan Salidzhanov:

   Ну как бы визуальный чарт и тестер это немного разные вещи. запросите Bid к примеру, будете приятно удивлены. А потом Close[0] ...

   Вызывайте из под iCustom и вот тогда получите то, что ожидаете


При чем тут iCustom, мне надо было перебрать ордера в тестируемой стратегии, вместо этого сыпется чушь.

 
Alexey Volchanskiy:

При чем тут iCustom, мне надо было перебрать ордера в тестируемой стратегии, вместо этого сыпется чушь.


   Еще раз и сначала.

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

 
Rustamzhan Salidzhanov:

   Еще раз и сначала.

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


Теперь да. Тестер дрянь