[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 544

 
silhouette:

Veuillez m'aider à comprendre le problème de la recherche de divergence sur les oscillateurs correctement. Dans ce cas, il s'agit de MACD. J'ai esquissé l'algorithme suivant :

1) Comptez les barres depuis le début et recherchez les pics sur l'oscillateur :

2) Créez des tableaux contenant les heures de pointe :

et y inscrire la valeur MACD[i] si la condition est remplie. Le dernier nouveau pic doit avoir l'indice [n] et l'avant-dernier [n+1] ;

3) Considérons une autre solution dans la situation (1) :

En fait, le problème avec le point 2 : comment organiser un tel tableau comme dans une série chronologique de sorte que les valeurs soient décalées à chaque nouveau pic ?


Aidez-moi !
 
paladin80:

J'ai décidé de fouiller un peu dans votre code...


Je vous suis très reconnaissant d'avoir analysé mon code. Merci d'avoir pris le temps de le faire.

Je commence tout juste à apprendre la programmation, ces commentaires sont donc très importants et me seront utiles à l'avenir.

Venons-en au fait :

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {   if(OrderSymbol() != Symb) continue;
          if(OrderMagicNumber() != 777) continue;
          return;
      }
   }
}

En réalité, la recherche complète des ordres est effectuée sous cette forme, et l'analyse ultérieure est effectuée en utilisant les ordres ouverts (tout est clair ici).

Symb=  Symbol();
...
Min_Lot= MarketInfo(Symbol(),MODE_MINLOT);
...
Steep=   MarketInfo(Symbol(),MODE_LOTSTEP);

Cette partie du code est également modifiée mais les participants au forum écrivent que l'environnement de marché n'est pas toujours disponible pour la fonction init().

Certaines variables ne sont peut-être pas définies ou je me suis trompé ?

Je ne comprends pas la logique de ce post - (j'explique mon point de vue sur cet opérateur)

while(true)
...

J'ai un bloc de gestion des erreurs.

if (Fun_Error(GetLastError())==1)      // Обработка ошибок
continue;                              // Повторная попытка

Si l'erreur est gérable, il tente à nouveau de vérifier les conditions et d'ouvrir l'ordre.

Et l'opérateur while fonctionne lorsque sa valeur est vraie, c'est-à-dire qu'il s'avère qu'il n'accepte pas le false.

Merci pour votre aide.

 
silhouette:

Aidez-moi !


Lire ici: https://www.mql5.com/ru/articles/1357 C'est simple et direct.

 
r772ra:


Lire ici: https://www.mql5.com/ru/articles/1357 C'est simple et direct.

Merci !
 
Bonjour s'il vous plaît aidez, je ne peux pas ajuster mon Expert Advisor (les ordres d'ouverture et de fermeture ne fonctionnent pas comme prévu (en traversant la stochastique à chaque fois), ouvrir à la stochastique très rarement et je ne peux pas comprendre pourquoi ((((), aussi tous les ordres sont fermés seulement à stoploss ou takeprofit (numéro de ticket d'erreur, aussi ne peut pas comprendre où l'erreur). merci pour toutes les réponses :
Dossiers :
 
Vinin:
N'oubliez pas que l'environnement du marché n'est pas toujours disponible dans init().
Pour être franc, j'ai été très intrigué par cette nouvelle. J'ai essayé d'imaginer dans quelles conditions l'environnement de marché pourrait ne pas être disponible : peut-être une défaillance de la connexion au moment de l'activation de l'EA ou si vous exécutez l'EA le samedi ou le dimanche. Je n'ai pas remarqué de tels problèmes avec le mien. D'une part, ils disent qu'il est possible de faire une boucle dans init() pour trouver une valeur, mais j'ai appris que init() est limité dans le temps. Peut-être au début de start() à l'apparition d'une nouvelle barre (au moins à M1) pour trouver des valeurs de l'environnement du marché, c'est mieux que sur chaque tick.
 
Pacman:


Je vous suis très reconnaissant d'avoir analysé mon code. Merci d'avoir pris le temps de le faire.

...

Et l'instruction while fonctionne lorsque sa valeur est vraie, c'est-à-dire qu'il s'avère qu'elle ne prend pas false.

Dans les while, vous devez placer une condition qui peut prendre au moins deux valeurs, par exemple un drapeau (vrai ou faux). Si le code doit contenir une constante (true) au lieu d'une condition, while est inutile. Enlevez le while (vrai) et les parenthèses et vous obtiendrez le même résultat.
 
Question pour les connaisseurs. Dans l'aide de OrderSend(), le slippage est de 3. Est-ce pour les cotations à 4 chiffres, par exemple ? Pour les citations à 5 chiffres, pouvons-nous laisser 3 ou avons-nous besoin de 30 ?
 
paladin80:
Question pour les conseillers experts. L'OrderSend() à la place du slippage est de 3. Est-ce par exemple pour des cotations à 4 chiffres ? Pour les citations à 5 chiffres, puis-je laisser 3 ou dois-je en avoir 30 ?

Pour les chiffres à 5 chiffres, il en faut 30.

J'insère une telle construction dans init() de chaque EA, puis cela ne fait aucune différence pour les DT à 4 ou 5 chiffres, je le recommande :

  if (Digits==3 || Digits==5){myPoint=Point*10; slpg=slpg*10;}
  else myPoint=Point; 
 
qui sait si la vitesse du test peut être augmentée ?