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

 
Leonid123456:

pour cette dernière EA)). En fait, ça a marché. C'était le dernier)). Le conseiller expert est destiné à tester... Ainsi, le travail pour plusieurs devises et le trading manuel (ensemble) ne sont pas encore envisagés...

Pouvez-vous me donner quelques conseils pour l'avenir, ce serait bien de savoir comment bien faire...

Merci encore.

Si vous en avez besoin, vous devez distinguer un ordre au marché d'un ordre en suspens. Le premier que vous avez rencontré, selon tous les critères (symbole, magicien, type) est généralement le plus frais. Mais il serait préférable de regarder aussi l'heure d'ouverture pour qu'il ne soit sûrement pas plus jeune.

Dans le testeur, vous pouvez choisir immédiatement

OrderSelect(OrdersTotal()-1,SELECT_BY_POS))

pour travailler avec le dernier ordre ouvert. Si le système n'a pas d'ordres en attente, tout fonctionnera bien. Mais s'il y a à la fois des ordres en attente et des ordres au marché, cela ne fonctionnera pas, sans parler du travail réel.

 
Leonid123456:

pour cette dernière EA)). En fait, ça a marché. C'était le dernier)). Cette EA est destinée à être testée... Ainsi, le travail pour plusieurs devises et le trading manuel (ensemble) ne sont pas encore envisagés...

Pouvez-vous me donner quelques conseils pour l'avenir, ce serait bien de savoir comment bien faire...

Merci encore.

Il est plus correct de ne pas écrire de choses inutiles. Pourquoi avez-vous mis des boucles imbriquées ? Après tout, tout ce dont vous avez besoin peut être fait en une seule boucle avec une seule sélection de commande.

if(New_Bar)
{
OrderSend(Symbol(),OP_BUYSTOP,Lotpers,Ask+step,100,0,0,NULL,MagicNumber,0,DarkTurquoise);
OrderSend(Symbol(),OP_SELLSTOP,Lotpers,Bid-step,100,0,0,NULL,MagicNumber,0,Yellow);
}

 for(int b=0; b<OrdersTotal(); b++)
  {
   if(OrderSelect(b, SELECT_BY_POS) && OrderSymbol() == _Symbol && OrderMagicNumber() == MagicNumber)
    {
     lastlot = OrderLots();
   // Здесь надо в переменную засунуть тикет выбранного ордера
     if(OrderType() == OP_BUYSTOP||OrderType() == OP_BUY)
      orderprisebuy = OrderOpenPrice();
   
      if(OrderType() == OP_SELLSTOP||OrderType() == OP_SELL)
       orderprisecell = OrderOpenPrice(); 
         
        SL_VirtualCell = orderprisecell+step1*Point;
        SL_VirtualBuy = orderprisebuy-step1*Point;

                          /*  if(Mas_Tip[0] >0|| Mas_Tip[1] >0)
                                               {
if (New_Bar&&/*valsar1<Ask &&  osma0>0&&osma1<0    /*&& Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_BUY,NormalizeDouble( lastlot*Marti,2),Ask,100,0,0,NULL,MagicNumber,0,DarkTurquoise);

if (New_Bar&& /*valsar1>Bid && osma0<0&&osma1>0    /* && Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_SELL,NormalizeDouble( lastlot*Marti,2),Bid,100,0,0,NULL,MagicNumber,0,Yellow);       
         
}*/

CheckEvents(MagicNumber); // Вот здесь теряется выбранный ордер при переборе ордеров в вызванной функции

/*if ( eventSellClosed_SL >0|| eventBuyClosed_SL >0)
{        as();
                

 }
  /* ///   if ( eventBuyClosed_TP > 0 )
   //     Alert( Symbol(), ": Buy-позиция закрыта по ТейкПрофиту!" );

   */
    if(eventBuyStopOpened > 0)
     {
      OrderSend(Symbol(),OP_SELLSTOP,NormalizeDouble( Lotpers,5),orderprisecell,0,0,0,NULL,MagicNumber,0,clrKhaki); 
 
      if (OrderType() == OP_SELL)
       OrderClose(OrderTicket(),OrderLots(), Ask, 3,clrIvory );  // Здесь может быть чужой OrderTicket() Возможны и другие аналогичные потери
     }//завершение блока if(eventBuyStopOpened > 0)
 ///

  if(eventSellStopOpened > 0)
  {
  OrderSend(Symbol(),OP_BUYSTOP,NormalizeDouble( Lotpers,5),orderprisebuy,0,0,0,NULL,MagicNumber,0,clrPlum);
 
   if (OrderType() == OP_BUY)
    OrderClose(OrderTicket(),OrderLots(), Bid, 3,clrIvory );  
  }//завершение блока if(eventSellStopOpened > 0)
 }//завершение блока if(OrderSelect(b
}//завершение блока for(int b=0


Je n'ai pas réussi à entrer dans cet endroit où vous avez des commentaires de plusieurs lignes. Il m'a semblé qu'il pouvait y avoir une erreur de compilation... Faites attention à mes commentaires dans le code.

 
Zhunko:
Quel est l'intérêt ?
Merci pour votre aide !
 
AlexeyVik:

N'écrivez pas de choses inutiles. Pourquoi avez-vous mis des boucles imbriquées ? Parce que tout ce dont vous avez besoin peut être fait en une seule boucle avec une seule sélection de commande.


Je n'ai pas réussi à comprendre cet endroit où vous avez des commentaires de plusieurs lignes. Il m'a semblé qu'il pouvait y avoir une erreur de compilation... Faites attention à mes commentaires dans le code.

Il n'y a pas d'erreurs, mais il est suggéré de vérifier les fonctionsOrderSend,OrderClose etOrderDelete.

la valeur de retour de 'OrderSend' doit être vérifiée .

Merci pour vos commentaires.

 

Recherche du minimum de l'indicateur "ZigZag" dans le tableau en utilisant"ArrayMinimum".

Puis-je configurer la recherche pour qu'elle ignore les valeurs nulles ou dois-je utiliser une boucle pour les trouver ?

 
Je n'arrive pas à trouver comment coder. J'ai besoin que l'EA attende un certain temps si la dernière pose n'a pas été rentable. Vous avez une idée ?
 
Forexman77:

Recherche du minimum de l'indicateur "ZigZag" dans le tableau en utilisant"ArrayMinimum".

Puis-je configurer la recherche pour qu'elle ignore les valeurs nulles ou dois-je utiliser une boucle pour les trouver ?

Vous devrez probablement utiliser une boucle
 
Vinin:
Il faudra probablement utiliser une boucle
Merci !
 

Comment trouver la correction la plus profonde entre le maximum et le minimum ? Le maximum et le minimum nous sont connus, ce n'est pas un problème de les trouver en utilisant iHighest et

Si nous utilisons iHighest et iLowest, nous trouverons parfois des quasi-extrêmes, ce qui n'est pas toujours le cas, comme le montre l'image. D'une manière générale, nous avons besoin de l'identification de la formation ABC.

J'ai essayé d'y appliquer ZigZag mais cela ne donne pas de résultats exacts.

е.

 

Forexman77:

Comment trouver la correction la plus profonde entre le maximum et le minimum ? Le maximum et le minimum nous sont connus, ce n'est pas un problème de les trouver en utilisant iHighest et

Si nous utilisons iHighest et iLowest, nous trouverons parfois des quasi-extrêmes, ce qui n'est pas toujours le cas, comme le montre l'image. D'une manière générale, nous avons besoin de l'identification de la formation ABC.

J'ai essayé d'appliquer ZigZag pour cela mais cela ne donne pas de résultats exacts.

Tout sera facile si l'on détermine sur quelle profondeur il faut chercher. Au lieu de iLowest vous pouvez utiliser CopyLow et ArrayMinimum( )

Raison: