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

 

Bonjour.
La fonction OrderSelect renvoie l'erreur 0 (ERR_NO_ERROR - La transaction commerciale a été réussie) ? ??
Comment éviter cette erreur ?
Je joins le code du programme et les écritures de journal.
Respectueusement. Shurkin.

//+------------------------------------------------------------------+
//|                                                    PoligonTd.mq4 |
//|                                           17 сентября 2013 года. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "17 сентября 2013 года."
#property link      ""

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----Функция OrderSelect--------------------------------------------+
string Str="#20552937 buy 1.00 GBPUSD at 1.55450";//Строка
int Tct=StrToDouble(StringSubstr(Str,1,9));//Номер ордера
   if(OrderSelect(Tct,SELECT_BY_TICKET)==true)//Выбор ордера по номеру
string OdSmb=OrderSymbol();//Символ ордера
   else Print("OrderSelect() вернул ошибку - ",GetLastError());
Print("Кс:"," Str=",Str,"; Tct ",Tct,"; OdSmb ",OdSmb,"?");//Кс
//----
   return(0);
  }
//+------------------------------------------------------------------+

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : supprimé
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : uninit reason 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : Ks : Str=#20552937 buy 1.00 GBPUSD at 1.55450 ; Tct 20552937 ; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : OrderSelect() a renvoyé une erreur - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : chargé avec succès

 
Shurkin:

Bonjour.
La fonction OrderSelect renvoie l'erreur 0 (ERR_NO_ERROR - La transaction commerciale a été réussie) ? ??
Comment éviter cette erreur ?
Je joins le code du programme et les écritures de journal.
Regards. Shurkin.

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : supprimé
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : raison uninit 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : Kc : Str=#20552937 acheter 1.00 GBPUSD à 1.55450 ; Tct 20552937 ; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : OrderSelect() a renvoyé une erreur - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily : chargé avec succès

En fait, il n'y a pas d'erreur de sélection, la commande avec un tel ticket n'existe pas.
 
Sepulca:
En fait, il n'y a pas d'erreur de sélection, la commande avec un tel ticket n'existe pas.

Eh bien... S'il n'y a pas de commande avec ce ticket, OrderSelect() retournera false.

Donc, il semble y avoir une erreur, puisque nous passons à autre chose. La question est de savoir pourquoi il n'y a pas d'erreur.

 

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 !

 

Je pense abandonner la fonction spéciale init(). Je pense que c'est la bonne solution, n'est-ce pas ?

La façon dont je vois les choses est la suivante :

1. déclarer une variable de manière globale, par exemple, comme ceci :

gInitTrue = false;

Ensuite, nous créons notre propre INIT :

bool myInit()
{
  // Инициализируем..
  // неоходимые..
  // нам..
  // переменные..
  return(true);
}

Au tout début du début, comme ça :

if (gInitTrue == false)
    myInit();
Il serait intéressant d'entendre l'avis de personnes plus expérimentées sur la pertinence de cette approche, ainsi que sur la justesse de la solution que je propose pour résoudre ce problème.
 
Sepulca:

Plus de tampons.

Oups, j'ai eu l'erreur. J'ai également dû ajouter 2 couleurs, pour 2 tampons.
 
hoz:

Je pense abandonner la fonction spéciale init(). Je pense que c'est la bonne solution, n'est-ce pas ?

La façon dont je vois les choses est la suivante :

1. déclarer une variable de manière globale, par exemple, comme ceci :

Ensuite, nous créons notre propre INIT :

Au tout début du début, comme ça :

Il serait intéressant d'entendre l'avis de personnes plus expérimentées sur la pertinence de cette approche, ainsi que sur la justesse de la solution que je propose pour résoudre ce problème.

Quelle est la nouveauté de sentir une nouvelle solution ? :-))

On baise. Je n'ai jamais eu besoin de le faire de cette façon.

 
artmedia70:

Eh bien... S'il n'y a pas de commande avec ce ticket, OrderSelect() retournera false.

Donc, il semble y avoir une erreur, puisque nous passons à autre chose. La question est de savoir pourquoi il y a zéro.



J'ai vérifié - si le numéro du ticket correspond - tout fonctionne bien,

Si non - la fonction renvoie False, mais OrderSelect() est silencieux car rien ne se passe, ZERO et rien ne se passe.

 
Zhunko:

Quelle est la nouveauté de sentir une nouvelle solution ? :-))

Une putain de chose. Je n'ai jamais eu besoin de le faire de cette façon.



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 ! Par conséquent, ce n'est pas vraiment la bonne option.
 

La question est ennuyeuse, mais la réponse n'est 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)))