[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 184

 
deyron:
Wenn versucht wurde, einen Auftrag zu öffnen, wird dies in den Nachrichten angezeigt. Und wenn kein Versuch unternommen wird, einen Auftrag zu öffnen, warum sollte dann ein Fehler auftreten? Die Frage ist, ob die Bedingungen, unter denen Macha die Ebenen durchläuft, richtig festgelegt sind. Warum werden die Aufträge viel später als erwartet geöffnet, wenn die Parameter fest kodiert sind?

Print() und GetLastError() an den richtigen Stellen würden alle Ihre Fragen beantworten
 

Guten Tag!

Ich muss den Wert des letzten Punktes einer vergangenen parabolischen Reihe finden. Sagen wir mal so:

Ich habe eine Funktion geschrieben, um sie zu finden:

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);}}
  }}

D.h. es wird jeder Wert von Parabolic neu berechnet, beginnend mit dem aktuellen Balken. Sobald die Bedingung der allmählichen Abnahme/Zunahme der Werte verletzt wird, gibt die Funktion den Wert auf dem Balken zurück, der den Trend "gebrochen" hat. Wenn es jedoch einen Sprung von 1 Takt gibt, wie in diesem Fall:


Die Funktion "sieht" es nicht.

Wie kann ich die Funktion umschreiben? Vielleicht gibt es eine fertige Lösung?

 
Heroix:

Guten Tag!

Ich muss den Wert des letzten Punktes einer vergangenen parabolischen Reihe finden. Sagen wir mal so:

Ich habe eine Funktion geschrieben, um sie zu finden:

D.h. es wird jeder Wert von Parabolic neu berechnet, beginnend mit dem aktuellen Balken. Sobald die Bedingung der allmählichen Abnahme/Zunahme der Werte verletzt wird, gibt die Funktion den Wert auf dem Balken zurück, der den Trend "gebrochen" hat. Wenn es jedoch einen Sprung von 1 Takt gibt, wie in diesem Fall:


Die Funktion "sieht" es nicht.

Wie kann ich die Funktion umschreiben? Vielleicht gibt es eine fertige Lösung?

Sie müssen auch die Position im Verhältnis zum Preis betrachten.
 
Zhunko:
Sie müssen auch die Position im Verhältnis zum Preis betrachten.

D.h. nicht nur den Indikator selbst zu vergleichen, sondern auch die Position seiner Werte bei i im Verhältnis zum Kurswert bei i, sagen wir?
 

Sehen Sie sich diesen Ratgeber an, um zu sehen, ob es etwas Interessantes gibt https://www.mql5.com/ru/code/10649

 
Man erklärt mir, warum if(OPN<CLS && (CLS-OPN)>=50*Point) nicht nach???? sucht.
 
nlp2311:

Frage.

Warum der Zustand nicht verschwindet

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

...

Anstelle von

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

mach es so

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

Posten Sie hier den Teil des Codes, in dem diese Bedingung vorliegt. Vielleicht liegt ein Fehler in der Schleife vor. Veröffentlichen Sie den Code im Forum mit SRC.

 
paladin80:

Versuchen Sie dies anstelle von

wie diese.

Posten Sie hier den Teil des Codes, in dem diese Bedingung vorliegt. Vielleicht liegt ein Fehler in der Schleife vor. Posten Sie den Code im Forum mit SRC.


Versucht.... funktioniert nicht.

Ich habe die Klammern auf verschiedene Arten gesetzt, so verdreht wie ich konnte... Ich kann nicht mehr!!!!!!!!!!!))))

Deshalb frage ich, WIE ich es ohne Verzerrungen machen kann:?)

Es scheint, dass dieser Schleicher MT4 sieht nicht Pips von Bedingung if(.....) überhaupt...((

Was mehr ist, schrieb ich separat einen Indikator, um diese Bedingung zu halten... Ich kann nicht(...):

WARUM ist das so?

 
nlp2311:

Hier ist es.... Bastard(((!!!!

bereits wütend...


Was haben Sie überprüft?
 

Hallo, ich habe einen Indikator mit zwei verschiedenen MACDs im gleichen Fenster und auf der gleichen Skala geschrieben.

Ich muss nun wieder alle SEEN-Balken durchgehen und den Zeitpunkt finden, an dem die zweite Signallinie des Indikators (orange) auf dem NULL-Balken gleich der ersten Signallinie (rot) ist.

Kann mir jemand helfen, es herauszufinden?


Код 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);
  }
//+------------------------------------------------------------------+