Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1030

 
Sabit Dosaev:
Question simple. La chouette ne compile pas. Il y a une erreur à la fin du code. + __FUNCSIG__
+ " : "+Market_Err_To_Str(errIndex)
+ " ; ticket de commande = " + (string)OrderTicket()
+ " ; order type = " + (string)OrderType()
+ " ; ordre Stop Loss = " + DoubleToStr(OrderStopLoss(), Digits())
+ " ; new Stop Loss = " + DoubleToStr(newStopLoss, Digits())
+ " ; Bid = " + DoubleToStr(Bid, Digits())
+ " ; Ask = " + DoubleToStr(Ask, Digits())
) ;
}
}
lastSetNonlosTryTime = TimeLocal();
}


Lance une erreur de compilation. Aidez-nous si vous le pouvez. Merci !

Insérez le code correctement :


И... la nature de votre erreur n'est pas claire dans le morceau de code. Le code doit être reproductible.

 
string LastComm(int a_magic_0)
  {
   int l_hist_total_4 = OrdersHistoryTotal();
   int l_datetime_8 = 0;
   int l_datetime_12 = 0;
   string ls_ret_16 = "0";
   for(int l_pos_24 = 0; l_pos_24 < l_hist_total_4; l_pos_24++)
     {
      OrderSelect(l_pos_24, SELECT_BY_POS, MODE_HISTORY);
      l_datetime_8 = OrderCloseTime();
      if(l_datetime_8 > l_datetime_12 && OrderMagicNumber() == a_magic_0)
        {
         l_datetime_12 = l_datetime_8;
         ls_ret_16 = OrderComment();
        }
     }
   return (ls_ret_16);
  }

@Artyom Trishkin

Comment puis-je convertir cette fonction en MQL5 à partir de MQL4 ?

 

Bon après-midi à tous.

Pourriez-vous me dire où insérer la fonction IsConnected () pour déterminer l'état de la communication ?

Si je l'insère dans la fonction OnTick(), alors il y a toujours connexion (c'est-à-dire qu'il y a arrivée du tick, donc il y a connexion, l'absence d'arrivée du tick (en raison de son absence ou de l'absence de connexion) signifie qu'il n'y a pas d'appel à OnTick() et respectivement à la fonction définissant l'état de connexion IsConnected ())) Sur cela il est inutile d'insérer IsConnected () dans les cadres OnTick () (combien de fois je n'ai pas éteint l'Internet, tout de même il n'écrit pas dans un fichier sur l'absence de communication)

Pour cette raison, la question est de savoir où insérer correctement la fonction IsConnected () ou quelles sont les autres façons de déterminer l'état de la connexion (uniquement pour MT4).

Merci !

 
Roni Iron:

Bon après-midi à tous.

Pourriez-vous me dire où insérer la fonction IsConnected () pour déterminer l'état de la communication ?

Si je l'insère dans la fonction OnTick(), alors il y a toujours connexion (c'est-à-dire qu'il y a arrivée du tick, donc il y a connexion, l'absence d'arrivée du tick (en raison de son absence ou de l'absence de connexion) signifie qu'il n'y a pas d'appel à OnTick() et respectivement à la fonction définissant l'état de connexion IsConnected ())) Sur cela il est inutile d'insérer IsConnected () dans les cadres OnTick () (combien de fois je n'ai pas éteint l'Internet, tout de même il n'écrit pas dans un fichier sur l'absence de communication)

Pour cette raison, la question est de savoir où insérer correctement la fonction IsConnected () ou quelles sont les autres façons de déterminer l'état de la connexion (uniquement pour MT4).

Merci !

OnTimer()

Документация по MQL5: Обработка событий / OnTimer
Документация по MQL5: Обработка событий / OnTimer
  • www.mql5.com
//|                                               OnTimer_Sample.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Roman Shiredchenko:

vous avez une confusion de variables et de fonctions, si c'est une fonction, essayez de cette façon :

ALT + S pour le code

Merci.

Roman Shiredchenko:

vous avez une confusion sur les variables et les fonctions, si c'est une fonction, essayez ceci :

ALT + S

Oui, c'est une fonction.

Merci, mais cela donne une erreur pour une raison quelconque.

'}' - tous les chemins de contrôle ne renvoient pas une valeur

bien que je semble avoir tout vérifié correctement à la fois dans mon code et dans un modèle vide.

ALT + S - Merci, je vais en tenir compte.

 
wolder1:

Merci.

Oui, c'est une fonction.

Merci, mais pour une raison quelconque, cela donne une erreur

'}' - tous les chemins de contrôle ne renvoient pas une valeur

Bien que les parenthèses semblent être correctes, à la fois dans mon code et dans le modèle vide.

ALT + S - merci, je vais en tenir compte.

Une bonne question contient la réponse (C)

 
wolder1:

Merci.

Oui, c'est une fonction.

Merci, mais pour une raison quelconque, il donne une erreur

'}' - tous les chemins de contrôle ne renvoient pas une valeur

Bien que j'aie vérifié que tout était correct avec des crochets à la fois dans mon code et dans un modèle vide.

ALT + S - merci.

La fonction double doit retourner une valeur, pas si la fonction est nulle .

si vous avez des variables définies ci-dessus dans votre code, elles peuvent être commentées + vous aviez des espaces supplémentaires ici (Bid > = L8b)) - J'ai fait un montage :

double lot=0; //, Lots;
//   double L0a3, L2a3, L5a3, L8a3, L0b1, L2b1, L5b1, L8b1, L0a, L2a, L5a, L8a,L0b,L2b,L5b,L8b,L0a1,L2a1,L5a1,L8a1,L0b3,L2b3,L5b3,L8b3;  
double _LOTS()
  {
   double lot=0, Lots;
   double L0a3, L2a3, L5a3, L8a3, L0b1, L2b1, L5b1, L8b1, L0a, L2a, L5a, L8a,L0b,L2b,L5b,L8b,L0a1,L2a1,L5a1,L8a1,L0b3,L2b3,L5b3,L8b3;  
   if((Ask <= L0a3) || (Ask <= L2a3) || (Ask <= L5a3) || (Ask <= L8a3) || (Bid >= L0b1) || (Bid >= L2b1) ||
      (Bid >= L5b1) || (Bid >= L8b1))
      {
       lot=(NormalizeDouble(Lots, 2));
       Print(" lot = ", lot); 
       return(lot);
      }
      
    if((Ask <= L0a) || (Ask <= L2a) || (Ask <= L5a) || (Ask <= L8a) || (Bid >= L0b) || (Bid >= L2b) ||
      (Bid >= L5b) || (Bid >= L8b))
      {
       lot=(NormalizeDouble((Lots*1.5), 2));
       Print(" lot = ", lot); 
       return(lot);
      }
     
    

   if((Ask <= L0a1) || (Ask <= L2a1) || (Ask <= L5a1) || (Ask <= L8a1) || (Bid >= L0b3) ||
      (Bid >= L2b3) || (Bid >= L5b3) || (Bid >= L8b3))      
      {
       lot=(NormalizeDouble((Lots*2.5), 2));
       Print(" lot = ", lot); 
       return(lot);
      }
    return(lot);  
  } 
 

Bonjour.

Question. Dans le testeur, à l'interface côté jour (lorsque la ligne du jour suivant passe), le programme aurait dû placer un ordre en attente. L'ordre en attente qui était déjà présent et que le prix a touché, a été ouvert mais l'instruction d'ouvrir un autreordre en attente a été ignorée par le système pour une raison quelconque. Cela peut-il également se produire dans un compte réel où les instructions du robot sont simplement ignorées et où l'action requise n'est donc pas exécutée ?


Et une autre question. J'utilise un testeur de stratégie, mais j'ai été très troublé par le fait qu'il passe une semaine environ dans la visualisation, puis affiche le message suivant

177564 événements tick (447 barres, 7888506 états de barre) traités en 0:17:42.694 (temps total 0:17:48.217)

177564 événements tick (447 barres, 7888506 états de barre) traités à 0:17:42.694 (temps total 0:17:48.217)

Je ne comprends pas, il est trop occupé pour continuer à faire des tests ? Ou bien il est si attentionné et s'inquiète des ressources de mon ordinateur ? Je ne vois pas de messages d'erreur. Il s'arrête simplement de lui-même. Bien que j'aie fixé la date non pas à 7 jours, mais à 7 mois. J'aimerais voir l'ensemble du parcours de test du début à la fin.

Quelle religion ne lui permet pas de faire un test visuel, par exemple pendant un an ou plusieurs années ? Et vous pouvez voir visuellement comment votre programme a fonctionné au cours de l'année précédente, par exemple.


Et une dernière question. (Bien qu'elle puisse rester sans réponse)) ) Comment se peut-il que le testeur 2 tours fonctionne comme il le devrait, et juste avant l'inscription susmentionnée sur le jour ignore tout simplement toutes les instructions. Comment est-il possible que le programme ait fonctionné correctement pendant plusieurs tours (il a ouvert des ordres puis les a fermés), et puis, boum, il ignore tout. Il ne s'ouvre ni ne se ferme. Est-ce à cause de la fin d'une période d'essai ou y a-t-il d'autres raisons ?

 

Bon après-midi ! !!

J'ai besoin de l'heure de la dernière commande fermée.

J'ai écrit une fonction, mais elle ne fonctionne pas correctement.

//+------------------------------------------------------------------+

//| Heure de clôture de la dernière commande

//+------------------------------------------------------------------+

double Last_Ticets_Close()

{

Last_Ticet = 0 ;

Last_OrClTime = 0 ;


for(int i=0 ; i<OrdersTotal() ; i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY ))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)

{

if(Last_Ticet<OrderTicket())

{

Last_Ticet = OrderTicket() ;

Last_OrClTime = OrderCloseTime() ;

}

}

}

}

retourner (Last_Ticet) ;

}

Quelqu'un peut-il me dire ce qui ne va pas ?

 
142vs:

Bon après-midi ! !!

J'ai besoin de l'heure de la dernière commande fermée.

J'ai écrit un f-iio, mais il ne fonctionne pas correctement.

Quelqu'un peut-il suggérer ce qui ne va pas ?

lors de la recherche d'une heure ultérieure, comparez les heures, pas les billets