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

 
artmedia70:

Ich habe nicht von externen Variablen gesprochen. Ich habe hierüber gesprochen.

Stellen wir uns eine Situation vor. Eine Entscheidung muss nach der letzten offenen Stelle getroffen werden.


Für den Prüfer:

Wir erstellen Variablen, in denen wir die notwendigen Daten der zuletzt geöffneten Position speichern werden.

Sobald eine neue Position eröffnet wird, fügen wir die erforderlichen Daten sofort in diese Variablen ein.

Wenn ein Signal zur Eröffnung einer neuen Position kommt (z.B. nach 20 Testminuten), müssen wir einige Kriterien überprüfen, anhand derer wir über die Daten der zu eröffnenden Position entscheiden. Diese Kriterien hängen vereinbarungsgemäß von der zuvor eröffneten Stelle ab. Wir lesen sie aus den Variablen (wir haben sie bei der vorherigen Öffnung gespeichert) und verwenden sie als zusätzliche Daten für eine neue Position.

Wenn wir eine Position eröffnen, speichern wir die neuen Daten über die neu eröffnete Position in den Variablen.


Echt jetzt:

Stellen wir uns die gleiche Situation vor, aber ... Stellen Sie sich vor, dass nach dem Öffnen der letzten Position und der Speicherung ihrer Daten in Variablen 10 Minuten vergangen sind (weitere 10 Minuten müssen vergehen, bevor die nächste Position geöffnet wird (wir haben dies einfach in einem "Tester" angenommen)). Und in diesem Zeitintervall wurde der Expert Advisor aus irgendeinem Grund neu gestartet.

Was passiert nach dem Neustart des EA mit den Daten der zuletzt geöffneten Position, die in Variablen gespeichert wurden? Sie werden nicht existieren.

Woher sollen wir sie also bekommen? Rechts - Suche. Deshalb brauchen wir die Funktion der Suche nach den erforderlichen Daten. Es ist daher besser, alles auf einmal zu finden, wenn wir es brauchen, und es nicht in Variablen zu speichern, was wirklich viel einfacher und schneller ist.


Entschuldigung für die späte Klärung - ich bin gerade in die Welt hinausgegangen ... :))

Sie haben wie immer Recht! Auch ich verwende Funktionen, wenn ich neue Daten benötige. Und ich verwende die von Ihnen erwähnten "Variablen" nicht, weil sie keinen Sinn machen und die Informationen schnell veraltet sind. Und ich habe Victor geraten, sich nicht an Funktionen aufzuhängen, die vermieden werden können, um den Code nicht zu verkomplizieren! Vielen Dank für Ihre Aufmerksamkeit!
 
Guten Tag. Ist es möglich, in MetaTrader 4 Gewinnlimits zu setzen. Genau in Währungsgrenzen, nicht in Pips. Wenn ja, wie
 
   for(i=0;i<limit;i++) /*вопрос: еще использовал и такую последовательность for(i=Bars-1; i>=0; i--), есть ли разница с какой 
   "стороны" заполнять массив и рассматривать значения?*/
   
   RSI=iRSI(0,0,8,PRICE_CLOSE,i); 
   
   // задаем пустое значение буфера 
   RSIBuffer3[i]=0.0
   /* вроде так, мысль такая, что буфер должен быть пустым в цикле for(int i=0;i<limit;i++), до момента достижения 
   RSI заданных значений. Вопрос: так ли? и где он должен находится? */ 
   
   //ставим условие при котором пока RSI >= 70                     
   {
    while RSI>=70    
     {
       i++; //вопрос: где то видел эту часть кода в конце цикла, есть ли разница?
             
       // заполняем буфер значениями RSI
        
       RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,i);
             
     }
        
     // определяем позицию максимального значения в массиве      
        
     int RSI_max = ArrayMaximum (RSIBuffer3[i], int count=WHOLE_ARRAY, int start=0); /* тут выдает ошибку на значениях count и start отсюда вопрос: нужно ли определять размер массива через ArraySize? и какое начальное значение должно быть, не i ли?*/
             
     //ищем бар со значением RSI равным максимальному значению RSI в массиве 
        
     if RSI=RSIBuffer3[RSI_max];
                
     // рисуем стрелку на этом значении
        
     ExtMapBuffer2[i]=High[i]+5*Point;
            
     else 
                
     ExtMapBuffer2[i]=0.0;
           
   }
      //ставим условие при котором пока RSI <= 30                     
   { 
    while RSI<=30
        {    
        i++;
        // заполняем буфер значениями RSI
        
        RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,i);
        
        {        
                
        // определяем позицию минимального значения в массиве  
            
        int RSI_min = ArrayMinimum (RSIBuffer3[i], int count=WHOLE_ARRAY, int start=0);
        
                
        //ищем бар со значением RSI равным максимальному значению RSI в массиве 
        
        if RSI=RSIBuffer3[RSI_min];
                
        // рисуем стрелку на этом значении
             
        ExtMapBuffer1[i]=Low[i]-5*Point;
             
        else 
             
        ExtMapBuffer1[i]=0.0;            
          
        }
                   
   return(0);
   }

Helfen Sie mir mit der Logik, ich kann nicht irgendwie übersetzen die einfache Logik in das Programm (können Sie empfehlen, einige Literatur)

Die Herausforderung: Berechnen Sie den maximalen (minimalen) RSI bei Werten über 70 (unter 30) und zeichnen Sie einen Abwärts- (Aufwärts-) Pfeil über den Balken

zu diesen Werten.

Durchführung (erster Teil, der zweite Teil ist ähnlich):

1. Berechnen Sie den RSI-Wert für jeden Balken

2. solange RSI größer als 70 ist, den RSI-Puffer mit seinen Werten füllen

3. Finde die Position des maximalen Wertes in der Matrix

4. Suche nach dem Balken mit dem RSI-Wert, der dem maximalen RSI-Wert im Array entspricht

5. Zeichnen Sie einen Pfeil über diesen Balken.

Nun, es gibt so etwas, aber beim Schreiben des Codes, ich habe eine Menge Fragen, Fehler und bin in einem Schlamassel ((

Und hier ist die Umsetzung im Code.

 
habe den Text und den Code verwechselt, sorry
 

Meine Herren, ich bitte um Rat, wie man den folgenden Algorithmus mit einer Schleife kodieren kann.

wenn (iLow (Symbol (),0,1) > iLow (Symbol (),0,10))// wenn der MINIMUM-Wert der ersten Kerze > MINIMUM-Wert der zehnten Kerze

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // Eröffnen der Order.

ICH MUSS

Wenn Low 1 und gleichzeitig Low 2 und gleichzeitig Low 3...... . ...und gleichzeitig Kerzentief 9> Kerzentief 10 ( d.h. Kerzentief von 1 bis 9)

/ /Offener Auftrag.

Vielen Dank.

 
solnce600:

Meine Herren, ich bitte um Rat, wie man den folgenden Algorithmus mit einer Schleife kodiert.

wenn (iLow (Symbol (),0,1) > iLow (Symbol (),0,10))// wenn der MINIMUM-Wert der ersten Kerze > MINIMUM-Wert der zehnten Kerze

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // Eröffnen der Order.

ICH MUSS

Wenn Low 1 und gleichzeitig Low 2 und gleichzeitig Low 3...... . ...und gleichzeitig Kerzentief 9> Kerzentief 10 ( d.h. Kerzentief von 1 bis 9)

/ /Offener Auftrag.

Ich danke Ihnen.


Wir erstellen eine Bedingung Erfolg Flagge, setzen Sie es in tru, übergeben Sie die erforderliche Anzahl von Kerzen in der Schleife, wenn bei einer von ihnen die Bedingung nicht erfüllt ist, setzen Sie die Flagge in der falschen Flagge und die Schleife verlassen.
 
FAQ:

Erstellen Sie ein Erfolgsflag für die Bedingung, setzen Sie es in die Pipe, führen Sie die erforderliche Anzahl von Kerzen in der Schleife durch, wenn bei einer von ihnen die Bedingung nicht erfüllt ist, setzen Sie das Flag in das False-Flag und verlassen Sie die Schleife.

Vielen Dank, entschuldigen Sie bitte...., dass ich immer noch nicht ganz verstehe, was Sie geschrieben haben.

Ich wäre Ihnen sehr dankbar, wenn Sie code..... schreiben könnten, dann würde ich alles verstehen.

 

bool have = true;

for(int i=0;i<10;i++){

   if(Low[i]<=Low[i+1]){have=false; break;} 

if(have){

// действия если условие соблюдено 

}else{

 // действия если условие не соблюдено

}

 
FAQ:

bool have = true;

for(int i=0;i<10;i++){

   if(Low[i]<=Low[i+1]){have=false; break;} 

if(have){

// действия если условие соблюдено 

}else{

 // действия если условие не соблюдено

}

Vielen Dank an Sie .... und Menschen wie Sie... ich habe weitere Fortschritte beim Erlernen der Weisheit der Programmierung gemacht....
 

Leute, wie schließt man eine Pending Order in n, Anzahl der Pips, wenn sie nicht ausgelöst wurde?