Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 149

 
ALXIMIKS:

La question est ennuyeuse, mais la réponse ne se trouve nulle part, ou peut-être ai-je simplement mal regardé :

Dans les fonctions, ou peut-être ailleurs, j'ai vu le symbole & après le type de données et, si je ne me trompe pas, une fois &&.

func(int& mm_mode, string symbol, int magic,bool& stop) {

A quoi sert-il ? Que fait-il ? (Référence, si vous pouvez en savoir plus à ce sujet)))

Il s'agit d'un transfert de paramètres par référence.
hoz:


Et plus précisément ? Il a été discuté que l'INIT peut échouer dans le cas, par exemple, de déconnexions ou d'autres situations similaires. Parce qu'il ne réinitialise pas lui-même les données par la suite, en cas d'imprévus, et qu'il ne s'exécute qu'une seule fois ! Donc, ce n'est pas exactement la bonne façon de faire.
Personne ne vous empêche d'appeler init() là où vous en avez besoin, en fonction de votre condition.
 
gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();
 

hoz:

gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();

C'est la même chose que :

gInitTrue = false;   // В глобальных
-------------------------------------

bool init()
{
   if
   {
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные..
   }
   return(gInitTrue =true);
}
-------------------------------------
void start()
 {//Вызов из старта так:
  if (gInitTrue = false) init();
 }
 
001:

Je n'arrive pas à trouver comment implémenter la logique avec le moins d'effort possible.

Si(...) définir un ordre stop ;

Si (durée de vie de l'ordre>temps) retirer l'ordre, et si(...) définir un nouvel ordre ;

La difficulté est qu'il peut y avoir plusieurs postes qui sont déjà ouverts, et comment les combattre tous ? Quel est le moyen le plus simple ?

Merci !

int MagicNumber=555;
//---
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  //--- фильтр по символу
         if (OrderSymbol()!=Symbol()) continue;
         //--- фильтр по магик номеру (если такая проверка предусмотрена)
         if (OrderMagicNumber()!=MagicNumber) continue;
         //--- срабатывает условие удаления отложенного ордера
         if (OrderOpenPrice()>vremya)
         {  
            if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
            {  
               if (OrderDelete(OrderTicket())==true)
               {  Sleep(5*1000); //после удачного удаления усыпляем советник на 5 секунд
                  if (/*установить стоповый ордер*/)
                  {   OrderSend(...)
                  }
               }
            }
            else return(0);
         }
}  }  }
 
Zhunko:
Il s'agit de passer le paramètre par référence.
Personne ne vous empêche d'appeler init() où vous le voulez, selon votre condition.


Encore une fois, nous devons résoudre la question du contrôle de ce moment. Après tout, pour savoir "où il devrait être", vous devez le savoir. Et vous pouvez le découvrir grâce à un drapeau, par exemple. Il s'avère, par exemple, que le drapeau sera dans le monde :

gInitTrue = false;

Dans init(), attribuez une valeur à la toute fin de la fonction :

gInitTrue = true;

Et nous allons contrôler le démarrage au tout début de la fonction :

if (gInitTrue != true)
    init();
Est-ce que je comprends bien ? Ou y a-t-il autre chose à considérer ?
 
hoz:


Mais plus important encore ? Il a été discuté que l'INIT peut échouer dans le cas, par exemple, de déconnexions ou d'autres situations similaires. Parce qu'il ne réinitialise pas lui-même les données par la suite, en cas d'imprévus, et qu'il ne s'exécute qu'une fois ! Ce n'est donc pas une façon tout à fait correcte de procéder.
Il n'y a pas de limite de temps pour init(), théoriquement les calculs peuvent s'exécuter pendant plusieurs secondes/minutes. Ça n'a pas de sens de rompre une connexion ici. I.e., owl a été lancé sur un graphique -> un tick est arrivé -> les calculs dans init() ont commencé (à ce moment-là il peut y avoir beaucoup de ticks ou un échec de connexion) -> le Conseiller Expert pour la première opération start() et donc il attend un nouveau tick.
 
comment le code doit-il être correctement écrit pour que si le stop loss ou le take profit spécifié est inférieur au stop minimum, alors les rendre égaux et utiliser les stops comme stop minimum. ?
 
webip:
comment le code doit-il être correctement écrit pour que si le stop loss ou le take profit spécifié est inférieur au stop minimum, alors les rendre égaux et utiliser les stops comme stop minimum. ?
MathMax().
 
Vous pouvez me donner un petit code ? Fichier ouvert.... Quelles fonctions peuvent être utilisées pour écrire un enregistrement, le sauvegarder, puis le fermer...
 
Zolotai:
Vous pouvez me donner un petit code ? Fichier ouvert.... Quelle fonction permet d'écrire un enregistrement, de le sauvegarder puis de le fermer...

https://docs.mql4.com/ru/files