AIDEZ QUI PEUT ! !!

 

Coincé dans un problème

for(int i = 0; i < OrdersTotal(); i++)
  {
    
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;


Le sélecteur trouve un ordre s'il y a une position ouverte mais s'il n'y a pas de positions ouvertes, comment puis-je le trouver ? le sélecteur montrera toujours la dernière position fermée...
 
sllawa3:

Coincé dans un problème


Le sélecteur trouve un ordre s'il est ouvert, mais s'il n'y a pas de positions ouvertes, comment puis-je le trouver ? Le sélecteur affichera toujours la dernière position fermée...
avec le drapeau
MODE_TRADES
, le "Sélecteur" ne montrera pas du tout les positions fermées, mais seulement les positions ouvertes. S'il n'y a pas de positions ouvertes, la boucle ne démarrera même pas car la condition sera fausse.
 
Techno:
avec le drapeau
Le "sélecteur" ne montrera pas du tout les positions fermées, mais seulement les positions ouvertes. S'il n'y a pas de positions ouvertes, la boucle ne démarrera même pas car la condition sera fausse.

Je sais qu'il ne démarrera pas et qu'il sauvegardera la dernière position déjà fermée... c'est ce que j'ai écrit... vous pouvez vérifier les positions ouvertes en utilisant un ordre Select mais comment puis-je vérifier l'absence de positions ?
 
sllawa3:

Exactement, il ne démarre pas et sauvegarde la dernière pose déjà fermée... c'est ce qu'il dit...
Je ne comprends pas ce que ça dit. Même maintenant, que voulez-vous dire par "sauve une position fermée" ? Si nous parlons de calculer des positions, comme je ne peux que le supposer, toutes les variables (pour stocker le nombre d'ordres) doivent être mises à zéro au début de la fonction de démarrage. C'est-à-dire avant la boucle. S'ils restent vides après la boucle, cela signifie qu'il n'y a pas de postes.
 
un morceau de code au début du sujet... s'il n'y a pas de position alors DS reste =1 jusqu'à ce qu'un nouvel ordre apparaisse... même si la commande a été clôturée... juste la sélection et ne commencera pas... qu'est-ce qu'il ne faut pas comprendre...
 
Techno:
quelque chose n'est pas clairement écrit. Même aujourd'hui, que signifie "garder la position fermée" ? Si nous parlons de calculer des positions, comme je ne peux que le supposer, alors toutes les variables (pour stocker le nombre d'ordres) doivent être remises à zéro au début de la fonction de démarrage. C'est-à-dire avant la boucle. S'ils restent vides après la boucle, cela signifie qu'il n'y a pas de postes.

DS est initialement écrit comme int = 0 avant la boucle
 
Techno:


donc il ne se réinitialisera pas si le cycle ne démarre pas, et il ne démarrera pas s'il n'y a pas de poses
 
sllawa3:

DS est initialement prescrit comme int = 0 avant le cycle
Ah, bien, si c'est prescrit et que 0 est attribué, alors cela ne peut pas être un problème, sinon pourquoi serait-il égal à un ? Est-il affecté à zéro dans la fonction de démarrage ou au-dessus ?
 
au-dessus de
 
Il se peut qu'il n'y ait pas de problème, mais il y en a un... Essayez-le et voyez par vous-même.
 
Que pensez-vous de ça ?
DS=0;
for(int i = 0; i < OrdersTotal(); i++)
  {
    if (DS==0) DS=-1;
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;
}
if (DS==0) // поз никаких нет
if (DS==-1) // позы есть, но нету БАЙ
if (DS==1) // есть БАЙ