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

 
Vladimir Karputov:

Достаточно при создании ХЕНДЛА индикатора указать НУЖНЫЙ таймфрейм и символ. Например индикатор iRSI:

Нет я про это. Вроде Ренат, говорил в каком то посте, о создании вспомогательных, не привязанных графику советников или что то в этом роде. 

 
BillionerClub:

Нет я про это. Вроде Ренат, говорил в каком то посте, о создании вспомогательных, не привязанных графику советников или что то в этом роде. 

Это называется "Сервисы". Нет их ещё.

 

есть у меня под МТ4 работающая ф-ция, которая проверяет перед выставлением ордера доступность сервера (параметр bool refreshrates - обновить котировки и int count - количество проверок с паузой если не доступен сервер, результат возвращает false  - можно торговать, true сервер не доступен . т.е. удобно так пользоваться if(ServerDisable() return;  ):

bool ServerDisable(bool refreshrates=false,int count=10)
  {
   for(int i=0;i<count;i++)
     {
      if(IsConnected())
        {
         if(IsTradeAllowed())
           {
            if(!IsTradeContextBusy())
              {
                 {
                  if(refreshrates)RefreshRates();
                  return(false);
                 }
              }
           }
        }
      Sleep(157);
     }
   Print(__FUNCTION__," Торговый сервер не отвечает");
   return(true);
  }

помогите корректно переписать под МТ5 эту конструкцию, в справке МТ5 параметры запросов TerminalInfoInteger() немного по другому называется (т.е. ищу аналогию в МТ5 штатным ф-циям МТ4 IsConnected(), IsTradeAllowed()... ) и как выполнить RefreshRates() ?

 
Igor Makanu:

есть у меня под МТ4 работающая ф-ция, которая проверяет перед выставлением ордера доступность сервера (параметр bool refreshrates - обновить котировки и int count - количество проверок с паузой если не доступен сервер, результат возвращает false  - можно торговать, true сервер не доступен . т.е. удобно так пользоваться if(ServerDisable() return;  ):

помогите корректно переписать под МТ5 эту конструкцию, в справке МТ5 параметры запросов TerminalInfoInteger() немного по другому называется (т.е. ищу аналогию в МТ5 штатным ф-циям МТ4 IsConnected(), IsTradeAllowed()... ) и как выполнить RefreshRates() ?

Я использую только эту, вроде хватает

TerminalInfoInteger(TERMINAL_CONNECTED)

 
Vitaly Muzichenko:

Я использую только эту, вроде хватает

TerminalInfoInteger(TERMINAL_CONNECTED)

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

мне нужно точные аналоги для МТ5 ф-ций: IsConnected()  (TerminalInfoInteger(TERMINAL_CONNECTED) - подтверждено ),    IsTradeAllowed() ,    IsTradeContextBusy() ,     RefreshRates() 

 
Igor Makanu:

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

мне нужно точные аналоги для МТ5 ф-ций: IsConnected()  (TerminalInfoInteger(TERMINAL_CONNECTED) - подтверждено ),    IsTradeAllowed() ,    IsTradeContextBusy() ,     RefreshRates() 

IsTradeContextBusy()  можно исключить, в пятом поток свободен всегда

RefreshRates()  - это обновление предопределённых переменных Ask/Bid, их в пятом нет, но можно использовать 

#define Bid (::SymbolInfoDouble(_Symbol, ::SYMBOL_BID))
#define Ask (::SymbolInfoDouble(_Symbol, ::SYMBOL_ASK))

тогда цены будут всегда актуальны

 
Igor Makanu:

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

мне нужно точные аналоги для МТ5 ф-ций: IsConnected()  (TerminalInfoInteger(TERMINAL_CONNECTED) - подтверждено ),    IsTradeAllowed() ,    IsTradeContextBusy() ,     RefreshRates() 

Я так понимаю, вы имеете ввиду то, что тики идут, но торговля запрещена?

Если так, то Я тоже хотел-бы иметь такую проверку, но пока никто и ничего рабочего не предложил. 

 
Vitaly Muzichenko:

IsTradeContextBusy()  можно исключить, в пятом поток свободен всегда

https://www.mql5.com/ru/articles/4332

 IsConnected()   TerminalInfoInteger(TERMINAL_CONNECTED)

IsTradeAllowed()  MQLInfoInteger(MQL_TRADE_ALLOWED)

RefreshRates()   SymbolInfoDouble(_Symbol, ::SYMBOL_BID)

IsTradeContextBusy()  нужен аналог или обоснование почему аналог не возможен


мне нужны аналоги и ничего более , я вчера переписал приведенную выше ф-цию исходя из справки, но есть неуверенность в правильном трактовании (разными словами описаны ), теперь хочу на форуме подтвердить правильность:

//_______________________________________________________________________
bool ServerDisable(bool refreshrates=false,int count=10)
  {
   if(MQLInfoInteger(MQL_TESTER)|| MQLInfoInteger(MQL_OPTIMIZATION))return(false);
   for(int i=0;i<count;i++)
     {
      if(TerminalInfoInteger(TERMINAL_CONNECTED))if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
        {
#ifdef __MQL5__
         if(refreshrates) SymbolInfoDouble(_Symbol,SYMBOL_BID);
         return(false);
#else
#ifdef __MQL4__
         if(!IsTradeContextBusy())
           {
            if(refreshrates) RefreshRates();
            return(false);
           }
#endif   // __MQL4__
#endif
        }
      Sleep(157);
     }
   Print(__FUNCTION__," Торговый сервер не отвечает");
   return(true);
  }
//___________________________________________________________________________
LifeHack для трейдера: замешиваем ForEach на дефайнах (#define)
LifeHack для трейдера: замешиваем ForEach на дефайнах (#define)
  • www.mql5.com
— В чем сила, брат?                                   —А сила, брат, в дефайнах                     Вы все ещё пишете на MQL4 и хотите перейти на MQL5, но не знаете с чего начать? Тогда мы идём к вам! Теперь появилась возможность комфортно работать в редакторе MetaEditor MQL5 и при этом использовать MQL4-нотацию (справедливости ради замечу...
 

Подскажите, пожалуйста, почему я получаю ошибки

2019.02.17 06:13:28.974 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02.17 06:13:28.983 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден

в этом коде

      if(ObjectFind(chart,name)<0)
        {
         Print("1 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
         graphic.Create(chart,name,0,0,0,pix_X,pix_Y);//Создает графический ресурс, привязанный к объекту чарта 
         Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
        }

Если первая ошибка ещё объяснима - мол объект не найден, но не ясна реализация поиска отсутствующего объекта без ошибки, то вторая ошибка не понятна, при этом объект явно создается - график формируется, и причина ошибки не ясна.

Как избавиться от ошибок?

 
Aleksey Vyazmikin:

Подскажите, пожалуйста, почему я получаю ошибки

в этом коде

Если первая ошибка ещё объяснима - мол объект не найден, но не ясна реализация поиска отсутствующего объекта без ошибки, то вторая ошибка не понятна, при этом объект явно создается - график формируется, и причина ошибки не ясна.

Как избавиться от ошибок?

ResetLastError() необходимо выполнять перед обращением к функции. Что здесь:

graphic.Create()

непонятно. Если это CCanvas, то метод Create() создает графический ресурс без привязки к объекту чарта. И возвращает он либо true, либо false:

Create

Создает графический ресурс без привязки к объекту чарта.

virtual bool  Create(
   const string       name,                                 // имя
   const int          width,                                // ширина
   const int          height,                               // высота
   ENUM_COLOR_FORMAT  clrfmt=COLOR_FORMAT_XRGB_NOALPHA      // формат
   );

Параметры

name

[in]  Основание для имени графического ресурса. Имя ресурса формируется при создании путем добавления псевдослучайной строки.

width

[in]  Ширина (размер по оси X) в пикселях.

height

[in]  Высота (размер по оси Y) в пикселях.

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[in]  Способ обработки цвета. Более подробно о способах обработки цвета смотрите в описании функции ResourceCreate().

Возвращаемое значение

true - в случае удачи, иначе false


В общем, из того, что вы показали, сложно понять.

Но попробуйте так:

//+------------------------------------------------------------------+
ResetLastError();
if(ObjectFind(chart,name)<0)
  {
   Print("1 Тут ошибка потому, что объекта нет ещё",GetLastError()," ",cLng::CodeDescription(GetLastError()));
   ResetLastError();
   if(!graphic.Create(chart,name,0,0,0,pix_X,pix_Y))
      Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
  }
//+------------------------------------------------------------------+

Если там у вас CGraphic, то нужно лезть в код Create() для понимания чего он возвращает, так как в справке про то ни слова:

Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
  • www.mql5.com
Стандартная библиотека / Научные графики / CGraphic / Create - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5