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

 

Karputov Vladimir:
Высылайте.

Выслал 

 
Karputov Vladimir:
Высылайте.
Еще добавлю, что при смене входных параметров индикатор также работает корректно и без ошибок
 

С помощью Karputov Vladimir. Проблема была решена: нужно было получать хэндл индикатора в функции OnInit(), а затем удалять его в OnDeinit().

Подскажите еще пожалуйста как сделать так, чтобы индикатор рисовал линии с определенного бара, а не на всей истории? 

 

Добрый день. У меня такая проблема. Начал изучать MQL и пишу советника. При компиляции и последующем запуске советника у меня открывается график Евро Доллара часовой, хотя  какой график открывать я нигде не указывал. Прописал открытие Евро Доллара на 5 минут. Открывает сначала Евро Доллар на час, а потом на 5 минут. Как убрать мне этот график на час? Вот код советника. Спасибо за совет заранее.


//+------------------------------------------------------------------+
//|                                                            а.mq4 |
//|                                                   Валерий Вилькс |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Валерий Вилькс"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
double iAlligator();
bool ObjectSetInteger();
long a=ChartOpen("EURUSD",PERIOD_M5);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(5);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {


   for(int f=3;; f++)
     {
      double val=iFractals("EURUSD",15,1,f);
      if(val!=0)
        {
         Alert("Фрактал на покупку",val,"Бар слева",f);
         break;
        }
     }
   for(int f1=3;; f1++)
     {
      double val1=iFractals("EURUSD",15,2,f1);
      if(val1!=0)
        {
         Alert("Фрактал на продажу ",val1,"Бар слева",f1);
         break;
        }
      Alert(Bid);
     }


  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+

void OnTimer()
  {


  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
valeravilks:

Добрый день. У меня такая проблема. Начал изучать MQL и пишу советника. При компиляции и последующем запуске советника у меня открывается график Евро Доллара часовой, хотя  какой график открывать я нигде не указывал. Прописал открытие Евро Доллара на 5 минут. Открывает сначала Евро Доллар на час, а потом на 5 минут. Как убрать мне этот график на час? Вот код советника. Спасибо за совет заранее.



Вы наверно включаете отладку и тогда ваш эксперт запускается на символе по умолчанию. В настройках метаедитора укажите нужный символ и ТФ. (смотри вложенную картинку)

Файлы:
kagfqct9ki.png  28 kb
 
Добрый день
int maxValueIdx= ArraySort(INDEX,WHOLE_ARRAY,ArrayMaximum(INDEX,WHOLE_ARRAY,0),MODE_ASCEND);
int minValueIdx=ArraySort(INDEX,WHOLE_ARRAY,ArrayMinimum(INDEX,WHOLE_ARRAY,0),MODE_DESCEND);  
что по вашему это значит?
 
azfaraon:
Добрый день
что по вашему это значит?
Это MQL4 код. Сначала ищется максимум в массиве, проверяется весь массив, начиная с нулевого элемента. А потом идёт сортировка массива начиная с найденного максимального индекса (в первом примере по возрастанию, во втором по убыванию).
 

То есть в этом куске ищем макс и мин значения  от максимальных к минимальным ?(изнутри  наружу )я правильно понял? 

а в этом 

  int maxValueIdx=ArrayMaximum(INDEX,WHOLE_ARRAY,0);
      int minValueIdx=ArrayMinimum(INDEX,WHOLE_ARRAY,0);

 от минимальных к максимальным?(снаружи внутрь)

 
azfaraon:


Вот этот код:

int maxValueIdx=ArrayMaximum(INDEX,WHOLE_ARRAY,0);

 ищет индекс элемента с максимальным значением. Поиск выполняется начиная с нулевого элемента и во всём массиве.

 
azfaraon:

Вот код

//+------------------------------------------------------------------+
//|                                                  test_script.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Инициализация массива
   int INDEX[]={2,45,21,8,96,14,32,6,81,46,1,3,31,22,5,78,24,25,66};

//--- Выведем на печать наш массив
   int size;
   string text;

   size=ArraySize(INDEX);        // размер нашего массива
   text=NULL;
   for(int i=0;i<size;i++)
     {
      if(i<size-1)
         text=text+IntegerToString(INDEX[i])+",";
      else
         text=text+IntegerToString(INDEX[i]);
     }
   Print("Старт");
   Print(text);
//---
   Print("---");
   Print("Элемент с индексом ",ArrayMaximum(INDEX,WHOLE_ARRAY,0),
         " имеет максимальное значение равное ",INDEX[ArrayMaximum(INDEX,WHOLE_ARRAY,0)]);
   int maxValueIdx=ArraySort(INDEX,WHOLE_ARRAY,ArrayMaximum(INDEX,WHOLE_ARRAY,0),MODE_ASCEND);

//--- Выведем на печать наш массив
   size=ArraySize(INDEX);       // размер нашего массива   
   text=NULL;
   for(int i=0;i<size;i++)
     {
      if(i<size-1)
         text=text+IntegerToString(INDEX[i])+",";
      else
         text=text+IntegerToString(INDEX[i]);
     }
   Print(text);

//---
   Print("---");
   Print("Элемент с индексом ",ArrayMinimum(INDEX,WHOLE_ARRAY,0),
         " имеет минимальное значение равное ",INDEX[ArrayMinimum(INDEX,WHOLE_ARRAY,0)]);
   int minValueIdx=ArraySort(INDEX,WHOLE_ARRAY,ArrayMinimum(INDEX,WHOLE_ARRAY,0),MODE_DESCEND);

//--- Выведем на печать наш массив
   size=ArraySize(INDEX);       // размер нашего массива   
   text=NULL;
   for(int i=0;i<size;i++)
     {
      if(i<size-1)
         text=text+IntegerToString(INDEX[i])+",";
      else
         text=text+IntegerToString(INDEX[i]);
     }
   Print(text);
   Print("Конец");
  }
//+------------------------------------------------------------------+

 

, а вот результат его работы:

2015.05.03 19:20:03.917 test_script #CHL,Daily: Старт
2015.05.03 19:20:03.917 test_script #CHL,Daily: 2,45,21,8,96,14,32,6,81,46,1,3,31,22,5,78,24,25,66
2015.05.03 19:20:03.917 test_script #CHL,Daily: ---
2015.05.03 19:20:03.917 test_script #CHL,Daily: Элемент с индексом 4 имеет максимальное значение равное 96
2015.05.03 19:20:03.917 test_script #CHL,Daily: 2,45,21,8,1,3,5,6,14,22,24,25,31,32,46,66,78,81,96
2015.05.03 19:20:03.917 test_script #CHL,Daily: ---
2015.05.03 19:20:03.917 test_script #CHL,Daily: Элемент с индексом 4 имеет минимальное значение равное 1
2015.05.03 19:20:03.917 test_script #CHL,Daily: 2,45,21,8,96,81,78,66,46,32,31,25,24,22,14,6,5,3,1
2015.05.03 19:20:03.917 test_script #CHL,Daily: Конец

 

Изучайте, пожалуйста.

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