Вопрос знатокам MQL - страница 13

 

Почему код в цикле не работает

while(!IsStopped())

код

Sleep(50);

 }

 а по тикам работает нормально 

 
seka-s79:

Почему код в цикле не работает

почему цыпленок не перебегает дорогу
 

А! Понял! Спасибо!!!

 

Проблема с Symbol() MT4:

2 функции для иллюстрации:

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

Исполнение первой выводит пустую строку:

int start()
{
   Comment(SymbolOK());
   return(0);
}

А вот вторая функция строковый идентификатор "EURUSD" (ну, зависит от графика, но выводи, хотя по логике функции должна быть пустая строка):

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

Помогите понять, что не так? Спасибо

 
anton.veksler:

Проблема с Symbol() MT4:

2 функции для иллюстрации:

Исполнение первой выводит пустую строку:

А вот вторая функция строковый идентификатор "EURUSD" (ну, зависит от графика, но выводи, хотя по логике функции должна быть пустая строка):

Помогите понять, что не так? Спасибо

Ваш if(false) никогда не сработает, соответственно значение value так никак не изменится, и будет равно скорей всего пустой строке. Хотя не знаю чем иницилизируется значения строковых переменных. Может они и вовсе не иницилизируются, Тогда в  вашем варианте что угодно может вывести.
 
Sepulca:
Ваш if(false) никогда не сработает, соответственно значение value так никак не изменится, и будет равно скорей всего пустой строке. Хотя не знаю чем иницилизируется значения строковых переменных. Может они и вовсе не иницилизируются, Тогда в  вашем варианте что угодно может вывести.

"...Если явно не задано никакое начальное значение, то численная переменная инициализируется нулем (0), а переменная строкового типа инициализируется пустой строкой...."
 
zoritch:
"...Если явно не задано никакое начальное значение, то численная переменная инициализируется нулем (0), а переменная строкового типа инициализируется пустой строкой...."



Ну вот, Вы даже и в документации нашли... Но вообще говоря г...но вопрос. Чтобы не заморачиваться не так сложно набить вместо:

string   value;

 что нибудь вроде этого:

string   value="ЭтоСтрокаПокаЕёЕщёНиктоНеТрогал";
 
Sepulca:



Ну вот, Вы даже и в документации нашли... Но вообще говоря г...но вопрос. Чтобы не заморачиваться не так сложно набить вместо:

 что нибудь вроде этого:

 


Спасибо, что ответили. Про документацию знаю, что без явной инициализации строковая переменная будет пустой строкой знаю, НО данная функция возвращает символьный код инструмента. Т.е. в условие никогда не попадём (false умышлено), так как же value становится Symbol() в этом варианте (данный пример функции утрированный), то есть получается при неявной инициализации строковая переменная не пустая строка (а я очень на это рассчитывал), а что-то непонятное, точнее механизм неявной инициализации строки непонятен. "Набивать" объявление переменных не сложно, просто поведение системы вне соответствии документации, как-то сбивает. Да и самое важно, такое происходит, когда argument именно Symbol().


string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}
 

Добрый день всем!

Написала арбитражный советник. Сигнал входа генерируется - если текущее расхождение ценовых линий индикатора ДЕЛЬТА_MA превысит заданное в параметрах значение ДЕЛЬТА:

//жжжжжжжжжжжжжжжжжжжжжжж Ищем возможность войти в рынок жжжжжжжжжжжжжжжжжжжжжжжж
// Задаем ценовые линии МА на 1-м баре
  MA_1=   (iMA(Symbol_1,Period(),per2,0,ma_method,Price,1)-
           iMA(Symbol_1,Period(),per1,0,ma_method,Price,1)) ;  
  MA_2= (iMA(Symbol_2,Period(),per2,0,ma_method,Price,1)-
         iMA(Symbol_2,Period(),per1,0,ma_method,Price,1))   ;                 
 ДЕЛЬТА_MA  =   MathAbs(MA_1 - MA_2 ) ; //- разность ценовых линий на 1 баре        
//------------------------------------------------ 

if (ДЕЛЬТА_MA > ДЕЛЬТА && MA_1 > MA_2)//если линии разошлись больше заданного значения
       //(первыя выше второй), то продаем 1-й инструмент и покупаем/продаем второй 
      TradeDOWN=true;       else TradeDOWN=false;

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

 

extern double       ДЕЛЬТА = 350;

extern string  ____F____  = "=== FILTER ===";
 extern bool     FILTER_= true; //Арбитр. вход реализуется только при схождении линий
Реализован алгоритм такого условия следующим образом: