Trouble de l'erreur il n'y a pas d'opérations commerciales - page 6

 

Ce problème est encore plus intéressant. J'ai construit un EA simple basé sur le code du post ci-dessus. Il ouvre également 5 transactions, chacune sur le marché pendant 5 minutes, puis les ferme. Voici le code :

#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static int test_ticket[2]={0,0};
   if(test_ticket[1]<5 && test_ticket[0]==0) {
      test_ticket[0]=OrderSend(_Symbol,OP_BUY,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),NormalizeDouble(Ask,_Digits),30,0.0,0.0,"test",33333,0,clrNONE);
      if(test_ticket[0]>0) test_ticket[1]++;
   }   
   if(OrderSelect(test_ticket[0],SELECT_BY_TICKET))
      if(OrderCloseTime()==0 && OrderOpenTime()+300<TimeCurrent())
         if(OrderClose(test_ticket[0],OrderLots(),NormalizeDouble(Bid,_Digits),30,clrNONE)) {
            printf("Test order closed, ticket #%d",test_ticket[0]);
            test_ticket[0]=0;
         }   
   
  }
//+------------------------------------------------------------------+

Il a passé la validation du premier coup, mais il n'y a pas de transactions sur NZDUSD. Pourquoi ?


Même si le validateur définit un dépôt insuffisant pour l'ouverture avec un lot minimal, l'erreur 134 apparaîtra comme dans le message ci-dessus. Mais il n'y a pas d'échanges ! Pourquoi ?

Peut-être le validateur fonctionne-t-il mal ou y a-t-il une explication raisonnable ?

 
Renat Akhtyamov:

et vous mettez d'abord la réponse complète du validateur ici.

Et qu'est-ce qui vous fait penser que le valideur attribue les billets selon le principe que vous avez inventé ?

pour ouvrir 5 positions, il faut compter le nombre de positions ouvertes, sans s'embêter avec les tickets.

Renat, c'est ce que je pense que les transactions sont, regardez de plus près. Vous pouvez même exécuter mon code dans le testeur. Il y a un tableau de deux valeurs : test_ticket[0] - stocke l'ordre des tickets, test_ticket[1] - nombre de tentatives.

En changeant le nombre de tentatives dans la première condition, vous pouvez ouvrir un nombre différent d'affaires.

if(test_ticket[1]<5 && test_ticket[0]==0) {
 

C'est ce qui s'est passé lors des tentatives suivantes, avec des nombres de commandes différents.


Et ici, lors d'une des tentatives suivantes, le validateur utilise en fait le lot minimum, qui ne peut sciemment pas être ouvert avec un dépôt de 1 $. La question est de savoir pourquoi il n'y a pas eu d'échanges sur les tentatives plus tôt. Et pourquoi cette exécution utilise-t-elle un lot et un dépôt minimum sciemment erronés qui déclenchent une erreur de validation ?

Vladimir Karputov:

...

Dans l'ensemble, le validateur s'est jusqu'à présent acquitté de sa tâche principale : éliminer le code incomplet du marché.

Mmm...

Et ce n'est pas un tir au hasard. Voici les trois tentatives suivantes.


 

L'erreur dans le journal "Pas d'argent pour ouvrir telle ou telle transaction..." indique que vous avez bien envoyé un ordre de transaction, mais que vous n'avez pas tout vérifié (ou pas tout) au préalable. L'article fournit un algorithme clair pour la vérification.


Rappelez-vous - l'erreur "il n'y a pas d'argent pour ouvrir telle ou telle affaire...". - représente 99% de l'erreur dans la logique de l'Expert Advisor. Ce sont les contrôles manquants (ou l'absence totale de contrôles). C'est le signe d'une compréhension insuffisante des principes de codage.


Rappelez-vous : dans le monde réel, le dépôt peut être de 1 $, et l'effet de levier n'est pas toujours de 1:100, et le lot minimum peut être de 0,01 et 0,02 et 0,30 et 1,0, et beaucoup d'autres choses...

 
Vladimir Karputov:

L'erreur dans le journal "Pas d'argent pour ouvrir telle ou telle transaction..." indique que vous avez bien envoyé un ordre de transaction, mais que vous n'avez pas tout vérifié (ou pas tout) au préalable. L'article fournit un algorithme clair pour la vérification.


Rappelez-vous - l'erreur "il n'y a pas d'argent pour ouvrir telle ou telle affaire...". - représente 99% de l'erreur dans la logique de l'Expert Advisor. Ce sont les contrôles manquants (ou l'absence totale de contrôles). C'est le signe d'une compréhension insuffisante des principes de codage.


Rappelez-vous : dans le monde réel, le dépôt peut être de 1 $, et l'effet de levier n'est pas toujours de 1:100, et le lot minimum peut être de 0,01 et 0,02 et 0,30 et 1,0, et beaucoup d'autres choses...

Vladimir, vous avez raté l'éléphant. La principale erreur était.

Je peux répondre dans votre langue et vous donner un cours.

 
Vladimir Karputov:

L'erreur dans le journal "Pas d'argent pour ouvrir telle ou telle transaction..." indique que vous avez bien envoyé un ordre de transaction, mais que vous n'avez pas tout vérifié (ou pas tout) au préalable. L'article fournit un algorithme clair pour la vérification.


Souvenez-vous de l'erreur "il n'y a pas d'argent pour ouvrir un tel ou un tel commerce...". - représente 99% de l'erreur dans la logique de l'Expert Advisor. Ce sont les contrôles manquants (ou l'absence totale de contrôles). C'est le signe d'une compréhension insuffisante des principes de codage.


Rappelez-vous : dans le monde réel, le dépôt peut être de 1 $, et l'effet de levier n'est pas toujours de 1:100, et le lot minimum peut être de 0,01 et 0,02 et 0,30 et 1,0, et beaucoup d'autres choses...

Vladimir, je ne comprends pas si vous lisez les messages en général, ou si vous vous contentez de repérer les photos intéressantes. Relisez tout attentivement ou plusieurs fois depuis le début de la page au moins. Et lisez le code ! Je ne veux même pas prendre la peine de vous expliquer tout ça !

 
Andrey Kaunov:

Je ne veux même pas prendre la peine de tout t'expliquer !

Andrew, personne ne veut répéter ce qui a déjà été écrit et mâché.

 
Oui, mais le problème est évident. Peut-être que quelqu'un de ce site fort essaiera de l'analyser et de vérifier le validateur. Le simple code transparent sans paramètres ne fonctionne pas sur les contrôles NZDUSD et GBPUSD parfois. Et si nous ajoutons certaines conditions et qu'il n'y aura pas de transactions sur l'or également, nous recevrons à nouveau l'erreur d'absence d'opérations commerciales et de contrôle manqué.
 
Andrey Kaunov:
Oui, mais le problème est là. Peut-être que quelqu'un de ce site fort essaiera de le comprendre tout de même et vérifiera le validateur. Le code simple et transparent sans paramètres ne fonctionne pas du tout pour les contrôles NZDUSD et GBPUSD parfois. Et si nous ajoutons certaines conditions et qu'il n'y aura pas de transactions sur l'or également, nous recevrons à nouveau l'erreur d'absence d'opérations commerciales et de contrôle manqué.

Ne vous fiez pas au fait que le validateur renvoie un code d'erreur figurant dans la liste des erreurs du serveur commercial. Consignez toujours vous-même le message d'erreur. Lisez attentivement ce qui est écrit dans l'article que vous connaissez sur l'impossibilité d'exécuter l'ordre et ce que vous devez faire dans ce cas.

Il est tout à fait possible que l'absence de message d'erreur dans le journal, par exemple le calcul de la taille du lot, soit la cause des erreurs de validation.

 
Andrey Kaunov:

C'est ce qui s'est passé lors des tentatives suivantes, avec des nombres de commandes différents.


Et ici, lors d'une des tentatives suivantes, le validateur utilise en fait le lot minimum, qui ne peut sciemment pas être ouvert avec un dépôt de 1 $. La question est de savoir pourquoi il n'y a pas eu d'échanges sur les tentatives plus tôt. Et pourquoi cette exécution utilise-t-elle un lot et un dépôt minimum sciemment erronés qui déclenchent une erreur de validation ?

Hmmm...

Et ce n'est pas un tir au hasard. Voici les trois tentatives suivantes.


Erreur lors de l'envoi d'un ordre de transaction 134 ...

Le testeur a-t-il écrit cette erreur ? Si oui, c'est aussi l'une des causes des erreurs de validation. Vous devez calculer vous-même la possibilité d'ouvrir une position et, si cela est impossible, écrire votre propre message sur l'impossibilité de négocier avec les paramètres définis dans le journal, au lieu d'envoyer un ordre sciemment incorrect au serveur en comptant sur le terminal et le serveur pour faire tout à votre place. Avec de tels ordres incorrects, vous pouvez inonder le serveur et être ensuite interdit d'auto-trading en toute sécurité. C'est votre faute, pas celle du validateur.

Raison: