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

 
deyron:
S'il y avait des tentatives d'ouverture d'un ordre, il y aurait une erreur dans les messages. Et s'il n'y a pas de tentative d'ouverture d'un ordre, pourquoi y aurait-il une erreur. La question est de savoir si les conditions de passage du Macha dans les niveaux sont correctement établies. Pourquoi les ordres s'ouvrent-ils beaucoup plus tard que prévu lorsque les paramètres sont codés en dur ?

Print() et GetLastError() aux bons endroits répondraient à toutes vos questions.
 

Bonjour !

Je dois trouver la valeur du dernier point d'une série parabolique passée. Disons celui-là :

J'ai écrit une fonction pour le trouver :

double FindLastLevel ()                             
 {double Level; int i;
  for (i=0; Level==0; i++) 
  {double SAR0=iSAR(Symbol(),Period(), Step, Maximum, i),
          SAR1=iSAR(Symbol(),Period(), Step, Maximum, i+1),
          SAR2=iSAR(Symbol(),Period(), Step, Maximum, i+2);

   if (SAR0>SAR1){if(SAR1<SAR2){Level=SAR2; return (Level);}}
   if (SAR0<SAR1){if(SAR1>SAR2){Level=SAR2;return (Level);}}
  }}

C'est-à-dire qu'il recalcule chaque valeur de Parabolic, à partir de la barre actuelle. Dès que la condition de diminution/augmentation progressive des valeurs est violée, la fonction renvoie la valeur de la barre qui a "cassé" la tendance. Cependant, s'il y avait un saut d'une barre, comme celui-ci :


La fonction "ne le voit pas".

Veuillez me conseiller sur la façon de réécrire la fonction. Peut-être existe-t-il une solution toute prête ?

 
Heroix:

Bonjour !

Je dois trouver la valeur du dernier point d'une série parabolique passée. Disons celui-là :

J'ai écrit une fonction pour le trouver :

C'est-à-dire qu'il recalcule chaque valeur de Parabolic, à partir de la barre actuelle. Dès que la condition de diminution/augmentation progressive des valeurs est violée, la fonction renvoie la valeur de la barre qui a "cassé" la tendance. Cependant, s'il y avait un saut d'une barre, comme celui-ci :


La fonction "ne le voit pas".

Veuillez me conseiller sur la façon de réécrire la fonction. Peut-être existe-t-il une solution toute prête ?

Il faut aussi regarder la position par rapport au prix.
 
Zhunko:
Il faut aussi regarder la position par rapport au prix.

C'est-à-dire comparer non seulement l'indicateur lui-même, mais aussi la position de ses valeurs à i par rapport à la valeur du prix à i, disons ?
 

Consultez ce conseiller pour voir s'il y a quelque chose d'intéressant https://www.mql5.com/ru/code/10649.

 
Les gens me disent pourquoi if(OPN<CLS && (CLS-OPN)>=50*Point) ne recherche pas ????.
 
nlp2311:

Question.

Pourquoi la condition ne va pas

if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Point) buffer[i]=High_1 ;

...

Au lieu de

if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Point) buffer[i]=High_1;

faites-le comme ceci

if (Close_1>Open_1)
{  if (Close_1-Open_1>=30*Point) buffer[i]=High_1;
}

Postez ici la partie du code où cette condition est présente. Il y a peut-être une erreur dans la boucle. Publiez le code sur le forum en utilisant le SRC.

 
paladin80:

Essayez ceci à la place de

comme ça.

Postez ici la partie du code où cette condition est présente. Il y a peut-être une erreur dans la boucle. Sur le forum, postez le code en utilisant SRC.


Essayé.... ne fonctionne pas.

J'ai mis des crochets de différentes manières, tordues comme je pouvais... Je ne peux plus !!!!!!!!!!!))))

C'est pourquoi je demande COMMENT je peux le faire sans aucune distorsion) : ?

Il semble que ce Creep MT4 ne voit pas du tout les pips par la condition if(.....)...((

De plus, j'ai écrit séparément un indicateur pour tenir cette condition... je ne peux pas(...) :

POURQUOI est-ce que c'est comme ça ?

 
nlp2311:

Le voici.... bâtard((( !!!!

déjà en colère...


Qu'avez-vous vérifié ?
 

Bonjour, j'ai écrit un indicateur avec deux MACDs différents dans la même fenêtre et à la même échelle.

Je dois maintenant parcourir à nouveau toutes les barres SEEN et trouver le moment où la deuxième ligne de signal de l'indicateur (orange) sur la barre ZERO sera égale à la première ligne de signal (rouge).

Quelqu'un peut-il m'aider à comprendre ?


Код 2
-----

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color5 Aqua
#property indicator_color6 DarkOrange
#property  indicator_width1  2
#property  indicator_width5  2


//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
double Macd3Buffer[];
double Signa13Buffer[];

//--- for one bar
datetime last;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_NONE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_NONE);
   SetIndexBuffer(3,Signal2Buffer);
   SetIndexStyle(4,DRAW_NONE);
   SetIndexBuffer(4,Macd3Buffer);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,Signa13Buffer);
   
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    if(last>=Time[0]) return;
  
    double max_M1=-0.01,min_M1=0.01,
           max_M2=-0.01,min_M2=0.01,
           max_S1=-0.01,min_S1=0.01,
           max_S2=-0.01,min_S2=0.01,
           max1=-0.01,min1=0.01,
           max2=-0.01,min2=0.01,
           max3,
           M,
           Dmax_3,
           D_sig,
           D_sig_Last=1.0;
  
  
   int j=0;                                             
       
    while(j<WindowBarsPerChart()-1)
{          
//----
   for(int i=0;i<=j;i++)
       
      { 
           Macd1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_MAIN,i+1);          // основная линия 1-ого MACD        
           Macd2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1);         // основная линия 2-ого MACD
           
              max_M1=MathMax(Macd1Buffer[i],max_M1);
              min_M1=MathMin(Macd1Buffer[i],min_M1);
           
              max_M2=MathMax(Macd2Buffer[i],max_M2);
              min_M2=MathMin(Macd2Buffer[i],min_M2); 
     
           Signal1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_SIGNAL,i+1);      // сигнальная линия 1-ого MACD   
           Signal2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1);     // сигнальная линия 2-ого MACD
              
              max_S1=MathMax(Signal1Buffer[i],max_S1);
              min_S1=MathMin(Signal1Buffer[i],min_S1);
           
              max_S2=MathMax(Signal2Buffer[i],max_S2);
              min_S2=MathMin(Signal2Buffer[i],min_S2); 
    
              max1=MathMax(max_M1,max_S1);                                              // максимум 1-ого MACD
              min1=MathMin(min_M1,min_S1);                                              // минимум 1-ого MACD
           
              max2=MathMax(max_M2,max_S2);                                              // максимум 2-ого MACD
              min2=MathMin(min_M2,min_S2);                                              // минимум 2-ого MACD
      }   
        
           M=(max1-min1)/(max2-min2);                                                   // соотношение диапазонов max-min 1-ого и 2-ого MACD  
           max3=max2*M;                                                                 // max 3-его MACD,т.е."нового" 2-ого MACD
           Dmax_3=max1-max3;                                                            // смещение 3-ого MACD относительно 1-ого MACD
            
           
    for( i=0;i<=j;i++)
       
      {       
         Macd3Buffer[0]=Macd2Buffer[0]*M+Dmax_3;                                        // приведение диапазона max-min 2-ого MACD к диапазону 1-ого MACD,
                                                                                        // т.е.подучаем 3-ий MACD и совмещаем max и min 3-его MACD с                                                                                    // max и min 1-ого MACD                                                                                                                                       
         Signa13Buffer[0]=Signal2Buffer[0]*M+Dmax_3;                                    // max и min 1-ого MACD                                            
      }  
      
      
         D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]);                              // разница между сигнальными линиями 1-ого и 3-ого MACD на
                                                                                        // нулевом баре
 if(Signa13Buffer[0]==Signal1Buffer[0])
      
        break;          
             
              D_sig_Last=D_sig; 
              
         
         j++;
         
}             
     
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1, 
               "\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
               "\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
               "\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
               "\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
               "\n"," D_sig = ",DoubleToStr(D_sig,4));
               
               
               
               
               
               
//----
   last=Time[0];
//----
   return(0);
  }
//+------------------------------------------------------------------+
Raison: