[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 617

 
drknn:

Escríbelo tú mismo: hay un solo bucle. Sólo trata de hacerlo. Y si fallas, muéstranos el código de tu bucle: te ayudaremos.


Tengo un problema con los ciclos.

He visto el principio muchas veces...

a continuación, se trata de foggy....

for (i=0; i<k; i++) {

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)

lo máximo que puedo entender es que a cada i se le asigna ...algo...

Pero qué hacer con esta mezcla de íes... no tengo ni idea...

 

rigonich

Bueno, por fin empieza a tener sentido. Por lo tanto, las cadenas cortas entre llaves son llamadas a funciones, y las funciones mismas necesitan ser colocadas en algún lugar.

Ahora en orden.

Si añado una llamada de la primera función al init, lo hago inmediatamente después de iniciar la función init, es decir, justo así, será correcto, ¿no?

int init()
{
    fGet_MineGV();
}
//... и далее мой код, который был ранее

Del mismo modo, añado la llamada de la segunda función al bloque de inicio. Si lo hago inmediatamente después del cálculo de las variables, ¿sería correcto? Por ejemplo, así:

     if ((A1>0)&&(A2>0)&&(A3>0)&&(A4>0)&&(A5>4.5)&&(VVV>V_NN)&&(SUA==0))
{
SUA=100;
SUA1+=1;
}
if((A1>0)&&(A2>0)&&(A3>0)&&(A4>0)&&(A5>4.5)&&(VVV<2)&&(VVV>0)) 
SUA=0;
if ((BUA==100)&&(A5<-4.5))
{
SUA=0;
SUA1=0;
}

     if ((A1<0)&&(A2<0)&&(A3<0)&&(A4<0)&&(A5<-4.5)&&(VVV>V_NN)&&(BUA==0))
{
BUA=100;
BUA1+=1;
}
if ((A1<0)&&(A2<0)&&(A3<0)&&(A4<0)&&(A5<-4.5)&&(VVV<2)&&(VVV>0)) 
BUA=0;
if ((SUA==100)&&(A5>4.5))
{
BUA=0;
BUA1=0;
}
//...сюда вставляю...
{
    fSave_MineGV();
}
//...и далее опять мой код...

¿Son correctos estos dos primeros pasos?

И нервный ваш согестник  дал вам не часть кода, а две готовые функции, которые он дя вас написал. 
Bueno, en realidad le dije gracias por eso de inmediato.
 

¿Cómo puedo salir de una serie if si la condición if=true?

si

si

si (TRUE) - pero hay que volver a empezar, y no seguir adelante con la línea

si

si

.......

 
lottamer:

no pudo encontrar la función correcta en la biblioteca

Tamaño de la toma de beneficios de la última posición cerrada.

¿Tal vez alguien tenga uno?


El tamaño del take profit en la moneda del depósito es devuelto por OrderProfit(), en pips - precio de cierre menos el precio de apertura, y cómo encontrar la última posición cerrada o dónde conseguir una función preparada para esto, creo que se le explicó varias veces.
 
lottamer:

¿Cómo puedo salir de una serie if si la condición es if=true?

si

si

si (TRUE) - pero hay que volver a empezar, y no seguir adelante con la línea

si

si

.......


si

si

if (TRUE) - pero hay que empezar de nuevo, y no subir más la escalera

si no {

si

si

.......

}//si (TRUE) - pero hay que empezar de nuevo y no subir más la escalera

En realidad, en el 99,9% de los casos esto significa que no se ha pensado lo suficiente en la implementación del algoritmo.

 
VladislavVG:

si

si

if (TRUE) - pero hay que empezar de nuevo, y no subir más la escalera

si no {

si

si

.......

}//si (TRUE) - pero hay que empezar de nuevo y no subir más la escalera

En realidad, en el 99,9% de los casos esto significa que no has pensado lo suficiente en la implementación del algoritmo.


:))) ya parece haber encontrado una solución

devolver (0) - y maravillosamente sale todo si

 
VladislavVG:

si

si

if (TRUE) - pero hay que empezar de nuevo, y no subir más la escalera

si no {

si

si

.......

}//si (TRUE) - pero hay que empezar de nuevo y no subir más la escalera

En realidad, en el 99,9% de los casos esto significa que no se ha pensado lo suficiente en la implementación del algoritmo.

Con },else, return, o break o continue (bucles for).
 
rigonich:

El tamaño del take profit en la moneda del depósito es devuelto por la función OrderProfit(), en puntos - precio de cierre menos el precio de apertura. Creo que se le explicó varias veces cómo encontrar la última posición cerrada o dónde conseguir una función lista para ello.


Exactamente. Primero debe tomar el ticket de la última posición cerrada GetTicketLastPos , y luego usar las funciones estándar para sacar lo que necesite de este ticket.

Gracias.

 
xant:

rigonich

Bueno, por fin empieza a tener sentido. Por lo tanto, las cadenas cortas entre llaves son llamadas a funciones, y las funciones mismas necesitan ser colocadas en algún lugar.

Ahora en orden.

Si añado una llamada de la primera función al init, lo hago inmediatamente después de iniciar la función init, es decir, justo así, será correcto, ¿no?

Del mismo modo, añado la llamada de la segunda función al bloque de inicio. Si lo hago inmediatamente después del cálculo de las variables, ¿sería correcto? Por ejemplo, así:

¿Son correctos estos dos primeros pasos?

Bueno, en realidad le di las gracias de inmediato.


Casi. En el inite quita el primer { que tenías antes de insertar la llamada, en el start -- ambos{} antes y después de la llamada. Ahora sólo tienes que copiar el código de la función, ponerlo después de todo tu código del EA y compilar el EA.

Lo siento, mi error, es difícil cuando no hay código delante de mis ojos. Ahí lo tienes.

int init()
{
fGet_MineGV();
//... и далее мой код, который был ранее (без первой { )
 

rigonich

He eliminado los soportes para dejar un número par de soportes. Es decir, ambas funciones se insertan sin corchetes.

El resultado es el siguiente:

int init()
{
    fGet_MineGV();
//... и далее мой код
//...разрыв кода...
if ((SUA==100)&&(zigNN>4.5))
{
BUA=0;
BUA1=0;
}

fSave_MineGV();
//... продолжение моего кода...

Entonces, después de todo el código de EA inserté

}
}
}


Comment(fd+f+d);

}
//... тут мой советник закончился


        void fGet_MineGV (string fs_PrefName = "") // префикс имени переменной
     {
        string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
        if (GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
        if (GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
        if (GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
        if (GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
     }
               
      void fSave_MineGV (string fs_PrefName = "") // префикс имени переменной
{
 static datetime ldt_NewBar;
 datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
 //---- Сохраняемся в начале каждой минуты
 if (ldt_NewBar == ldaTBeginBar) return;
 ldt_NewBar = ldaTBeginBar;
 //---- Сохраняем поочереди значения каждой переменной
 string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
 GlobalVariableSet (ls_Name, SUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
 GlobalVariableSet (ls_Name, SUA1);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
 GlobalVariableSet (ls_Name, BUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
  GlobalVariableSet (ls_Name, BUA1);
}

Lo tomo así, después del último paréntesis rizado, de hecho, por separado del EA. ¿Es correcto?

Si es correcto, esto es lo que se obtiene después de la compilación:

'fGet_MineGV' - function already defined and has a body         K:\TEST\experts\01___AUDUSD.mq4 (1679, 14)
'ls_Name' - variable already defined                            K:\TEST\experts\01___AUDUSD.mq4 (1681, 16)
2 error(s), 0 warning(s)        

Извиняюсь, ошибся, сложно, когда нет кода пнред глазами.Вот так.
Si el código fuera corto, lo publicaría aquí y todos mis problemas se resolverían rápidamente. PERO el EA tiene 1700 líneas, más 3 indicadores externos más, en los que se hace la mayor parte del cálculo... Así que sólo por correo, pero obviamente ya no se hace gratis.