Comment trouver le moment de la barre où les moyennes mobiles se sont croisées ? (code à l'intérieur) - page 3

 

Oui, j'en ai besoin spécifiquement pour le graphique PERIOD_H1. Comme je peux changer de cadre temporel, je veux que cela soit codé en dur pour ce graphique.

(J'ai peur de m'y prendre mal - surtout avec ce que vous m'avez écrit deux fois maintenant, WHRoeder, concernant les MA et l'instruction if...). - Je me prépare donc à recevoir des claques, mais je pense que cela m'indiquerait la barre où les MA's se sont croisées (ci-dessous). Donc cela fonctionnerait sûrement en l'appliquant à iBarShift... ?)

if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12)triggerBarTime = Time[1];
 
WHRoeder:

Les moyennes mobiles multiples ne se croisent pas au même moment.

Pourquoi postez-vous deux fois ? Votre question a déjà reçu une réponse.

Trouvez la première barre où elles étaient toutes dans le bon ordre.


int DIR = 0;
for(int iBar = 0; iBar < Bar; iBar++){
   double MA20 = ... iBar), 
           MA5 = ... iBar);
          :
   if(     MA20 > MA5 && MA5 > ...) DIR = -1;
   else if(MA20 < MA5 && MA5 < ...) DIR = +1; // All fanning up.
   else if (DIR != 0){ iBar--; break; }       // Last one was cross.
}
Puis-je demander à quoi servent les variables de barres ? Aussi, que signifie "--" ? Les deux marques "--" et " !" (si vous le voulez bien) ? J'ai parcouru la section d'aide, mais je n'ai pas trouvé à quoi elles servent).
 
DomGilberto:

Puis-je demander à quoi servent les variables Bar ? De même, que signifie "--" ? Les deux marques "--" et " !" (si vous le voulez bien). J'ai parcouru la section d'aide, mais je n'ai pas trouvé leur utilité).


Et puis-je vous demander pourquoi basic from book est toujours inconnu ?

https://book.mql4.com/basics/expressions

 
Ta question revient à dire "qu'est-ce que ce petit truc en métal (une clé) et pourquoi l'un de ces trucs est un rectangle (le gaz) et les autres sont carrés ?".
Apprenez à coder.
 

Mais je sais ce qu'est une clé de gaz... - c'est plus simple que le codage...

Vous avez tous raison - je dois le lire entièrement.

C'est parce que j'apprends mieux par essais et erreurs (je suis un homme de terrain quand il s'agit de retenir des connaissances). Cela m'aide à comprendre la logique quand je la vois. De plus, le site du MQL4 n'explique pas forcément clairement comment les choses fonctionnent ensemble.

Donc, pour répondre à votre question deVries, c'est pourquoi je connais quelques bases et quelques trucs plus avancés, mais c'est parcellaire parce que j'aime jouer et apprendre de cette façon.

Désolé si je deviens pénible !

EDIT - Je ne comprends toujours pas la partie "Bar" du code que vous avez écrit WHRoeder - je ne suis pas sûr que ce soit correct ?

 
DomGilberto: Mais je sais ce qu'est une clé de gaz... - c'est plus simple que de coder...

Mais essayeriez-vous de conduire sans savoir ce que c'est ? Ce serait stupide.

Tu essaies de coder sans savoir ce que sont "--" et " !". Quelle est la différence ?

 

!=True, si x n'est pas égal à y -(DIR != 0) - Si DIR (qui est 0) n'est pas égal à "0", l'opérateur Break rendra le contrôle à l'opérateur for. Et recommencer la boucle.

-- Soustraction de 1 à la valeur de la variable. Donc "iBar-- ;" = iBar = 0, donc en soustrayant 1 = -1 ?

Hey - J'essaie vraiment ici. Je suis désolé si je n'apprends pas aussi vite que certaines personnes (et ne pensez-vous pas que je préférerais être de cette façon ! Je préférerais apprendre par moi-même et l'obtenir, sans avoir à demander l'aide de quelqu'un !) mais je fais de mon mieux. Je ne suis peut-être pas l'étincelle la plus brillante du monde... Alors pardonnez-moi pour cela au moins...

 
DomGilberto:

!=True, si x n'est pas égal à y -(DIR != 0) - Si DIR (qui est 0) n'est pas égal à "0", l'opérateur Break rendra le contrôle à l'opérateur for. Et recommencer la boucle.

-- Soustraction de 1 à la valeur de la variable. Donc "iBar-- ;" = iBar = 0, donc en soustrayant 1 = -1 ?

Hey - J'essaie vraiment ici. Je suis désolé si je n'apprends pas aussi vite que certaines personnes (et ne pensez-vous pas que je préférerais être de cette façon ! Je préférerais apprendre par moi-même et y arriver, sans avoir à demander l'aide de quelqu'un !) mais je fais de mon mieux. Je ne suis peut-être pas l'étincelle la plus brillante du monde... Alors pardonnez-moi pour cela au moins...


Dans cette boucle

for(int iBar = 0; iBar < Bar; iBar++){//....do some stuff and come back}

iBar a ici différentes valeurs tant qu'elle est plus petite que Bar elle deviendra la valeur 1 plus élevée

iBar--;

signifie....

iBar = iBar - 1;
 
int DIR = 0;
for(int iBar = 0; iBar < Bars; iBar++)
   {
   double i1  = iMA(NULL,60,3,0,1,0,1); 
   double i2  = iMA(NULL,60,5,0,1,0,1);
   double i3  = iMA(NULL,60,8,0,1,0,1);
   double i4  = iMA(NULL,60,10,0,1,0,1);  
   double i5  = iMA(NULL,60,12,0,1,0,1);
   double i6  = iMA(NULL,60,15,0,1,0,1);  
   double i7  = iMA(NULL,60,30,0,1,0,1);
   double i8  = iMA(NULL,60,35,0,1,0,1);
   double i9  = iMA(NULL,60,40,0,1,0,1);
   double i10 = iMA(NULL,60,45,0,1,0,1);
   double i11 = iMA(NULL,60,50,0,1,0,1);
   double i12 = iMA(NULL,60,60,0,1,0,1); 
   double ema21 = iMA(NULL,60,21,0,1,0,1);

   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
   
   if (DIR != 0)
   { 
   iBar--; break; 
   }       // Last one was cross.

Ah - Je pense que je l'ai fait fonctionner maintenant - J'ai juste regardé Bar pendant un moment et puis j'ai réalisé :) - Je commence à réaliser que ce que j'essaie de coder est légèrement plus complexe que je ne le pensais au départ. J'ai besoin que les MA's tournent et se mettent en éventail vers le haut ou vers le bas (selon que c'est un achat ou une vente). Si elle est en éventail vers le haut (pour une longue période), elles n'ont pas toujours besoin d'être dans le bon ordre - c'est juste une question d'identifier d'abord quand elles sont toutes empilées et en éventail dans le bon ordre - à partir de ce point, tout ce que je veux, c'est que le prix vérifie la 21 ema et place un ordre au-dessus des sommets. Je vais bien sûr m'amuser un peu ! Je ne m'attends pas à ce que quelqu'un m'écrive le code - je me contente d'écrire mes pensées à voix haute.

Merci !

 
Corrigez votre indentation ou les accolades manquantes
Code affiché
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
Correctement indenté
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
   triggerBarTime = Time[1];
   if(Low[1]<ema21) OrderEntry(0);
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
   triggerBarTime1 = Time[1];
   if(High[1]>ema21)  OrderEntry(1);
Accolades correctes
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && 
      i8<i9 && i9<i10 && i10<i11 && i11<i12){
      DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21) OrderEntry(0);
   }
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && 
           i8>i9 && i9>i10 && i10>i11 && i11>i12){
      DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)  OrderEntry(1);
   }