Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1418

 
lynxntech #:

посмотрите в справке 

и подобные функции

если не работает, в цикле ошибка

да и не видно в какую переменную добавляете данные

Higest / Lowest по идее должен показывать. 

Посмотрел  вот это :

int val_index=iLowest(NULL,0,MODE_CLOSE,10,1);

Очень близко но пока не то. 

Ну показывает из 10 последних (начиная с первой "1"  НОМЕР свечи с самым лоем. Но нужно значение цены, а не номер свечи.

 

Да нужно вообще чтобы не назад "смотрел", а вперёд.

Допустим:  поиск "минимума" от начала предыдыущей свечи (которая под номером "1") на протяжении последующих 100 свечей.

 
lynxntech #:

это все можно сделать, вопрос был к тем кто замерил реально работу, и лучше к разработчикам, кто знает что у них там в планах

экспериментировать не хочется, есть много других задач.

Правильно. Не царское дело в ………

 
Alexey Viktorov #:

Правильно. Не царское дело в ………

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

интересовал профессиональный ответ, что-бы иметь представление как работает платформа.

 
Alexey Belyakov #:

Всем добрый вечер уважаемые программисты!

Помогите решить простую задачу. Есть код от MQL4 . Хочу его адаптировать под 5-рку. То есть чтобы аналогично работал на MQL5.




Мой вариант явно не проходит, почему-то много ошибок): 

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

Но тем не менее… попробуйте разобраться с функцией 

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   int              start_pos,        // откуда начнем 
   int              count,            // сколько копируем
   double           high_array[]      // массив для копирования максимальных цен
   );

и функцией работы с массивами

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );

Есть и другие варианты решения этой задачи.

 
Alexey Belyakov #:

Всем добрый вечер уважаемые программисты!

Помогите решить простую задачу. Есть код от MQL4 . Хочу его адаптировать под 5-рку. То есть чтобы аналогично работал на MQL5.




Мой вариант явно не проходит, почему-то много ошибок): 

CopyRates() вместо пачки индикаторов и правки кода станут минимальными, код останется компактным и читаемым.

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=DBL_MIN;// 
   double Lowest=DBL_MAX; // 
   MqlRates rates[];
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   if (CopyRates(_Symbol,_Period,30,rates)!=30) {
      Alert("copyRates failed");
      return;
   }
   for(int i=0; i<=Window; i++) {
      if(rates[i].low<Lowest) Lowest=rates[i].low;
      if(rates[i].high>Highest) Highest=rates[i].high;  
   }
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}

в реальности надо ещё добавлять проверку на кривые котировки

 
Maxim Kuznetsov #:

CopyRates() вместо пачки индикаторов и правки кода станут минимальными, код останется компактным и читаемым.

в реальности надо ещё добавлять проверку на кривые котировки

Максим, разве CopyRates не представлен в качестве получать все возможности символа?

дешевле есть индивидуальные функции

 
lynxntech #:

Максим, разве CopyRates не представлен в качестве получать все возможности символа?

дешевле есть индивидуальные функции

там 1) со слов разработчиков виртуальное копирование, то есть по возможности данные не переносятся, перекидываются внутренние ссылки 2) даже при полном копировании это быстрее чем по отдельности CopyBuffer для iHigh,iLow (1 вызов вместо 2-х, которые всё равно полезут в те-же структуры терминала) 

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

 
Maxim Kuznetsov #:

там 1) со слов разработчиков виртуальное копирование, то есть по возможности данные не переносятся, перекидываются внутренние ссылки 2) даже при полном копировании это быстрее чем по отдельности CopyBuffer для iHigh,iLow (1 вызов вместо 2-х, которые всё равно полезут в те-же структуры терминала) 

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

это вечная проблема на которую не хотят отвечать разработчики

что дешевле все что можно получить разом, или 2 нужные части

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

 
lynxntech #:

это вечная проблема на которую не хотят отвечать разработчики

что дешевле все что можно получить разом, или 2 нужные части

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

прошлый вопрос - это про обращение к GlobalVariables ? 

это очень "дорогая операция", поэтому чем реже тем лучше. Сохранять данные между OnDeinit и OnInit лучше через файлы и SQLite.