[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 86

 
okvseok:

veuillez suggérer une fonction qui compte le nombre d'ordres perdants (à partir du dernier) jusqu'au dernier take profit...

Merci !

Vous pourriez essayer comme ça :
//+----------------------------------------------------------------------------+
// Убыточно ли закрылся последний ордер, и подсчет количества
int fHistory(){
  int loss = 0;
  for(int i=OrdersHistoryTotal()-1; i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() < 0 ) loss = loss++;                 // Если убыток по посл.ордеру - считаем
        
        if(OrderProfit() > 0 ) return(loss);                  // Если прибыль, вернем количество убыточных
     }
  }
  return(-1);
}
 

Combien de fois dois-je appelerOrderSelect avant d'utiliser OrderProfit(), OrderType() etc. ? Est-ce qu'une fois dans Start suffit ou dois-je appelerOrderSelect à chaque fois avant d'utiliser OrderProfit, OrderType etc...?

et est-ce que OrderSelect doit être appelé immédiatement avant OrderProfit ou peut-il être appelé n'importe où au début, du moment qu'il est ? ??

 
hoz:

J'ai écrit la question, mais personne n'a semblé la remarquer. Je ne voulais pas écrire une question aussi longue ici pour ne pas embrouiller tout le monde. Veuillez noter...

https://www.mql5.com/ru/forum/142983

Essayez de cette façon :

int OrderCloseCount(double ordOpPrice, datetime ordOpTime)
{
  // slippage= Взять из OrderSend
  int timePlusMinus=20; // Пусть будет 20 сек.
  int count = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0 ; i--)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderSymbol() != Symbol()) continue;
          if (MathAbs(OrderOpenPrice()-ordOpPrice) <= slippage*Point && MathAbs(OrderOpenTime()-ordOpTime))< timePlusMinus)
              count++;
  }
  
   return (count);
}

Parce qu'il n'y a aucune garantie que vos ordres se soient ouverts exactement au même prix et au même moment.

 
hoz:

J'ai écrit la question, mais personne n'a semblé la remarquer. Je ne voulais pas écrire une question aussi longue ici pour ne pas embrouiller tout le monde. Veuillez noter...

https://www.mql5.com/ru/forum/142983

Je vous ai déjà donné un algorithme approximatif dans ce fil (légèrement corrigé ici pour mieux comprendre certaines nuances) et il n'est pas nécessaire de commencer un potager :


L'algorithme est aussi simple qu'un bagel.

La fermeture partielle ne change pas le Magic. Le billet change, mais pas le Magic.

Il y a une pose ouverte et des niveaux où cette pose devrait être partiellement fermée.

Supposons que le niveau 1, le niveau 2 et le niveau 3.

Si la position d'achat est bénéficiaire et que Bid >= Level1 && Bid< Level2 ---> nous fermons la première partie de la position (avec le lot qui est plus petit que le lot de cette position, à condition que le lot restant ne soit pas inférieur au lot minimum), alors :

Si Bid >= Level2 && Bid< Level3 ---> fermer la deuxième partie de la position (par un lot plus petit que le lot de cette position, à condition que le lot restant ne soit pas inférieur au lot minimum), ensuite :

Si Bid >= Level3 && Bid<Level4 ---> fermer la troisième partie de la position (par un lot plus petit que le lot de cette position, à condition que le lot restant ne soit pas inférieur au lot minimum), ensuite :

1. Si lors de la fermeture partielle au niveau Bid>=LevelX le lot est devenu inférieur au lot minimum ---> fermer la position entière.

2) Si après la troisième clôture au niveau Bid>=Level3 il reste une position, soit accompagner la position restante d'un chalutage après le passage du niveau4, soit la clôturer en une seule fois.

C'est tout.

Pour la vente, nous examinons la demande : Demande<=Niveau1 && Demande>Niveau2 ... etc. ...

Faire une boucle sur toutes nos positions, sélectionner chacune d'entre elles par indice, calculer ses niveaux et ses lots de clôture pour la position sélectionnée et profiter de l'algorithme de travail ... :)

En même temps, il n'est pas nécessaire de stocker dans la mémoire de l'EA (dans des variables) les valeurs de ces niveaux, ce qui est très pratique - si l'EA, pour une raison quelconque, termine son travail, après la reprise, il ne perdra pas les données sur les niveaux - il les recalculera pour chaque position à la volée.

Une dernière chose : après une clôture partielle, n'oubliez pas de retracer le stop de protection. Après la clôture au niveau 1 - stop au seuil de rentabilité, après la clôture au niveau 2 - stop au niveau 1, après la clôture au niveau 3 - stop au niveau 2, etc...


 
Bonjour à tous, quelqu'un a-t-il un exemple d'un Expert Advisor utilisant un indicateur personnalisé?
 
dimarik0000:
Bonjour à tous ! Est-ce que quelqu'un a un exemple d'une EA utilisant un indicateur personnalisé ?
Quel est le problème ?
 
artmedia70:
Quel est le problème ?


J'ai lu l'article sur le transfert d'un indicateur personnalisé vers le code du conseiller expert et je suis confus. Dois-je le faire ou est-il suffisant de spécifier certains paramètres de l'indicateur dans le code ?
 
dimarik0000:

J'ai lu l'article sur le portage d'un indicateur personnalisé dans le code du conseiller expert et je suis confus, dois-je le faire ou est-il suffisant de spécifier seulement certains paramètres spécifiques de l'indicateur dans le code ?
Si vous n'avez pas beaucoup d'expérience, vous feriez mieux d'utiliser iCustom() ou de bien étudier et comprendre le principe de fonctionnement de l'indicateur avant d'ajouter sa logique au Conseiller Expert.
 

713
borilunad 15.01.2013 12:10

Pourriez-vous résoudre un mystère : pourquoi, lorsque j'ai inséré cette fonction || isCloseLastPosByTake() == True ||, l'expert du testeur a commencé à ralentir considérablement, multiplié par 10 ! C'est l'une des 4 conditions mutuellement exclusives, je ne peux donc pas utiliser la chaîne if comme dans les conditions additionnées pour accélérer le code. Que pouvez-vous me conseiller ? Merci d'avance pour vos conseils !

 
sergeev:

713
borilunad 15.01.2013 12:10

Pourriez-vous résoudre un mystère : pourquoi, lorsque j'ai inséré cette fonction || isCloseLastPosByTake() == True ||, l'expert du testeur a commencé à ralentir considérablement, multiplié par 10 ! C'est l'une des 4 conditions mutuellement exclusives, je ne peux donc pas utiliser la chaîne if comme dans les conditions additionnées pour accélérer le code. Que pouvez-vous me conseiller ? Merci d'avance pour vos conseils !

Cette fonction passe en revue les ordres pour trouver la dernière clôture à la valeur de prise. Retravaillez cette fonction pour l'accélérer. Ils sont tous universels dans le cas de Kim, ce qui signifie que vous pouvez vous débarrasser de beaucoup de choses inutiles à partir de là. Là encore, tout dépend de la logique de votre conseiller expert.