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

 
Скажите пожалуста, я использую одну функцию внутри другой. В наружной обьявил переменну. Во внутренней ее использую. Вот примерно  
  string PositionSymboll = "";
   if  (PositionSymboll=PositionGetSymbol(i)){//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
    if (PositionGetInteger(POSITION_MAGIC)== MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
              { BU_();}}

И т.п. Ругается так. 'PositionSymboll' - undeclared identifier Переделать.mq5 2472 5  

Я, честно говоря, не ожидал тут никакого подвоха. Если я ее обьвлю внутри используемой функции  BU_(), пирименная "обнулится".  Как поступить лучше? 

Мне очень хорошо было бы обьявлять ее внутри первой функции, внутри цикла  if.

 
Ох, ты! И даже обьявив ее внутри функции void OnTick(), компилятор так же ругается, уже на первую функцию! Я пас, прямо выпал..    
 
Dimka-novitsek:
Ох, ты! И даже обьявив ее внутри функции void OnTick(), компилятор так же ругается, уже на первую функцию! Я пас, прямо выпал..    
void OnStart()
  {
   int i=0; long MAGIC=1234;
   
   string PositionSymboll="";
   if(PositionSymboll=PositionGetSymbol(i))
     {//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
      if(PositionGetInteger(POSITION_MAGIC)==MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
        { BU_();}
     }
  }
void  BU_(){} 

компилируется нормально, а вот конструкция

string PositionSymboll="";
   if(PositionSymboll)

вызывает сомнение, вы проверяете на true/false стринг переменную ????????? я озадачен

вопрос риторический.

 
Спасибо!!  Я еще только учусь, это мой первый советник на MQL5. А что значит риторический? 
 
Dimka-novitsek:
Спасибо!!  Я еще только учусь, это мой первый советник на MQL5. А что значит риторический? 

Это значит не требующий ответа.

Просто переменная типа стринг переданная как выражение в оператор if, выдаст false лишь в одном случае, если переменная не была инициализирована.

Во всех остальных вариантах содержимого переменной будет выдан true.

 
Спасибо!!!
 

Подскажите пожалуйста, есть функция которая должна возвращать true если есть отложенный ордер по передаваемой в функцию цене. Но она у меня возаращает лысую бабушку (попеременно true/false). Подскажите, где я недопонимаю логику работы с ордерами в mql5 ? (только учусь).


bool OrderExist(double price)                                                                      // функция возвращает наличие ордера на передаваемой цене
{
         
uint total=OrdersTotal();
ulong    ticket;

for(uint i=0;i<total;i++)
   {
   if((ticket=OrderGetTicket(i))>0)      
      {
      if(NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN),4)== price)
         {
         return(true);
         }
      }
   }
return(false);
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
DMXX:

Подскажите пожалуйста, есть функция которая должна возвращать true если есть отложенный ордер по передаваемой в функцию цене. Но она у меня возаращает лысую бабушку (попеременно true/false). Подскажите, где я недопонимаю логику работы с ордерами в mql5 ? (только учусь).

А вот не факт что ордер открылся по заданной цене, могло быль проскальзывание, по тому и получается: открылся во время то true, не успел (цена сместилась) - false.

 
fyords:
А вот не факт что ордер открылся по заданной цене, могло быль проскальзывание, по тому и получается: открылся во время то true, не успел (цена сместилась) - false.
Да он висит в терминале по этой цене. Если он есть в operations, это ведь значит, что он выставлен успешно?
 
DMXX:
Да он висит в терминале по этой цене. Если он есть в operations, это ведь значит, что он выставлен успешно?

Выставлен то да, а вот когда он сработает...

Или такой пример: есть отложенный ордер, цена его на 1 пункт отличается от текущей, при следующем тике цена прыгает не на 1 пункт, а, допустим, на 3-5, итог - открытие не на нужной цене. Явный пример - гэп. 

А может я не понял вопроса и туплю.

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