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

 
ascerdfg:
Можно ли:

заменить на:

А почему-бы и нет? Конечно можно

 
double Open[3];

int Ind_Handle;

int OnInit()
  {
      Ind_Handle=iCustom(_Symbol,_Period,"Pop"); // Pop.ex5
      if(Ind_Handle==INVALID_HANDLE)
        {
         Print(" Не удалось получить хендл индикатора");
         return(INIT_FAILED);
        }
   
   return(INIT_SUCCEEDED);
  }


void OnTick()
  {
 
      CopyBuffer(Ind_Handle,0,1,1,Open);
      Print("Open0 ",Open[0]);
  }

Печатает:   "Open0 1.797693134862316e+308"

Хотя я изменял и номер ячейки индикаторного буфера и его индекс.

Я точно знаю что в индикаторе целое число. Почему такое печатает?

 
ascerdfg:

Печатает:   "Open0 1.797693134862316e+308"

Хотя я изменял и номер ячейки индикаторного буфера и его индекс.

Я точно знаю что в индикаторе целое число. Почему такое печатает?

Или после объявления массива сделайте массиву ArraySetAsSeries true или объявите массив размером 1
 
void OnTick()
  {
     int i;
     double price=.5;
     double Open[];
      ArraySetAsSeries(Open,true);

      Print("Кол-во ",BarsCalculated(Ind_Handle));
      Print("хэндл ",Ind_Handle);
      CopyBuffer(Ind_Handle,0,0,100,Open);
                 
      
    for(i=0; i<100; i++)
    {
        if(Open[i]!=EMPTY_VALUE)
        {
            price=Open[i];
            break;
        }
    }
           
      Print(price);
  }
Не помогает, пишет всё время 0.5. Получается буфер всё время с максимальным числом.
 
ascerdfg:
Не помогает, пишет всё время 0.5. Получается буфер всё время с максимальным числом.

Хотите точный ответ - задайте корректно вопрос: предоставьте код индикатора и код советника. Сейчас не понятно, ЧТО, КТО и ГДЕ :)

 

Рор - индикатор

ррр - советник

Файлы:
Pop.mq5  38 kb
ppp.mq5  4 kb
 
ascerdfg:

Рор - индикатор

ррр - советник

Перепишите индикатор - во первых проверьте на СТОП-СЛОВА, во вторых упростите максимально - например заносите в индикаторный буфер число равное номеру текущего бара. 

Что получим: array[0]=0.0, array[1]=1.0 и так далее. Это ОЧЕНЬ и ОЧЕНЬ упростит процесс понимания работы получения данных с индикатора. В третьих - оставьте только один индикаторный буфер.

 

Подскажите пожалуйста как в этой функции явно указать обновляемый символ? Например EURUSD.m

//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+
 

Доброго времени суток!

Не подскажете как правильно собрать индикатор для маркета :?

Есть сам файл c расширение .mq5 и есть несколько подключаемых файлов с раширением .mqh, но в маркете надо иметь только один файл.

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

А если новая версия :? Это же с ума сойти можно +))

Спасибо.

 
EgorKim:

Подскажите пожалуйста как в этой функции явно указать обновляемый символ? Например EURUSD.m

Встречный вопрос: "Зачем здесь явно задавать символ"?.

Если Вы используете эту функцию, то Вы должны в OnInit назначить символ для m_symbol:

   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();

При этом, если Вы запускаете эксперт на символе "EURUSD.m" для m_symbol автоматически будет задан "EURUSD.m".

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