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

 

Le problème est que ces tickets sont plus d'un. peut-être 4, je ne sais pas encore exactement. c'est pourquoi j'ai créé une classe avec le numéro de ticket et d'autres informations qui ne sont pas stockées par orderselect. je voulais donc avoir accès au ticket. mais jusqu'à présent, je ne peux que créer des objets de classe et les mettre dans CarrayObj et ensuite obtenir l'index, comparer le ticket et analyser plus avant. Mais j'ai résolu le problème, merci. Je m'en veux ailleurs. MessieursevilliveAlexeyVik - merci pour vos réponses rapides !

 
Bonjour ! S'il vous plaît écrire pourquoi dans le testeur de stratégie n'ouvre pas de trades, écrit dans l'erreur de journal : (2015.07.13 00:22:39.218 TestGenerator : erreur de données non appariées (la valeur élevée 1.31150 à 2013.07.11 05:00 n'est pas atteint à partir de la trame temporelle la plus basse, le prix élevé 1.31140 mismatches) citations mises à jour. Voici le code de l'Expert Advisor :
int ticket;
int init;

int start()
{

int bars0;
int bars1;
int bars2;
int bars3;
int   stoploss=50; 
int   takeprofit=30;
int       slipage=2;

//-------------------------------------------------------------------+
  
  if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
      if (  Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
      if(V1()==true) 
     
       ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
     
//-------------------------------------------------------------------+ 
    if ( OrdersTotal()<1 &&  Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
     if (  Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
      if(V2()==true) 
     
       ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,slipage,Bid+stoploss*Point,Bid-takeprofit*Point,"",123,0,Red);
      
    
         
//-------------------------------------------------------------------+                    
 return;}
//+------------------------------------------------------------------+
bool V1( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
      return(false);
   }
  }    
 }
 return(true); 
}

bool V2( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if(OrderType()==OP_SELL) {
      return(false);
   }
  }
 }
 return(true); 
}

)
 
rylay:
Bonjour ! S'il vous plaît écrire pourquoi dans le testeur de stratégie n'ouvre pas de trades, écrit dans l'erreur de journal : (2015.07.13 00:22:39.218 TestGenerator : erreur de données non appariées (la valeur élevée 1.31150 à 2013.07.11 05:00 n'est pas atteint à partir de la trame temporelle la plus basse, le prix élevé 1.31140 mismatches) citations mises à jour. Voici le code de l'Expert Advisor :
)

En ce qui concerne l'erreur de test mentionnée, ce sera toujours le cas lors des tests sur les ticks. L'historique des cotations dans MT4 n'est pas parfait, il y a toujours des décalages.

Le code est plein d'erreurs. Les variables ne sont pas initialisées, la fonction de démarrage ne comprend pas ce qu'elle renvoie, il n'y a pas de contrôle de l'exécution des fonctions de trading, alors merci de le corriger.

Ajoutez #property strict au début du code.

Et puisque nous avons créé deux fonctions pour définir les types d'ordres, pourquoi ne pas intégrer le compteur des ordres de chaque type et écrire if ( OrdersBuy<1...), if ( OrdersSell<1...) au lieu de comparer if( OrdersTotal()<1...) ? Ce serait plus correct.

 

Veuillez m'indiquer comment ouvrir une seule transaction dans les conditions d'une barre, si la transaction a lieu à l'intérieur de la barre, mais qu'au moment de la fermeture le signal d'ouverture apparaît immédiatement sur la même barre.

En d'autres termes, la barre a donné un signal pour ouvrir un ordre. Il a été ouvert et une courte prise a été déclenchée. La transaction a été fermée mais l'EA ferme la première et ouvre immédiatement la seconde avec exactement le même ordre car nous avons toujours la condition pour l'ouvrir dans la même barre. J'ai besoin d'ouvrir une seule position sur une barre. Et pour ouvrir le prochain trade, nous devons attendre l'ouverture d'une autre barre.

 
Poinson:

Veuillez m'indiquer comment ouvrir une seule transaction dans les conditions d'une barre, si la transaction a lieu à l'intérieur de la barre, mais qu'au moment de la fermeture le signal d'ouverture apparaît immédiatement sur la même barre.

En d'autres termes, la barre a donné un signal pour ouvrir un ordre. Il a été ouvert et une courte prise a été déclenchée. La transaction a été fermée mais l'EA ferme la première et ouvre immédiatement la seconde avec exactement le même ordre car nous avons toujours la condition pour l'ouvrir dans la même barre. J'ai besoin d'ouvrir une seule position sur une barre. Et nous attendons l'ouverture d'une autre barre pour ouvrir le prochain trade.

L'option _déjà ouvert = faux ;

if (isNewBar()){ _already opened = false;}

si ( !OrderSend(...) ) { /* traitement des erreurs */ ; } else { _already opened = true ; }

isNewBar() - standard, comme dans les articles, utilisant un datetime statique date = Time[0] ;

if (_already opened) { return ; //does not send the warrant }

 
evillive:

En ce qui concerne l'erreur du testeur mentionnée, ce sera toujours le cas lors des tests sur les ticks. L'historique des cotations dans MT4 est imparfait, il y a toujours des décalages.

Le code est plein d'erreurs. Les variables ne sont pas initialisées, la fonction de démarrage ne comprend pas ce qu'elle renvoie, il n'y a pas de contrôle de l'exécution des fonctions de trading, alors merci de le corriger.

Ajoutez #property strict au début du code.

Et puisque nous avons créé deux fonctions pour définir les types d'ordres, pourquoi ne pas intégrer le compteur des ordres de chaque type et écrire if ( OrdersBuy<1...), if ( OrdersSell<1...) au lieu de comparer if( OrdersTotal()<1...) ? Ce serait plus correct.

Merci. Je vais le corriger. C'est juste que quand il y avait une condition :
if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0]
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
ça ne marchait pas bien, alors j'ai demandé.
 
danik:

bool _already opened = false ;

if (isNewBar()){ _already opened = false;}

si (!OrderSend(...) ) { /* traitement des erreurs */ ; } else { _already opened = true ; }

isNewBar() - standard, comme dans les articles, utilisant un datetime statique date = Time[0] ;

if (_already opened) { return ; //ne pas envoyer le mandat }

il est indiqué 'isNewBar' - fonction non définie 2015

Je ne suis pas vraiment un magicien. Je voudrais un copier-coller exact si vous le pouvez, s'il vous plaît.

 
Poinson:

il est indiqué 'isNewBar' - fonction non définie 2015

Je ne suis pas vraiment un artisan. Je voudrais un copier-coller exact si possible, s'il vous plaît.

S'il s'agit d'une nouvelle barre, vous pouvez copier et coller la fonction isNewBar(), vous y arriverez peut-être, ce n'est pas compliqué - elle compare le temps d'ouverture d'une nouvelle barre (avec l'indice 0, c'est-à-dire la dernière), s'il est supérieur au précédent, cela signifie qu'une nouvelle barre vient d'apparaître, et si elle est apparue, cela signifie que vous pouvez ouvrir une nouvelle transaction si vous avez d'autres conditions.
 
Poinson:

il est indiqué 'isNewBar' - fonction non définie 2015

Je ne suis pas vraiment un artisan. Je voudrais un copier-coller exact si possible, s'il vous plaît.

Oui dans n'importe quel conseiller dans la kodobase le trouverait !

//в старте перед условиями входа:
      if(NewBar() == true)
      { 
//----------------------
  return(0);
}
// и вне старта:
//----------------------------//  NewBar  \\----------------------------\\
bool NewBar() 
{
  static datetime lastbar = 0;
  datetime curbar = iTime(NULL,15,0);
  if(lastbar != curbar) 
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
} 
 
borilunad:

N'importe quel conseiller dans une kodobase l'aurait trouvé !

Merci ;) Le plus fort simplement ! Tout a fonctionné dès la 1ère fois !

Merci à tous !