Discusión sobre el artículo "El uso de ORDER_MAGIC para el trading con distintos Expert Advisors con un solo instrumento" - página 2

 
ias:


2.Qué significa la expresión (int) y qué valor toma en int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;


Lea sobre la conversión explícita de tipos.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
ias:

1.Gracias al autor por el artículo.
2.¿Qué significa la expresión (int)?.Qué significa la expresión (int) y qué valor toma en int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3. ¿Qué significa la expresión (int) y qué valor toma en int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP))?¿Por qué, durante las pruebas, la expresión (int) y SYMBOL_VOLUME_STEP toman los valores Unknown identifier y cómo afecta al resultado int DIGITS?
4.¿Cómo funciona el código de interacción?
¿Importa el código de interacción cuando los EAs trabajan en el mismo instrumento, donde basta con establecer nombres numéricos idénticos o diferentes de los EAs.

La expresión (int) es una conversión de la siguiente expresión al tipo int.

La expresión SYMBOL_VOLUME_STEP es uno de los valores de la enumeración ENUM_SYMBOL_INFO_INTEGER.

Ninguna de las expresiones anteriores es una variable, por lo que naturalmente tienen el valor "Identificador desconocido" en Debugger,

que literalmente significa "imposible de reconocer", Debugger simplemente no puede entender a qué tipo pertenece la variable declarada para el seguimiento.


Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
ias:


4.¿Cómo funciona el código de interacción?
¿Importa el código de interacción cuando los EAs trabajan en el mismo instrumento, donde es suficiente establecer nombres numéricos idénticos o diferentes de los EAs.

Lo siento, me distraje y no respondí a la 4ª pregunta.

El código de interacción se utiliza como un magik único para varios Asesores Expertos de confianza.

Por ejemplo, usted tiene un EA absolutamente trabajado en el que no quiere cambiar nada, pero ha creado un EA de seguimiento y quiere probar cómo funcionará con este EA. Usted inicia el EA original y el EA de seguimiento y da el mismo código de interacción a ambos EAs y ellos percibirán las acciones del otro como propias, mientras que los cambios realizados por terceros EAs sin dicho código de interacción serán ignorados (aquellos serán invisibles para el par de EAs seleccionados).

Al mismo tiempo, puede procesar algunos datos por separado porque el código de identificación del EA (nombre digital) es diferente,

todo depende de la solicitud tal y como la formule (por ejemplo, puede formar un informe sólo sobre el trabajo de la red de arrastre).

Una misma transacción dependiendo de la solicitud puede ser definida como propia o ajena.

[Eliminado]  
ias:

1.Gracias al autor por el artículo.
2.¿Qué significa la expresión (int)?.Qué significa la expresión (int) y qué valor toma en int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3. ¿Qué significa la expresión (int) y qué valor toma en int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP))?¿Por qué, durante las pruebas, la expresión (int) y SYMBOL_VOLUME_STEP toman los valores Unknown identifier y cómo afecta al resultado int DIGITS?
4.¿Cómo funciona el código de interacción?
¿Importa el código de interacción cuando los EAs trabajan en el mismo instrumento, donde basta con establecer nombres numéricos idénticos o diferentes de los EAs.

Como entiendo que usted no entiende muy bien el significado del código, vamos a entender lo que sucede en detalle

int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;

1. Obtenemos el tamaño del paso de volumen del lote para el instrumento, SYMBOL_VOLUME_STEP - Paso de volumen mínimo para realizar una operación (Normalmente es 0,01);

2. 2. Obtener el logaritmo del número en base 10 => -log10(0,01) = 2 o -log10(0,10) = 1 (para MQ es -log10(0,10) = 1);

3. igualar el resultado (-2/-1) a la variable DIGITS, que es de tipo int.

4. Si el valor de DIGITS<0 asignarle el valor = 0.

PS

(int) se utiliza para forzar el resultado de un cálculo al tipo int...

 

Este artículo no refleja el evento "Stop Loss/Stake Profit ocurrido". ¡Y esto es una omisión muy fuerte!

Ejemplo: un Asesor Experto tiene dos partes: la primera funciona cuando la "posición virtual " en un determinado símbolo y marco temporal es igual a 0, y la segunda funciona cuando esta "posición virtual" no es igual a cero; pues bien, digamos que el Asesor Experto cierra esta posición. Consideremos una situación: en alguna señal hicimos una compra, la "posición virtual " tomó el valor +100. Se ha activado un stop loss, la "posición virtual " real ha tomado el valor 0. Pero en nuestro caso será igual a +100. El Asesor Experto "pensará" que la posición es +100, pero en realidad es 0, lo que conducirá a un resultado no deseado.

Por favor, explíqueme este punto.

 
beast:

Este artículo no refleja el evento "Stop Loss/Stake Profit ocurrido". ¡Y esto es una omisión muy fuerte!

Ejemplo: un Asesor Experto tiene dos partes: la primera funciona cuando la "posición virtual " en un determinado símbolo y marco temporal es igual a 0, y la segunda funciona cuando esta "posición virtual" no es igual a cero; pues bien, digamos que el Asesor Experto cierra esta posición. Consideremos una situación: en alguna señal hicimos una compra, la "posición virtual " tomó el valor +100. Se ha activado un stop loss, la "posición virtual " real ha tomado el valor 0. Pero en nuestro caso será igual a +100. El Asesor Experto "pensará" que la posición es +100, pero en realidad es 0, lo que conducirá a un resultado no deseado.

Por favor, explíqueme este punto.

Así es, este artículo no contiene un módulo para procesar órdenes stop.

Describe las posibilidades de utilizar el número mágico.

Para utilizar una posición virtual, se necesitarán stops virtuales.

 

Entonces, ¿por qué necesitamos la magia?

Porque si la usamos para escarbar en el historial, no obtendremos una imagen completa de las órdenes colocadas por este Asesor Experto, porque no podremos identificar stop losses y take profits.

 
beast:

Entonces, ¿por qué necesitamos la magia?

Porque si la usamos para escarbar en el historial, no obtendremos una imagen completa de las órdenes colocadas por este Asesor Experto, porque no podremos identificar stop losses y take profits.


Es necesario entender que es un error utilizar stops como parte de una estrategia de trading. Las órdenes stop almacenadas en el servidor son órdenes de protección ante situaciones en las que algo ha ido mal (fallo de comunicación con el servidor, pánico en el mercado), en otros casos las órdenes stop virtuales en forma de señales EA son bastante adecuadas.

Pero la práctica demuestra que los programadores son a menudo perezosos para virtualizar las paradas. Después de todo, es mucho más fácil utilizar órdenes de stop ya preparadas.

 

Al calcular es necesario pasar por todas las operaciones, si una operación con un determinado mago - tenemos en cuenta su volumen, todas las demás operaciones se comprueban por el hecho de cierre por stoploss/stakeprofit, si hay alguno, entonces es necesario restablecer la cantidad calculada. En mi artículo stoploss tampoco se tiene en cuenta. Quien lo hubiera pensado... Este es un tema nuevo, tendreis que disculparme.

Con este magik hay una cosa mas, el EA abrio una posicion, tu desconectas el EA y cierras posiciones manualmente - eso es todo, despues de eso habra contabilidad incorrecta.

Y cual es la situación: digamos que un EA abrió compra 0.1, el segundo EA abrió venta 0.1, la posición acumulada es igual a 0, y se considera que hay dos contra posiciones.

Además de todo esto necesitamos algún medio de control, algún script para calcular si los volúmenes calculados para todos los magos son consistentes con el volumen real, necesitamos medios de nivelación - abrir con un magos y cerrar con otro.

Esto plantea una gran pregunta si el uso de magik estará en la demanda en absoluto, y si es así, cómo vivir con ella....

¿Deberíamos abrir una cuenta separada para cada asesor?

 

Por favor, corrígeme si me equivoco ...

Tengo que probar algo parecido a tu código aquí para discriminar operaciones y posiciones de diferentes EAs. Tengo varias dudas. ¿Está optimizado este código? Creo que este código podría ralentizar mucho el ordenador si tienes un largo historial de operaciones y varios eas ejecutando este código -aunque aún no lo he probado, es sólo lo que pienso-.

Por ejemplo, en el fichero magic_exp1_es.mq5, el método prHistory_Deals(ulong &buf[],int HTD) rellena el buffer buf[] con todas las operaciones que hemos tenido.

¿No sería mejor para el rendimiento si almacenáramos sólo el último DEAL IN aún no rellenado por un DEAL OUT?

Quizás no he entendido bien lo que hace el código. Lo que creo que hace el código en magic_exp1_es.mq5 es lo siguiente: para todo el historial de operaciones desde el principio de los tiempos :-) comprueba si la suma de los volúmenes de todos los DEAL_TYPE_SELL y DEAL_TYPE_BUY es la misma, en cuyo caso no tenemos una posición abierta. Si el volumen de las VENTAS es mayor que el de las COMPRAS, entonces tenemos una posición general de VENTA, y una posición de COMPRA si el volumen de las COMPRAS es mayor que el de las VENTAS.

¿No hay otra forma?