Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 660

 
Igor Makanu:

вот этот код работает, сделайте по аналогии:

Сделал минимальные изменения - убрал анализ OrderMagicNumber() и добавил три лога.
Результат, к сожалению, тотже - см. пр. - на первом скриншоте начало (непонятно почему начинает не с 0), а на втором место, где он пригает со 124 на 99.

int NumberOfOrders()
  {
   int i,res=0,k=OrdersTotal(); string sy=Symbol();
  
   for(i=0; i<k; i++)
     {
      log("k = " + k +"; ");
      log("i = " + i +"; ");
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==sy)) res++;  //if((OrderMagicNumber()==magic_) && (OrderSymbol()==sy)) res++;
         log("res = " + res +"; ");
        
        }
     }
   return(res);
  }

Файлы:
test_1.png  6 kb
test_2.png  6 kb
 
Alexey Viktorov:
Неужели этот код откомпилируется без ошибок??? НЕ верю...
А что вызывает сомнения? Во всяком случае в MQL4 ошибок не выдаёт.
 
Algotrader18:

 (непонятно почему начинает не с 0), а на втором место, где он пригает со 124 на 99.

потому, что терминал "съел" часть принтов(), в MQL вывод информации имеет наименьший приоритет, добавьте Slepp(123) перед Print() и не будет пропусков

хотя суда по логу, Вы печатаете просто счетчик цикла

 
Igor Makanu:

потому, что терминал "съел" часть принтов(), в MQL вывод информации имеет наименьший приоритет, добавьте Slepp(123) перед Print() и не будет пропусков

хотя суда по логу, Вы печатаете просто счетчик цикла

Это очень интересно - а можно чуть подробнее? Как происходит этот процесс "съедания"?

Из Вашего ответа у меня складывается впечатление, что "съел" - это просто не вывел в лог, т.к были более приорететные вещи, но моей реальной задачей было, перебирая все ордера, удалять определенные из них и я заметил, что советник пропускает некоторые (это уже не вывод информации с наименьшим приорететом). Чтобы понять причину я стал упрощать задачу и, в результате, остался только сам перебор и вывод в лог, но и здесь я вижу пропуск ордеров - т.е. советник перескакивает через несколько ордеров.  Наименьший приоритет вывода информации хорошо объясняет начало вывода не с 0, но как этим объяснить непоследовательный вывод, причем в случае, когда он прыгает, например, со 124 на 99.

Если же под "съел" понимается что-то другое, то хотелось бы понять что?
Файлы:
test_2.png  6 kb
 
neverness:

Это круто!

Роман!

Я  вот, например, успешный  трейдер с 20-летним стажем.

Я вот не пойму, зачем Вам нужна "разница между закрытиями введенных пар, и скользящая средняя по ним".

Более того, а скользящую среднюю по этим разницам Вы умеете строить? - Фантастика!

А просто скользящую среднюю по котировкам  строить умеете? - Тоже нет?

Так в чем проблема?

разница средних по close не равна средней по разнице close, увы и ах

 
Algotrader18:
А что вызывает сомнения? Во всяком случае в MQL4 ошибок не выдаёт.

1. Научись вставлять код.

Algotrader18:

Сделал минимальные изменения - убрал анализ OrderMagicNumber() и добавил три лога.
Результат, к сожалению, тотже - см. пр. - на первом скриншоте начало (непонятно почему начинает не с 0), а на втором место, где он пригает со 124 на 99.

int NumberOfOrders()
  {
   int i,res=0,k=OrdersTotal(); string sy=Symbol();
  
   for(i=0; i<k; i++)
     {
      log("k = " + k +"; ");
      log("i = " + i +"; ");
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==sy)) res++;  //if((OrderMagicNumber()==magic_) && (OrderSymbol()==sy)) res++;
         log("res = " + res +"; ");
        
        }
     }
   return(res);
  }

2. log это логарифм???

Примечание

Вместо функции MathLog() можно использовать функцию log().

MathLog - Математические функции - Справочник MQL4
MathLog - Математические функции - Справочник MQL4
  • docs.mql4.com
MathLog - Математические функции - Справочник MQL4
 
Roman Sharanov:

вот еще нашел серьезный недочет, очень много вызовов CopyClose()

Не подскажете, как можно в цикле скопировать из массива валютных пар их котировки?

Это получается двойной массив должен быть, а MQL такое не поддерживает, типа%

Что значит "двойной массив"?

 
Alexey Viktorov:

Что значит "двойной массив"?

ну двумерный

 
Roman Sharanov:

ну двумерный

А где написано что CopyClose копирует данные в двумерный массив? Вообще к чему был упомянут двумерный массив?

 
Alexey Viktorov:

А где написано что CopyClose копирует данные в двумерный массив? Вообще к чему был упомянут двумерный массив?

К тому что мне нужно в массиве хранить массивы котировок

Чтобы в цикле один раз выполнить копирование, и потом производить вычисления через ArrayCopy, а не CloseCopy

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