[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 339

 
artmedia70:

Non stavo parlando di variabili esterne. Stavo parlando di questo.

Immaginiamo una situazione. Una decisione deve essere presa in base all'ultima posizione aperta.


Per il tester:

Creiamo delle variabili, in cui memorizzeremo i dati necessari dell'ultima posizione aperta.

Non appena una nuova posizione viene aperta, aggiungeremo immediatamente i dati richiesti in queste variabili.

Quando arriva un segnale di apertura di una prossima posizione (per esempio, dopo 20 minuti del tester), dobbiamo controllare alcuni criteri, in base ai quali decidiamo i dati della posizione da aprire. Questi criteri, per convenzione, dipendono dalla precedente posizione aperta. Li leggiamo dalle variabili (li abbiamo salvati all'apertura precedente) e li usiamo come dati aggiuntivi per una nuova posizione.

Quando apriamo una posizione, memorizziamo i nuovi dati sulla posizione appena aperta nelle variabili.


Per davvero:

Immaginiamo la stessa situazione, ma... Immaginate che dopo che l'ultima posizione è stata aperta e i suoi dati memorizzati nelle variabili, sono passati 10 minuti (altri 10 minuti devono passare prima che la prossima posizione sia aperta (abbiamo appena assunto questo in un "tester")). E in questo intervallo di tempo, l'Expert Advisor è stato riavviato per qualche motivo.

Cosa succede dopo il riavvio dell'EA con i dati dell'ultima posizione aperta, che è stata memorizzata nelle variabili? Non esisteranno.

Quindi dove dobbiamo prenderli? Destra - ricerca. Per questo abbiamo bisogno della funzione di ricerca dei dati necessari. È quindi meglio trovare tutto in una volta, quando ne abbiamo bisogno, e non memorizzarlo in variabili, il che è davvero molto più facile e veloce.


Scusate per il chiarimento tardivo - appena uscito nel mondo ... :))

Hai ragione come sempre! Anch'io uso le funzioni quando ho bisogno di dati freschi. E non uso le "variabili" che hai menzionato, perché non hanno senso, le informazioni diventano rapidamente obsolete. E ho consigliato a Victor di non fissarsi su funzioni che possono essere evitate, per non appesantire il codice! Grazie per l'attenzione!
 
Buon pomeriggio. È possibile impostare limiti di profitto in MetaTrader 4. Esattamente in limiti di valuta, non in pip. Se sì, come
 
   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);
   }

Aiutatemi a trattare la logica, non riesco in qualche modo a tradurre la semplice logica nel programma (potete consigliarmi qualche letteratura)

La sfida: Calcola il massimo (minimo) RSI a valori superiori a 70 (inferiori a 30) e disegna una freccia verso il basso (verso l'alto) sopra la barra

a questi valori.

Attuazione (prima parte, la seconda parte è simile):

1. calcolare il valore RSI per ogni barra

2. mentre RSI è maggiore di 70 riempire il buffer RSI con i suoi valori

3. trovare la posizione del valore massimo nella matrice

4. cercare la barra con il valore RSI uguale al valore RSI massimo nell'array

5. disegnare una freccia sopra questa barra.

Beh, c'è qualcosa del genere, ma mentre scrivo il codice, ho un sacco di domande, errori e sono in un casino ((

Ed ecco l'implementazione nel codice.

 
ho confuso il testo e il codice, mi dispiace
 

Signori, per favore consigliate come codificare il seguente algoritmo usando un ciclo.

se (iLow (Symbol (),0,1) > iLow (Symbol (),0,10))// se il MINIMO della prima candela > MINIMO della decima candela

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // aprire l'ordine.

DEVO

Se Basso 1 e contemporaneamente Basso 2 e contemporaneamente Basso 3...... . ...e contemporaneamente candela Low 9> candela Low 10 ( cioè candela Low da 1 a 9)

/ /ordine aperto.

Grazie.

 
solnce600:

Signori, per favore consigliate come codificare il seguente algoritmo usando un ciclo.

se (iLow (Symbol (),0,1) > iLow (Symbol (),0,10))// se il MINIMO della prima candela > MINIMO della decima candela

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // aprire l'ordine.

DEVO

Se Basso 1 e contemporaneamente Basso 2 e contemporaneamente Basso 3...... . ...e contemporaneamente candela Low 9> candela Low 10 ( cioè candela Low da 1 a 9)

/ /ordine aperto.

Grazie.


Creiamo un flag di successo della condizione, lo impostiamo in tru, passiamo il numero richiesto di candele nel ciclo, se in una qualsiasi di esse la condizione non è soddisfatta, impostiamo il flag in false flag e usciamo dal ciclo.
 
FAQ:

Creare un flag di successo della condizione, impostarlo nel tubo, passare il numero richiesto di candele nel ciclo, se in una qualsiasi di esse la condizione non è soddisfatta, impostare il flag nella bandiera falsa e uscire dal ciclo.

Grazie mille.Scusa per l'amor di Dio.... sono ancora un po' lento a capire quello che hai scritto.

Vi sarei molto grato se poteste scrivere il codice..... e poi capirei tutto.

 

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{

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

}

Grazie mille. Grazie a voi .... e persone come te... ho fatto altri progressi nell'apprendere la saggezza della programmazione....
 

gente, come si chiude un ordine pendente in n, numero di pip se non è scattato?