[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 339

 
artmedia70:

No estaba hablando de variables externas. Estaba hablando de esto.

Imaginemos una situación. Hay que tomar una decisión en función de la última posición abierta.


Para el probador:

Creamos variables, en las que almacenaremos los datos necesarios de la última posición abierta.

En cuanto se abra una nueva posición, añadiremos inmediatamente los datos necesarios en estas variables.

Cuando llega una señal para abrir una siguiente posición (por ejemplo, después de 20 minutos de prueba), necesitamos comprobar algunos criterios, por los cuales decidimos los datos de la posición a abrir. Estos criterios, por convención, dependen de la posición anterior abierta. Los leemos desde las variables (los guardamos en la apertura anterior) y los utilizamos como datos adicionales para una nueva posición.

Cuando abrimos una posición, almacenamos los nuevos datos sobre la posición recién abierta en las variables.


De verdad:

Imaginemos la misma situación, pero... Imagina que después de abrir la última posición y almacenar sus datos en variables, han pasado 10 minutos (tienen que pasar otros 10 minutos antes de que se abra la siguiente posición (lo acabamos de suponer en un "probador")). Y en este intervalo de tiempo, el Asesor Experto se reinició por alguna razón.

¿Qué sucede después de reiniciar el EA con los datos de la última posición abierta, que se almacenaron en variables? No existirán.

Entonces, ¿de dónde hay que sacarlas? Derecho - búsqueda. Por eso necesitamos la función de buscar los datos necesarios. Por lo tanto, es mejor encontrar todo de una vez, cuando lo necesitamos, y no almacenarlo en variables, lo que es realmente mucho más fácil y rápido.


Perdón por la aclaración tardía - acaba de salir al mundo ... :))

Tienes razón, como siempre. Yo también utilizo funciones cuando necesito datos frescos. Y no uso las "variables" que mencionas, porque no tienen sentido, la información se vuelve rápidamente obsoleta. Y le aconsejé a Víctor que no se colgara de las funciones que se pueden evitar, ¡para no hacer el código más pesado! Gracias por su atención.
 
Buenas tardes. ¿Es posible establecer límites de beneficios en MetaTrader 4? Exactamente en límites de divisas, no en pips. Si es así, ¿cómo
 
   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);
   }

Ayúdame a lidiar con la lógica, no puedo de alguna manera traducir la lógica simple en el programa (puede recomendar alguna literatura)

El reto: Calcular el RSI máximo (mínimo) en valores superiores a 70 (inferiores a 30) y dibujar una flecha hacia abajo (hacia arriba) sobre la barra

a estos valores.

Aplicación (primera parte, la segunda es similar):

1. calcular el valor del RSI para cada barra

2. mientras el RSI sea mayor que 70, llenar el buffer RSI con sus valores

3. encontrar la posición del valor máximo en la matriz

4. busque la barra con el valor RSI igual al valor RSI máximo en la matriz

5. Dibuja una flecha sobre esta barra.

Bueno, hay algo así, pero al escribir el código, tengo muchas dudas, errores y estoy hecho un lío ((

Y aquí está la implementación en el código.

 
mezcló el texto y el código, lo siento
 

Señores, por favor, aconsejen cómo codificar el siguiente algoritmo utilizando un bucle.

if (iLow (Symbol (),0,1) > iLow (Symbol (),0,10))// si el MÍNIMO de la primera vela > MÍNIMO de la décima vela

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // abrir la orden.

TENGO QUE

Si la baja 1 y simultáneamente la baja 2 y simultáneamente la baja 3...... . ...y simultáneamente vela baja 9> vela baja 10 ( es decir, vela baja de 1 a 9)

/ /orden de apertura.

Gracias.

 
solnce600:

Señores, por favor, aconsejen cómo codificar el siguiente algoritmo utilizando un bucle.

if (iLow (Symbol (),0,1) > iLow (Symbol (),0,10))// si el MÍNIMO de la primera vela > MÍNIMO de la décima vela

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // abrir la orden.

TENGO QUE

Si la baja 1 y simultáneamente la baja 2 y simultáneamente la baja 3...... . ...y simultáneamente vela baja 9> vela baja 10 ( es decir, vela baja de 1 a 9)

/ /orden de apertura.

Gracias.


Creamos una bandera de condición de éxito, la ponemos en tru, pasamos el número necesario de velas en el bucle, si en alguna de ellas no se cumple la condición, ponemos la bandera en falso y salimos del bucle.
 
FAQ:

Cree una bandera de éxito de la condición, póngala en la tubería, pase el número necesario de velas en el bucle, si en alguna de ellas no se cumple la condición, ponga la bandera en falso y salga del bucle.

Muchas gracias.Lo siento por el amor de Dios.... todavía soy un poco lento en la comprensión de lo que ha escrito.

Te agradecería mucho que escribieras el código..... y así lo entendería todo.

 

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{

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

}

Muchas gracias. Gracias a ti .... y gente como tú... he avanzado un poco más en el aprendizaje de la sabiduría de la programación....
 

gente, ¿cómo se cierra una orden pendiente en n, número de pips si no se ha disparado?

Razón de la queja: