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

 
Krokus:

Peut-être bien :

Les autres pensées ne viennent pas...




Vous lisez entre les lignes. Bref, regardez ce que vous avez mis dans la boucle en premier lieu. Lazone d'action de la boucle...
 
Bonjour, dans mt4 android pour tablette il faut télécharger le terminal pour chaque serveur séparément ? le login comme sur pc via le fichier login n'est pas possible ? Aussi, savez-vous si autoclick peut être installé sur une tablette androïde pour trader dans mt4 ?
 

Bonjour ! Je n'arrive pas à faire fonctionner cette condition :

OrderCloseTime()!=hour()

Je ne veux pas que plus d'une commande soit ouverte en une heure !

Toutes les mêmes commandes sont ouvertes !

 
lowech:

Bonjour ! Je n'arrive pas à faire fonctionner cette condition :

OrderCloseTime()!=hour()

Je ne veux pas que plus d'une commande soit ouverte en une heure !

Mais toutes les mêmes commandes sont ouvertes ! Qu'est-ce que ça peut être ?

Tout d'abord : OrderCloseTime() - il s'agit de l'heure de clôture de l'ordre. Si l'ordre n'est pas clôturé, il est égal à zéro. Il faut regarder l'heure d'ouverture.

Deuxièmement : Hour() - c'est l'heure de début de l'EA, et cette heure ne change pas pendant l'exécution du programme. Vous devez le comparer avec l'heure d'arrivée de la dernière cotation - TimeCurrent()

Cette fonction renvoie le nombre de secondes après l'ouverture de la dernière position du symbole actuel :

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

C'est-à-dire que pour vérifier le nombre de secondes après l'ouverture de la dernière position d'achat avec Magic, vous avez besoin de

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
 
Bonjour, lorsque vous ouvrez à nouveau le terminal, après le week-end, tous les graphiques, y compris les graphiques de travail avec EAs, ont disparu sur un compte en cents. Au lieu du graphique, il y a un champ gris, bien que les positions ouvertes, le solde et les fonds aient été enregistrés en bas. J'ai dû retélécharger le terminal et réinstaller des graphiques fonctionnels avec des conseillers experts. Après cela, tout était OK. Veuillez me dire de quoi il s'agit et comment je peux éliminer ce problème à l'avenir de la manière la plus indolore possible ?
 

Premièrement : OrderCloseTime() est l'heure de clôture de l'ordre. Si l'ordre n'est pas clôturé, il est égal à zéro. Vous devez surveiller le temps ouvert.

Deuxièmement : Hour() - c'est l'heure de démarrage de l'Expert Advisor, et cette heure ne change pas pendant l'exécution du programme. Vous devez le comparer avec l'heure d'arrivée de la dernière cotation - TimeCurrent()

Cette fonction renvoie le nombre de secondes après l'ouverture de la dernière position du symbole actuel :

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

C'est-à-dire que pour vérifier le nombre de secondes après l'ouverture de la dernière position d'achat avec Magic, vous avez besoin de

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
merci pour cette fonction ! n'en avez-vous pas une autre ? ! pour qu'une seule commande soit ouverte par barre ? !
 
lowech:
merci pour cette fonctionnalité ! n'en avez vous pas une autre ?! pour qu'une seule commande s'ouvre par bar ?!
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

même chose, vérifiez seulement le nombre de barres, pas les secondes

 
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

même chose, vérifiez seulement le nombre de barres, pas les secondes


Cela fonctionne, mais lorsque je ferme un ordre par TP, un nouvel ordre s'ouvre immédiatement !
 
Pourquoi les couches de trading ne s'affichent-elles pas sur la plateforme et pourquoi l'EA ne fonctionne-t-il pas ?
 
lowech:

même chose, vérifiez seulement le nombre de barres, pas les secondes


ça marche ! Mais quand un ordre se ferme sur TP, un nouveau s'ouvre instantanément ! Comment le réparer ?

Nous devons donc effectuer une autre vérification : celle du nombre de barres après la clôture du dernier ordre :

//+----------------------------------------------------------------------------+
int BarsAfterCloseLastPos (int fi_MG, int fi_Type = -1)
{
    datetime ldt_Time = 0;
    int      li_Total = OrdersTotal();
//----
    for (int li_pos = 0; li_pos < li_Total; li_pos++)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (fi_Type >= 0) if (OrderType() != fi_Type) continue;
        if (OrderMagicNumber() != fi_MG) continue;
        if (ldt_Time >= OrderCloseTime()) continue;
        ldt_Time = OrderCloseTime();
    }
    //---- Обрабатываем событие - отсутствие своих ордеров
    if (ldt_Time == 0) return (-1);
//----
    return (iBarShift (NULL, 0, ldt_Time));
}
//+----------------------------------------------------------------------------+