El EOP para escolares. - página 17

 
Artyom Trishkin:

Es exactamente lo mismo que con las variables.

Y el enfoque:

para qué sirve este puntero si el comercio está disponible en la función OnTrade

#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы

int OnInit()
{
 trade.SetExpertMagicNumber(123);
}

void OnTick()
{
 trade.Buy(0.1);
}
 
Alexey Viktorov:

Para qué sirve este puntero si está disponible en la función OnTrade

Ninguna. Pero con eso te mostré la diferencia entre la forma en que escribiste otro (segundo) objeto del mismo tipo, y la forma en que puedes acceder a un solo objeto por puntero.

Era un ejemplo simplificado para responder a tu pregunta sobre las diferencias y preferencias.

Ya sabes, haces preguntas con ejemplos demasiado simples, y cuando te contestan, haces otra pregunta -bastante razonable- "¿por qué?".

Porque tus ejemplos no necesitan ser resueltos con clases.

Aquí hay dos opciones: o lees y entiendes lo que te dicen, o... O resuelve sus problemas de forma procesal. En ese caso no tendrás preguntas "por qué razón".

Ahora imagine que su clase CTrade no está en el ámbito global. И ?

Imagínese también que no sólo tiene un objeto de este tipo (como ocurre en casi todos los ejemplos de kodobase), sino tantos símbolos como añada/elimine manualmente del programa. И ?

 
Сергей Таболин:

En ese caso, ¿es

¿Descripción incorrecta?

Tenía entendido que si se fijaba para EA, entonces cualquier orden/posición debería tener este magik. ((

¿Por qué de repente es incorrecto?

Un EA puede tener varios magos y todos ellos son suyos.

Incluso en un ulong-magic, puedes almacenar una ID de Experto común+algunos magos+algunas ID diferentes, y todavía te sobra espacio.

 
Artyom Trishkin:

Ninguna. Pero con eso te mostré la diferencia entre la forma en que escribiste otro (segundo) objeto del mismo tipo, y la forma en que puedes acceder a un solo objeto por puntero.

Era un ejemplo simplificado para responder a tu pregunta sobre las diferencias y preferencias.

Ya sabes, haces preguntas con ejemplos demasiado simples, y cuando te contestan, haces otra pregunta -bastante razonable- "¿por qué?".

Porque tus ejemplos no necesitan ser resueltos con clases.

Aquí hay dos opciones: o lees y entiendes lo que te dicen, o... O resuelve sus problemas de forma procesal. En ese caso no tendrás preguntas "por qué razón".

Ahora imagine que su clase CTrade no está en el ámbito global. И ?

Imagina también, que no tienes un objeto de este tipo (como es en casi todos los ejemplos en kodobase), sino tantos caracteres que añades/eliminas manualmente del programa. И ?

No, Artyom, hago preguntas para entender, no para aplicar. Y cuando sugieres una solución a una idea idiota, es cuando pregunto "¿Por qué?". Verás, si vuelvo a preguntar a mi manera y me responden bien o mal creo, entonces todo lo que me han dicho al respecto ya no lo olvidaré y lo haré con comprensión, o con comprensión no lo haré. Tengo mis propias cucarachas...)) No sé cómo hacer algo sin entenderlo. Nunca he resuelto un problema de matemáticas sólo a partir de una solución de ejemplo. No sé cómo. Tuve 5 suspensos y un notable en matemáticas el año que terminé el octavo curso. Todo estaba bien, me permitieron hacer los exámenes con la condición de que si escribía un ensayo con una C, se me permitiría pasar los exámenes, corregir las F y se me permitiría ir a la GPTU. El instituto fue mucho más tarde. Ahí es donde caí enfermo con la programación, pero sólo se enseñó superficialmente. Y la OOP en ese momento, me parece, puede haber sido apenas concebida.

 
Alexey Viktorov:

No Artem, hago preguntas para entender, no para aplicar. Y cuando se ofrece una solución a una idea idiota, es cuando pregunto "¿Por qué?". Verás, si vuelvo a preguntar a mi manera y me responden bien o mal creo, entonces todo lo que me han dicho al respecto ya no lo olvidaré y lo haré con comprensión, o con comprensión no lo haré. Tengo mis propias cucarachas...)) No sé cómo hacer algo sin entenderlo. Nunca he resuelto un problema de matemáticas sólo a partir de una solución de ejemplo. No sé cómo. Tuve 5 suspensos y un notable en matemáticas el año que terminé el octavo curso. Bueno, me dejaron hacer los exámenes con la condición de que si escribo un ensayo con una C, me permitirán pasar los exámenes, corregir los F y me dejarán ir a la GPTU. El instituto fue mucho más tarde. Ahí es donde caí enfermo con la programación, pero sólo se enseñó superficialmente. Y la OOP en ese momento, me parece, puede haber sido apenas concebida.

Entonces es extraño que haya hecho estas preguntas en primer lugar.

Entiendes la diferencia entre las variables declaradas en diferentes ámbitos. Lo haces. Y haces una pregunta como si fuera la primera vez que oyes hablar delos ámbitos de las variables.

Cuando te enseñan a utilizar un puntero a un objeto previamente creado, te haces una extraña pregunta: "¿por qué, si el objeto ya es visible?". Así que no se le mostró cómo hacerlo, sino cómo obtener un puntero en ese ejemplo y referirse al objeto por el puntero. Y no serán dos objetos diferentes en ámbitos distintos, sino uno solo.
¿Pero qué pasa si el objeto no está en el ámbito global sino dentro de algún otro objeto? Y ese otro objeto sólo devuelve un puntero al objeto CTrade que necesitas. En este caso, el ejemplo no daría lugar a la pregunta "¿por qué? Creo que no lo hará. Pero se puede dar a entender que se responde en el supuesto de que se entiende la simplicidad de su ejemplo y se omite la visibilidad global del objeto "detrás de los paréntesis".

 
Artyom Trishkin:

¿Por qué iba a ser incorrecto de repente?

Un experto puede tener varios magos y todos son suyos.

Incluso en una magia se puede almacenar una identificación de EA común + varias magias + varias identificaciones diferentes y todavía queda mucho espacio.

Lo entiendo. Al hacer una solicitud de intercambio, puedes especificar cualquier mago. Un EA puede abrir cada nueva posición con un nuevo mago. También codifico el símbolo, TF, etc. en mi magik. Todo esto está claro.

Sólo estaba seguro de queSetExpertMagicNumber es como una solución global. Si una solicitud de comercio no especifica explícitamente una magia, entonces toma el valor establecido a través deSetExpertMagicNumber. Si no, personalmente no le veo el sentido).

 
Сергей Таболин:

Lo entiendo. Al hacer una solicitud de intercambio, puede especificar cualquier asistente. Un EA puede abrir cada nueva posición con un nuevo magik. También codifico un símbolo, TF, etc. en mi magik. Todo esto está claro.

Sólo estaba seguro de queSetExpertMagicNumber es como una solución global. Si una solicitud de comercio no especifica explícitamente una magia, entonces toma el valor establecido a través de SetExpertMagicNumber. Si no, personalmente no le veo el sentido ))

El método establece el número mágico no al Asesor Experto, sino a un objeto de una clase de comercio. Puede haber varias clases de operaciones en un EA y se puede establecer un número mágico independiente para cada una de ellas, que incluye en su valor tanto un número mágico común para el EA como un número mágico independiente para cada uno de los objetos de operaciones.

 
Artyom Trishkin:

Entonces es extraño que hayas hecho estas preguntas.

No es nada extraño. Si no entiendo nada de OOP, entonces no estaba seguro, o tenía algunas dudas, de haberlo entendido correctamente. Pedí una aclaración, me confirmaron y ahora estoy seguro (de mañana). Como ese monólogo de G. Hazanov.

- Imagina que estás de pie en la ventana, y en la ventana de enfrente, desprevenida, hay una mujer desnuda. ¿Qué sientes?

- Confianza en el futuro.

- ¿Y cuál es tu próximo movimiento?

- Me voy a mudar a otra habitación. Tengo una ventana más grande allí.

 
Alexey Viktorov:

¿Estoy en lo cierto al suponer que con esta opción

sin considerar una advertencia del compilador, la posición puede abrirse con un número mágico distinto de 123 ?

Es decir, se creará un nuevo objeto en la función OnTick y el número mágico en él no será igual a 123.

La posición se abrirá con un número mágico igual a "0", es decir, la línea

void OnTick()
{
 CTrade trade;

recrea el objeto y la magia de CTrade se inicializa a "0" por defecto (en el constructor de la clase) cuando se crea un objeto de clase de comercio:

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade(void) : m_async_mode(false),
   m_magic(0),
   m_deviation(10),
   m_type_filling(ORDER_FILLING_FOK),
   m_log_level(LOG_LEVEL_ERRORS)
 
Vladimir Karputov:

La posición se abrirá con un número mágico igual a "0" - es decir, la cadena

recrea el objeto de nuevo y la magia de CTrade se inicializa con cero por defecto (en el constructor de la clase) al crear el objeto de la clase de comercio:

¿Sí? ¿No crea un objeto nuevo e independiente?