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

 
lynxntech #:

т.е. в OnDeinit проверять историю и записывать в глобальную Терминала?

в идеале, то в текстовой виде там инфы на пару байтов, разве она не содержится в доступности как обычные переменные, т.е. в RAM?

в OnInit считали, запись в RAM, и дальше при обновлении переменной перезапись

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

Кто говорил о ковырянии истории в OnDeinit()?

Я говорил о необходимости переменную продублировать в переменную терминала при очередном открытии позиции…

 
Alexey Viktorov #:

Кто говорил о ковырянии истории в OnDeinit()?

Я говорил о необходимости переменную продублировать в переменную терминала при очередном открытии позиции…

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

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

 

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

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


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



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

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

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

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


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

iHigh

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

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

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

 
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);
}

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