Creía que era el único que prefería exponer las cosas de esa manera en lugar de escribirlas de forma atontada.
¿Cuál es el problema?
No te tomes esto comoun "nazi de los códigos", pero a mí, por ejemplo, me parecen inquietantes estas construcciones:
for(int index=PositionsTotal()-1; index>=0; index--) { /* тело цикла */ }
Es una molestia para la vista. ¿No sería mejor que no fuera"zaz cómo", sino así?
int index = PositionsTotal();
while (index-- > 0) { /* тело цикла */ }
O este tipo de "shithcodling":
for(int i=0;i<PositionsTotal();i++)
¡DondePositionsTotal()es llamado en cada iteración del bucle!
Un codificador normal nunca manipularía el cuerpo del bucle que recorre las posiciones por su índice (que, gracias a Dios, está ausente aquí) llevando a un cambio de su número. Esto es el colmo del analfabetismo y del código con fallos. Tienes que, en el buen sentido, reiniciar todo el bucle si se supone que ocurre algo así.
También a algunas personas les gusta algo así:
double Lot;
// где-то вычисляется значение Lot, финальная проверка и приведение к допустимым границам фееричны:if(Lot > MaxLot) Lot = MaxLot;
if(Lot < MinLot) Lot = MinLot;
// а то и вовсе:if(Lot > MaxLot) Lot = MaxLot;
elseif(Lot < MinLot) Lot = MinLot;
// а не проще ли сделать так?
Lot = MathMin(MathMax(Lot, MinLot), MaxLot);
Aunque, para un principiante y no preocupado por las horas extra de CPU para la optimización, esas construcciones "si-entonces-todo" de las lecciones escolares de "programación" en BASIC, son más claras.
Y todo esto sereplica de código a código por el principio de copiar y pegar.
¿Está seguro? Intentabas ser inteligente, pero te has vuelto un pícaro...
¿Y te registraste para esto a propósito? Así de fácil, desde el primer post, estás en el retrete...
Oh, Dios. "Aprende las matemáticas", Elger y Knut. No te metas en lo personal.
Muy bien, te lo explicaré:
for ( int i=0 ; i<PositionsTotal() ; i++ ) { }
^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^
объявление | объявление переменной | проверка условия выполнения цикла: | инкремент | тело цикла
цикла | типа "int", инициализация | 'i' < значения, возвращаемого функцией | переменной |
типа "for" | значением '0' | которая вызывается на каждую итерацию |
¿Está claro, querida?
Si no es así, lea detenidamente https://learnc.info/c/loop.html a partir de [ctrl+f , busque "Cycle for"].
Aquí ni siquiera hay pereza de encontrar el enlace.
Y aprende a escribir un código literario, agradable y conciso. Deberías haber empezado con ensamblador, con microcontroladores donde cada byte cuenta.
P.D.
Aquí incluso me dio pereza mostrarle al experto un simple ejemplo de su bucle "for".
intOnInit()
{
for(int i=0;i<somefunc();i++) PrintFormat("array[%d]\n", i);
return(INIT_SUCCEEDED);
}
int somefunc() {
staticint count = 0;
PrintFormat("Туточки уже %d-й раз!\n", ++count);
return3; // это типа количество чего-то там, элементов массива например
}
Y este es el resultado de la ejecución de la muestra:
2021.05.0308:01:36.343 show_the_shitz EURJPY,H1: initialized
2021.05.0308:01:36.343 show_the_shitz EURJPY,H1: Туточки уже 4-й раз!
2021.05.0308:01:36.343 show_the_shitz EURJPY,H1: array[2]
2021.05.0308:01:36.343 show_the_shitz EURJPY,H1: Туточки уже 3-й раз!
2021.05.0308:01:36.343 show_the_shitz EURJPY,H1: array[1]
2021.05.0308:01:36.343 show_the_shitz EURJPY,H1: Туточки уже 2-й раз!
2021.05.0308:01:36.343 show_the_shitz EURJPY,H1: array[0]
2021.05.0308:01:36.343 show_the_shitz EURJPY,H1: Туточки уже 1-й раз!
Puedes ver que la función no sólo se llama en cada iteración, sino incluso +1 vez al final.
Циклы в Си: цикл while с предусловием, цикл do while с постусловием, цикл for со сщётчиком. Бесконечный цикл. Оператор break. Оператор continue. Примеры работы с циклами
¿Está seguro? Intentabas ser inteligente, pero te has vuelto un pícaro...
¿Y te registraste para esto a propósito? Así, desde el primer puesto y en un charco...
Quéconversación tan interesante estáis teniendo) ))
Señores, las personalidades son las personalidades, pero averigüemos la verdad.
Usando el ejemplo, puedo ver quePositionsTotal()es llamado en cada iteración del bucle.
Pero Dimitri, por el contrario, estás diciendo que el compilador lo hace de una manera diferente, no lo entiendo. Explícate.
//+------------------------------------------------------------------+#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade m_trade;
CSymbolInfo m_symbol;
//-------------------------------------------------------------------+voidOnInit()
{
m_symbol.Name(Symbol());
m_symbol.RefreshRates();
for(int i = 0; i < 10; i++)
{
m_trade.Buy(1, _Symbol, m_symbol.Ask() + i * 2 * _Point, 0, 0);
}
//---закомментировать не нужноеfor(int i = 5; i < PositionsTotal(); i++) // так удаляются только 3 сделки
{
m_trade.PositionClose(_Symbol);
}
//---закомментировать не нужноеint index = PositionsTotal();
for(int i = 5; i < index; i++) // так удаляются 5 сделок
{
m_trade.PositionClose(_Symbol);
}
//вывод: PositionsTotal() вызывается на каждой итерации
}
//+------------------------------------------------------------------+
Si quieres decir que la funciónPositionsTotal() no recalcula las posiciones cada vez, sino que simplemente devuelve el valor de una variable que contiene el número de posiciones abiertas, entonces sí, tienes razón, no tiene sentido declarar una variable más, pero entonces ¿qué tiene que ver el compilador?
Y si esta función recalcula las posiciones abiertas cada vez, entonces resulta que el compilador tiene que entender si el valor de esta función afecta a los cálculos posteriores y en base a ello debe sustituir la función o la variable.
Quería añadir antes que si la función somefunc() realiza algunas otras manipulaciones además de devolver alguna cantidad o algo, calcula parámetros comerciales, por ejemplo, tal uso provoca artefactos difíciles de atrapar y puede llevar al autor de un código a un estupor: "¿Ht??? ¿Cómo es que 4 veces? ¡¡¡O_o F$#@!!! ¿No se supone que está ahí tres veces? ¿Por qué me miente mi EA?". Eso es lo que yo llamaba "shithcod", que un experto se escandalizaba hasta las raíces del pelo. No lo he sacado a relucir, porque es obvio, pero tú lo has hecho por mí. Pero no has tenido en cuenta que el direccionamiento por un índice calculado dinámicamente sin reinicialización del array es otra cosa. En sys desnudos esto suele llevar a GPF, en pluses con punteros y arrays inteligentes a una excepción y su manejador. En mql no está claro a qué conduce.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Gracias por el ejemplo.
Creía que era el único que prefería exponer las cosas de esa manera, en lugar de escribir de forma caprichosa.
hz - traducido al ruso como "me gustaría saber"... no pienses mal...Es mejor usar clases de la biblioteca estándar para no tener que escribir todos esos largos PositionGet... etc.
Gracias por el ejemplo.
Creía que era el único que prefería exponer las cosas de esa manera en lugar de escribirlas de forma atontada.
¿Cuál es el problema?
No te tomes esto comoun "nazi de los códigos", pero a mí, por ejemplo, me parecen inquietantes estas construcciones:
Es una molestia para la vista. ¿No sería mejor que no fuera"zaz cómo", sino así?
O este tipo de "shithcodling":
¡DondePositionsTotal()es llamado en cada iteración del bucle!
Un codificador normal nunca manipularía el cuerpo del bucle que recorre las posiciones por su índice (que, gracias a Dios, está ausente aquí) llevando a un cambio de su número. Esto es el colmo del analfabetismo y del código con fallos. Tienes que, en el buen sentido, reiniciar todo el bucle si se supone que ocurre algo así.
También a algunas personas les gusta algo así:
Aunque, para un principiante y no preocupado por las horas extra de CPU para la optimización, esas construcciones "si-entonces-todo" de las lecciones escolares de "programación" en BASIC, son más claras.
Y todo esto sereplica de código a código por el principio de copiar y pegar.
Así que ahí tienes...
...
O este tipo de "shithcoding":
¡DondePositionsTotal()es llamado por cada iteración del bucle!
...
¿Está seguro? Querías ser inteligente, pero estás en la rutina...
¿Y te has registrado para ello? Así de fácil - desde el primer puesto y perderse...
¿Está seguro? Intentabas ser inteligente, pero te has vuelto un pícaro...
¿Y te registraste para esto a propósito? Así de fácil, desde el primer post, estás en el retrete...
Oh, Dios. "Aprende las matemáticas", Elger y Knut. No te metas en lo personal.
Muy bien, te lo explicaré:
¿Está claro, querida?
Si no es así, lea detenidamente https://learnc.info/c/loop.html a partir de [ctrl+f , busque "Cycle for"].
Aquí ni siquiera hay pereza de encontrar el enlace.
Y aprende a escribir un código literario, agradable y conciso. Deberías haber empezado con ensamblador, con microcontroladores donde cada byte cuenta.
P.D.
Aquí incluso me dio pereza mostrarle al experto un simple ejemplo de su bucle "for".
Y este es el resultado de la ejecución de la muestra:
Puedes ver que la función no sólo se llama en cada iteración, sino incluso +1 vez al final.
Así que ahí tienes.
Eh, cariño. "Aprende las matemáticas", Elger y Knut. No te metas en lo personal.
Muy bien, te lo explicaré:
¿Está claro, querida?
Si no es así, lea detenidamente https://learnc.info/c/loop.html a partir de [ctrl+f , busque "Cycle for"].
Aquí ni siquiera hay pereza de encontrar el enlace.
Y aprende a escribir un código literario, agradable y conciso. Deberías haber empezado con ensamblador, con microcontroladores donde cada byte cuenta.
P.D.
Aquí incluso me dio pereza mostrarle al experto un simple ejemplo de su bucle "for".
Y este es el resultado de la ejecución de la muestra:
Puedes ver que la función no sólo se llama en cada iteración, sino incluso +1 vez al final.
Así que ahí tienes.
¡Aplaudo! Sigue...
¡Aplaudo! Continúa...
¿Está seguro? Intentabas ser inteligente, pero te has vuelto un pícaro...
¿Y te registraste para esto a propósito? Así, desde el primer puesto y en un charco...
Quéconversación tan interesante estáis teniendo) ))
Señores, las personalidades son las personalidades, pero averigüemos la verdad.
Usando el ejemplo, puedo ver quePositionsTotal()es llamado en cada iteración del bucle.
Pero Dimitri, por el contrario, estás diciendo que el compilador lo hace de una manera diferente, no lo entiendo. Explícate.
Si quieres decir que la funciónPositionsTotal() no recalcula las posiciones cada vez, sino que simplemente devuelve el valor de una variable que contiene el número de posiciones abiertas, entonces sí, tienes razón, no tiene sentido declarar una variable más, pero entonces ¿qué tiene que ver el compilador?
Y si esta función recalcula las posiciones abiertas cada vez, entonces resulta que el compilador tiene que entender si el valor de esta función afecta a los cálculos posteriores y en base a ello debe sustituir la función o la variable.
Algo no me cuadra.
Interesante conversación la que están teniendo)))