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

 

Pouvez-vous me dire pourquoi dans le code que j'ai copié sur ce site, le compilateur écrit "undeclared identifier" avantMagic?

for (int pos=0; pos<=OrdersTotal()-1; pos ++) 
{
 if(OrderSelect (pos, SELECT_BY_POS)==true)
  {if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic &&OrderCloseTime()==0) // если у Вас есть отложенные ордера и открытие
  return;}
 else
  Print("OrderSelect() вернул ошибку - ",GetLastError());
}            
 //продолжае
 
VasiliKolchanov:

Pouvez-vous me dire pourquoi dans le code que j'ai copié de ce site avantMagic le compilateur écrit " undeclared identifier" ?

il doit l'être parce qu'il n'est pas déclaré.

déclarez-la au début. ou comme paramètre ou constante du conseiller... ou comme variable, au moins d'une manière ou d'une autre... l'entité doit exister :-)

input int Magic=5566; // это чтобы он был в параметрах и можно поменять

// или const int Magic = 8899;

 
VasiliKolchanov:

Pourriez-vous me dire pourquoi dans le code que j'ai copié sur ce site, le compilateur écrit "undeclared identifier" avantMagic?

Parce que j'ai utilisé l'identifiant Magic, dont le type (et la valeur, respectivement) n'est décrit nulle part. Vous devez déclarer une variable (ou une constante) portant ce nom et lui attribuer une valeur.

 
VasiliKolchanov:

Pouvez-vous me dire pourquoi dans le code que j'ai copié sur ce site, le compilateur écrit "undeclared identifier" avantMagic?

Parce que ce n'est déclaré nulle part dans votre code - c'est évident.
 
Artyom Trishkin:
Parce qu'il n'est déclaré nulle part dans votre code - c'est évident.
Merci à tous !
 

Les gars, dites-moi comment faire et par où commencer !

Exemple : J'ai 15 ordres avec un lot de 0,01. Je dois fermer une ou plusieurs transactions avec un lot de 0,07 à un moment donné.

Ma question est la suivante : comment puis-je clôturer 7 ordres ou 0,07 en un seul OrderClose(...) ?

Si je mets 0,07 en une fois, il ne voit pas les transactions avec un volume de 0,01.

Je suis nouveau dans la programmation

 
Rustam Bikbulatov:

Les gars, dites-moi comment faire et par où commencer !

Exemple : J'ai 15 ordres avec un lot de 0,01. Je dois fermer une ou plusieurs transactions avec un lot de 0,07 à un moment donné.

Ma question est la suivante : comment puis-je clôturer 7 ordres ou 0,07 en un seul OrderClose(...) ?

Si je mets 0,07 en une fois, il ne voit pas les transactions avec un volume de 0,01.

Je suis novice en matière de programmation.

Il n'y a aucun moyen de le fermer par une seule commande. Nous ne pouvons faire qu'une sélection de commandes et par conséquent supprimer chaque commande. Et si vous supprimez l'ordre d'un plus petit volume, vous avez toujours un volume ouvert. Nous le comparons avec notre volume ouvert restant. Nous fermons jusqu'à ce que le volume de 0.07 atteigne sa limite. C'est le seul moyen.

 
Rustam Bikbulatov:

Les gars, dites-moi comment faire et par où commencer !

Exemple : J'ai 15 ordres avec un lot de 0,01. Je dois fermer une ou plusieurs transactions avec un lot de 0,07 à un moment donné.

Ma question est la suivante : comment puis-je clôturer 7 ordres ou 0,07 en un seul OrderClose(...) ?

Si je mets 0,07 en une fois, il ne voit pas les transactions avec un volume de 0,01.

Je suis novice en matière de programmation.

Si le courtier permet d'utiliser le contre-fermeture, vous pouvez ouvrir un ordre opposé avec le volume 0.07, fixant ainsi le prix de profit/perte pour ce volume. Après cela, nous devrions encore effectuer 7 opérations de fermeture opposées (fonction OrderCloseBy()). Il y a encore une opération de trading à exécuter en utilisant cette approche. L'avantage est que les sept ordres sont clôturés à un seul prix.

 

Bonjour à tous.

Veuillez me conseiller sur la vitesse de l'EA, et probablement sur la fiabilité et l'exactitude du code.

Je me réfère aux ordres ouverts et en attente dans chaque tick et les modifier si nécessaire.

Dans le manuel d'OrderSelect, il est écrit :"Lorsque des ordres sont sélectionnés de manière séquentielle à l'aide du paramètre SELECT_BY_POS, les informations sont données dans l'ordre dans lequel elles ont été reçues du serveur commercial."

A partir de là, une question se pose : peut-on créer un tableau, dans lequel nous devrions conserver le type, le prix d'entrée et, par exemple, un commentaire unique de l'ordre ? Pourriez-vous parcourir le tableau à chaque tick et ensuite, si nécessaire, vous adresser à la fonction OrderSelect et effectuer une sélection en utilisant le commentaire unique de l'ordre ?

 
Decromor:

Bonjour à tous.

Veuillez donner votre avis, il s'agit principalement de la rapidité de l'EE et probablement de sa fiabilité et de son exactitude par écrit.

Je me réfère aux ordres ouverts et en attente dans chaque tick et les modifier si nécessaire.

Dans le manuel d'OrderSelect, il est écrit :"Lorsque des ordres sont sélectionnés de manière séquentielle à l'aide du paramètre SELECT_BY_POS, les informations sont données dans l'ordre dans lequel elles ont été reçues du serveur commercial."

A partir de là, une question se pose : peut-on créer un tableau, dans lequel nous devrions conserver le type, le prix d'entrée et, par exemple, un commentaire unique de l'ordre ? A chaque tick, nous devrions parcourir le tableau et, si nécessaire, nous adresser à la fonction OrderSelect et faire une sélection par le commentaire unique de la commande ?

La fonction OrderSelect() est mise en œuvre dans le terminal, et il n'y a pas de demande au serveur. C'est pourquoi il n'y a rien de mal à appeler la liste des ordres à chaque tick. C'est exactement ce que font la plupart des EA.

Et votre question sur le tableau est liée à l'architecture du programme. Dans le cas d'un EA complexe qui fonctionne avec un grand nombre d'ordres, cela est absolument nécessaire. Si le conseiller expert fonctionne avec un seul ordre avec une logique simple, le tableau est redondant.

Il faut seulement mentionner le fait que même si nous avons un tableau de commandes, nous ne pouvons pas nous passer d'appeler OrderSelect(). En effet, nous devons vérifier à chaque tick si l'ordre existe toujours ou non. De plus, ses paramètres peuvent être modifiés.

Raison: