Une question pour les experts MQL - page 13

 

Pourquoi le code dans la boucle ne fonctionne pas

while( !IsStopped())

{

code

Sleep(50) ;

}

Mais par ticks, cela fonctionne bien

 
seka-s79:

Pourquoi le code dans la boucle ne fonctionne pas

Pourquoi le poulet ne traverse pas la route en courant ?
 

А ! Je l'ai eu ! Merci ! !!

 

Problème avec Symbol() MT4 :

2 fonctions pour illustrer :

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);

}

L'exécution du premier produit une chaîne vide :

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

Mais la deuxième fonction produit une chaîne ID "EURUSD" (enfin, cela dépend du graphique, mais produit, bien que selon la logique de la fonction, ce devrait être une chaîne vide) :

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

Aidez-moi à comprendre ce qui ne va pas. Merci.

 
anton.veksler:

Problème avec Symbol() MT4 :

2 fonctions pour illustrer :

L'exécution du premier produit une chaîne vide :

Mais la deuxième fonction produit une chaîne ID "EURUSD" (enfin, cela dépend du graphique, mais produit, bien que selon la logique de la fonction, ce devrait être une chaîne vide) :

Aidez-moi à comprendre ce qui ne va pas. Merci.

Votre if(false) ne fonctionnera jamais, donc la valeur ne changera en aucun cas, et sera très probablement une chaîne vide. Bien que je ne sache pas comment les valeurs des variables de type chaîne sont initiées. Peut-être qu'ils ne sont pas initiés du tout, alors dans votre version tout peut être sorti.
 
Sepulca:
Votre if(false) ne fonctionnera jamais, donc la valeur ne changera en aucun cas, et sera très probablement une chaîne vide. Bien que je ne sache pas comment les valeurs des variables de type chaîne sont initiées. Peut-être qu'ils ne sont pas initiés du tout, alors dans votre version tout peut être sorti.

"...Si aucune valeur initiale n'est définie explicitement, une variable numérique est initialisée à zéro (0) et une variable chaîne est initialisée à la chaîne vide....".
 
zoritch:
"...Si aucune valeur initiale n'est définie explicitement, une variable numérique est initialisée à zéro (0) et une variable chaîne est initialisée à la chaîne vide...."



Voilà, vous l'avez même trouvé dans la documentation aussi... Mais en général, c'est une question d...n.... Pas la peine, ce n'est pas si difficile de taper à la place :

string   value;

quelque chose comme ça :

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



Voilà, vous l'avez même trouvé dans la documentation... Mais en général, c'est une question stupide. Ce n'est pas trop difficile de taper à la place :

quelque chose comme ça :


Merci de répondre. À propos de la documentation, je sais que sans initialisation explicite, la variable string sera une chaîne vide, mais cette fonction renvoie un code de caractère de l'outil. C'est-à-dire que nous n'entrerons jamais dans une condition (fausse intentionnellement), donc comment la valeur devient Symbol() dans cette version (cet exemple de la fonction est exagéré), c'est-à-dire, avec l'initialisation implicite la variable chaîne n'est pas une chaîne vide (et je comptais vraiment dessus), mais quelque chose de pas clair, ou plutôt le mécanisme de l'initialisation implicite de la chaîne n'est pas clair. "Remplir la déclaration de variable n'est pas difficile, c'est juste le comportement du système en dehors de la documentation qui est quelque peu déroutant. Et surtout, cela se produit lorsque vous utilisez Symbol().


string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}
 

Bonjour à tous !

J'ai écrit un conseiller expert en arbitrage. Le signal d'entrée est généré - si la divergence actuelle des lignes de prix de l'indicateur DELTA_MA dépasse la valeur DELTA définie dans les paramètres :

//жжжжжжжжжжжжжжжжжжжжжжж Ищем возможность войти в рынок жжжжжжжжжжжжжжжжжжжжжжжж
// Задаем ценовые линии МА на 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;

L'EA fonctionne bien et correctement ! Les problèmes ont commencé lorsque j'ai voulu insérer un filtre qui ne permet d'entrer que si la première condition est remplie - la convergence des lignes de prix au même moment :

extern double       ДЕЛЬТА = 350;

extern string  ____F____  = "=== FILTER ===";
 extern bool     FILTER_= true; //Арбитр. вход реализуется только при схождении линий
L'algorithme pour une telle condition est implémenté comme suit