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

 
Roman Sharanov:

Понял, благодарю

Еще такой вопрос, как задать ТФ для отладки на реальных данных? Для символа я понял - поместить в самый верх окна обзора рынка, а вот ТФ хоть что ты делай открывает Н1

Сервис->Настройки и символ не надо будет никуда двигать...


 
В чем может быть ошибка?

Создаю синтетик по формуле ask(EURUSD)-bid(EURUSD), все бары кроме текущего нулевые

 
SEM:
В чем может быть ошибка?

Создаю синтетик по формуле ask(EURUSD)-bid(EURUSD), все бары кроме текущего нулевые

Ошибка может быть в количестве цифр после запятой:


 
советник bollinger bands breakout с настройками по умолчанию т.е если ничего не менять показывает убыток на тестере. Поменял(уменьшил) некоторые входные параметры в колонках Значение и Старт , Шаг и Стоп не трогал, не знаю - вообще перестал торговать, по нулям. Подскажите настройки или дайте set файл
 
Maksym Mudrakov:

Ошибка может быть в количестве цифр после запятой:


Ошибка не в этом, на истории данные не рассчитываются, а с момента создания символа все корректно рассчитывается, подозреваю неправильно работает функция расчета на истории, т.е. это баг.
 
Добрый день, господа.

У меня такая проблема: я только начала в МТ5 допирать, переношу свои индикаторы из МТ4 и столкнулась с проблемами. Мне нужно использовать iMA в одну строчку и получать значение одного конкретного индекса. Видела на форуме сообщения и использование функции iMAGet (как и аналогичные iATRGet и тд). Как я вижу, функции уже не работают, тогда такой вопрос: как изящно получить одно единственное значение iMA? Я используя вышеупомянутые функции пыталась сделать так:

NormalizeDouble(iMAGet(iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW), shift), Digits())

Знаю, без проверки плохо, но мне приходится портировать старый МТ4 код, по другому не придумала как сделать это попроще (у меня десяток машек, и все работают на разных таймфреймах). Инициализировать машки в oninit не могу, так как код имеет трехступенчатую вложенность, и у меня не получится вызвать нужную машку без геморроя. Поэтому, короче говоря, моя цель превратить

Это :

NormalizeDouble(iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW, shift), Digits())

в то, что работает на MT5 без резких телодвижений.

 
Olga Miakhovich:
Добрый день, господа.

У меня такая проблема: я только начала в МТ5 допирать, переношу свои индикаторы из МТ4 и столкнулась с проблемами. Мне нужно использовать iMA в одну строчку и получать значение одного конкретного индекса. Видела на форуме сообщения и использование функции iMAGet (как и аналогичные iATRGet и тд). Как я вижу, функции уже не работают, тогда такой вопрос: как изящно получить одно единственное значение iMA? Я используя вышеупомянутые функции пыталась сделать так:


Знаю, без проверки плохо, но мне приходится портировать старый МТ4 код, по другому не придумала как сделать это попроще (у меня десяток машек, и все работают на разных таймфреймах). Инициализировать машки в oninit не могу, так как код имеет трехступенчатую вложенность, и у меня не получится вызвать нужную машку без геморроя. Поэтому, короче говоря, моя цель превратить

Это :

в то, что работает на MT5 без резких телодвижений.

Посмотрите примеры в кодобазе, например этот: https://www.mql5.com/ru/code/27161

По факту: Создаёте в ОнИнит() хендл индикатора

handle_iMA_High=iMA(Symbol(),Period(),Inp_MA_ma_period,Inp_MA_ma_shift,
                       Inp_MA_ma_method,PRICE_HIGH);
//--- if the handle is not created
   if(handle_iMA_High==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator (\"Price High\") for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }

Ну а потом копируете в буфер нужный элемент(ы) и с ним работаете

if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
     {
      //--- if the copying fails, tell the error code
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());

https://www.mql5.com/ru/docs/series/copybuffer

 
Vitaly Muzichenko:

Посмотрите примеры в кодобазе, например этот: https://www.mql5.com/ru/code/27161

По факту: Создаёте в ОнИнит() хендл индикатора

Ну а потом копируете в буфер нужный элемент(ы) и с ним работаете

https://www.mql5.com/ru/docs/series/copybuffer

Как я уже писала, мне не подходит инициализация в OnInit. У меня работа со всеми таймфреймами одновременно, мне придется инициализировать все машки на каждом ТФ, а потом в коде где я использую какое-то значение, делать что-то вроде этого:

if(timeframe = PERIOD_M5)
        CopyBuffer(handle_ma_m5, ...)
if(timeframe = PERIOD_M15)
        CopyBuffer(handle_ma_m15, ...)
...

И так при каждом вызове каждой машки. Код превратится просто в запутанный понос. 

И при этом каждый новый бар нужно будет это как-то обновлять?

Есть ли функция вроде CopyBuffer, только копирующая не массив, а одно значение по нужному индексу?

 
Olga Miakhovich:

Как я уже писала, мне не подходит инициализация в OnInit. У меня работа со всеми таймфреймами одновременно, мне придется инициализировать все машки на каждом ТФ, а потом в коде где я использую какое-то значение, делать что-то вроде этого:

И так при каждом вызове каждой машки. Код превратится просто в запутанный понос. 

И при этом каждый новый бар нужно будет это как-то обновлять?

Есть ли функция вроде CopyBuffer, только копирующая не массив, а одно значение по нужному индексу?

Сделайте массив хендлов в OnInit() и с ними работайте.

CopyBuffer(...) вынесите в функцию для удобства использования, туда подавайте с массива хендл индикаторов и нужный индекс, а функция вернёт цену

 
Vitaly Muzichenko:

Сделайте массив хендлов в OnInit() и с ними работайте.

CopyBuffer(...) вынесите в функцию для удобства использования, туда подавайте с массива хендл индикаторов и нужный индекс, а функция вернёт цену

капец как неудобно, однако)