[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 176

 
hoz:


Ce n'est pas l'un ou l'autre, c'est E. Il y a un signe &&.

OU. Parce que la condition ET n' est pas remplie lorsqu'au moins l'un des opérandes est faux (premier OU second) - en logique booléenne, cela s'appelle la"loi de De Morgan".

Je comprends. Mais le point est le suivant :

La variableindex en général par code a la valeur Bar - IndicatorCounted().

C'est-à-dire qu'il est de 1 sur la barre actuelle et de 2 sur la nouvelle.

Il entre dans la fonction IsUpFractal() avec la valeur 1 ou 1 si la barre n'est pas encore nouvelle, n'est-ce pas ?

Ainsi, la variable i aura une valeur fixe puisque l'indice du paramètre d'entrée est également fixe. La boucle s'interrompra donc toujours après la première itération. Quel est alors le but de la boucle ?

À chaque étape du cycle, la variable i est décrémentée de 1 (i--), de sorte que i parcourt toutes les valeurs de l'indice+g_centre-1 à zéro. De plus, remarquez que lorsque l'indicateur démarre pour la première fois, IndicatorCounted() donne 0, c'est-à-dire que l'index sera exécuté sur toutes les barres, donc i se voit attribuer index+g_center-1 à chaque fois et descend ensuite jusqu'à ce qu'il atteigne la barre 0 OU jusqu'à ce que cnt soit égal à g_center, c'est-à-dire jusqu'à ce que la condition de la boucle ne soit pas remplie (enfin, ou jusqu'à ce que return soit appelé dans le corps de la boucle elle-même).
 
alsu:

OU. Parce que la condition ET n' est pas remplie lorsqu'au moins l'un des opérandes est faux (premier OU second) - en logique Buda, on appelle cela"la loi de De Morgan".

Wow. Quel gâchis. Combien de fois ai-je utilisé ces opérateurs... et là, c'est comme sije regardais un nouveau portail. J'ai lu la loi, elle est écrite d'une manière bizarre. Il décrit une situation de déni. Je suppose que cette technique ne s'applique qu'aux situations de déni ? Je veux dire si l'une des variables booléennes n'est pas égale àTrue.

Je me suis rendu compte au fur et à mesure que j'avançais que je ne comprenais pas. En fin de compte, la différence ici est la suivante. C'est un indicateur, c'est pourquoi je ne suis pas habitué à penser de cette façon. Cela signifie qu'au premier appel de l'indicateur, les barres ne sont pas calculées et l'indice sera égal au nombre de barres du graphique ou à la valeur d'une variable limitReCalcBar, si les conditions de calcul des barres sont limitées.

En fait, la variable g_center = 2 d'après le code.limitReCalcBar = 5000 également basé sur des variables externes.

Au premier démarrage de l'indicateur dans la fonction :

//+-------------------------------------------------------------------------------------+
//| Определение наличия верхнего фрактала на указанном баре                             |
//+-------------------------------------------------------------------------------------+
bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

se voit attribuer la valeur 5000 en conséquence.

i = indice + g_centre - 1 = 5000 + 2 - 1 = 5001

Regardons dans la boucle :

for (; i >= 0 && cnt < g_center; i--)

Nous devons calculer 5000 barres. Après les deux premières mesures, c'est-à-dire 0 et 1, la conditioncnt < g_center est fausse. Comment pouvons-nous alors calculer les 5000 barres ? C'est le point que je veux maîtriser. Ça semble être élémentaire pour un pro, mais je ne comprends pas. Bien sûr, si l'on considère l'opérateur && comme un OU, tout se met en place... Mais cela contredit en quelque sorte ce que j'ai déjà utilisé dans les conseillers experts et que j'ai déjà rencontré.

Eh bien, quand tout sera calculé, tout sera simple. Les valeurs 0 et 1 seront transmises à chaque tic par l'intermédiaire de l'indice, les conditions seront remplies dans une boucle et il n'y a aucune difficulté, à ce que je vois.

 

Chers programmateurs ! Pouvez-vous me dire s'il est possible d'écrire un script qui surveille les positions ouvertes et qui, lorsqu'une position atteint un certain niveau de perte, ferme une partie de la position. Le seuil de perte doit être fixé soit dans la devise du dépôt, soit en points. Ainsi, si le prix va à l'encontre de nous, nous réduisons la perte et si le prix tourne au profit, alors au lieu de la perte nous pouvons obtenir un certain profit ou même une perte plus petite, en fonction du jeu TP. Le script doit fonctionner en permanence en mode EA, c'est un assistant pour tout système de trading ou Expert Advisor.

 
destan:

Chers programmateurs ! Pouvez-vous me dire s'il est possible d'écrire un script qui surveille les positions ouvertes et qui, lorsqu'une position atteint un certain niveau de perte, ferme une partie de la position. Le seuil de perte doit être fixé soit dans la devise du dépôt, soit en points. Ainsi, si le prix va à l'encontre de nous, nous réduisons la perte et si le prix tourne au profit, alors au lieu de la perte nous pouvons obtenir un certain profit ou même une perte plus petite, en fonction du jeu TP. Le script doit toujours fonctionner en mode EA, c'est un assistant pour tout système de trading ou Expert Advisor.

Peut-être. Il y a de l'aide ici.

 
valeryk:

Peut-être. Il y a de l'aide ici.


Il y a une chose qui s'appelle un stop loss ! !!
 

Bonjour, j'ai une question. Il y a plusieurs fenêtres égales dans le terminal, chacune d'entre elles a le même Expert Advisor, mais avec des paramètres différents. Pouvez-vous me dire s'il existe une fonction ou un algorithme prêt dans MQL4 qui peut détecter à partir de quelle fenêtre un ordre de marché est ouvert ?

 
badbadboy:

Bonjour, j'ai une question. Il y a plusieurs fenêtres identiques dans le terminal, chacune d'entre elles a le même Expert Advisor, mais avec des paramètres différents. Pouvez-vous me dire s'il existe une fonction ou un algorithme prêt dans MQL4 qui permet de déterminer quelle fenêtre un ordre de marché est ouvert ?

Il est plus logique de faire des copies de l'EA, en les nommant différemment et vous verrez dans le log tout, quelle lance et, donc, dans quelle fenêtre vous la trouverez !
 
borilunad:
Il est plus logique de faire des copies de l'EA, en les nommant différemment, et vous verrez dans le journal de bord quelle copie et dans quelle fenêtre, respectivement, vous pouvez le comprendre !

Je vais trouver une solution, mais comment en informer le conseiller expert ?
 
borilunad:
Il est plus logique de faire des copies de l'EA, en les nommant différemment, et vous verrez dans le journal tout, quelle lance et, en conséquence, dans quelle fenêtre vous savez déjà !

J'en ai besoin pour que le conseiller expert puisse commencer à faire des calculs par lui-même.
 
badbadboy:

J'en ai besoin pour que l'EA puisse commencer à se calculer.
Avez-vous un EA qui n'ouvre que des positions ? Chaque copie (version) doit avoir son propre magicien et chacune ne surveillera que ses propres positions.