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

 

Artículo publicado El uso de ORDER_MAGIC para el trading con distintos Expert Advisors con un solo instrumento:

Este artículo aborda cuestiones de codificación de la información, mediante la identificación mágica (magic-identification), así como la división, la agrupación y la sincronización del trading automatizado de distintos Expert Advisors. Este artículo puede resultar interesante para los principiantes, como para los traders más experimentados, ya que aborda la cuestión de las posiciones virtuales, que pueden ser muy útiles en la implementación de sistemas complejos de sincronización de los Expert Advisors y de varias estrategias.

Figura 7. El resultado es un trading sin conflictos de tres Expert Advisors con distintos números mágicos

Autor: Nikolay Demko

[Eliminado]  

No sé quién ni cómo, yo prefiero especificar explícitamente los números de identificación al crear mis propias enumeraciones (aunque no es necesario).

Por ejemplo así:

enum Emagic
{
ENUM_DIGITAL_NAME      = 0, // nombre numérico del asesor
ENUM_CODE_INTERACTION  = 1, // código de interacción
ENUM_EXPERT_SYMBOL     = 2  // el símbolo en el que se lanza el EA
};

Esto también puede ayudar a la hora de migrar desde MQL4, por ejemplo, esta es la enumeración que uso para trabajar con pedidos

//ENUM_MT4_ORDER_TYPE
enum ENUM_MT4_ORDER_TYPE
//Tipos de operaciones comerciales
{
OP_BUY  = 0, /Compra 
OP_SELL = 1, //Venta 
OP_BUYLIMIT  = 2, // Orden pendiente de COMPRA LIMITADA 
OP_SELLLIMIT = 3, //Orden pendiente LÍMITE DE VENTA 
OP_BUYSTOP   = 4, //Orden pendiente de COMPRA STOP 
OP_SELLSTOP  = 5  //Orden STOP de VENTA pendiente 
};

Este enfoque es conveniente, porque independientemente de la posición del identificador en la enumeración, su Código (valor numérico no cambiará)....

Además, este enfoque es conveniente si la enumeración debe contener identificadores con un valor negativo


PS

Artículo muy interesante, gracias al autor...

 
Interesting:

No sé quién ni cómo, yo prefiero especificar explícitamente los números de identificación al crear mis propias enumeraciones (aunque no es necesario).

Por ejemplo así:

Esto también puede ayudar a la hora de migrar desde MQL4, por ejemplo, esta es la enumeración que uso para trabajar con pedidos

Este enfoque es conveniente, porque independientemente de la posición del identificador en la enumeración, su Código (valor numérico no cambiará)....

Además, este enfoque es conveniente si la enumeración debe contener identificadores con un valor negativo


PS

Artículo muy interesante, gracias al autor...


Para mi no es crucial, porque al declarar una enumeración los valores se asignan en orden automáticamente,

aunque estoy de acuerdo en que tu variante es más clara (sobre todo si las enumeraciones son largas, digamos más de 3-4).

 

Con tal acercamiento al mago es necesario escribir la misma instrucción para el usuario - para que el usuario pueda saber claramente qué magos estarán ocupados y cuáles están libres. Los usuarios de Asesores Expertos utilizan Asesores Expertos no sólo de un desarrollador, y el método es poco probable que se incluya en las normas, que son utilizados por todos los escritores de Asesores Expertos. Si los desarrolladores del terminal hubieran dividido este ulong en varias variables, para que hubiera varios mages, por ejemplo, cuatro de dos bytes.

request.magic
request.id1
request.id2
request.id3

O al menos completar el terminal con una librería, para que de alguna manera se pudiera incluir en los estándares.

SetMagic(Magic,Id1,Id2,Id3) 
[Eliminado]  
Integer:

Con tal acercamiento al mago es necesario escribir la misma instrucción para el usuario - para que el usuario pueda saber claramente qué magos estarán ocupados y cuáles están libres. Los usuarios de Asesores Expertos utilizan Asesores Expertos no sólo de un desarrollador, y el método es poco probable que se incluya en las normas, que son utilizados por todos los escritores de Asesores Expertos. Si los desarrolladores del terminal hubieran dividido este ulong en varias variables, para que hubiera varios mages, por ejemplo, cuatro de dos bytes.

O al menos completar el terminal con una librería, para que de alguna manera se pudiera incluir en los estándares.

No es en absoluto un hecho que para el usuario sea necesario escribir la instrucción sobre el trabajo con MAGIK, incluso si así fuera no iría más allá de la descripción de cómo está formado MAGIK.....

Creo que en este momento este es uno de los mejores artículos sobre la automatización del comercio. Voy a decir más - yo mismo soy un partidario de la codificación de MAGIC a un nivel más serio que 777777 o 555555, incluso tal vez prefiero poner allí información más detallada que decir que se hace por el autor.

Pero no me di cuenta de usar estructuras (ya que la idea de codificar existe desde MQL4), aunque probablemente estuve a punto de hacerlo....

Tampoco creo que sea necesario "escribir" en MAGIC ninguna información sobre los símbolos sobre los que se realizan las operaciones (esto es debido a que esta información ya está almacenada en otro lugar y desde el momento de la orden y hasta el momento del cierre total de la posición no cambia). También creo que bastará con asignar los tres últimos dígitos de la MAGIA (si no se utiliza el código de seguridad) al MARCADOR (O MARCADOR, no diré exactamente cómo es en ingeniería genética) del EXPERTO.

Esto se debe a que en el PRIMER de estos dígitos se pueden codificar 9-10 clases básicas de expertos, y en los dos restantes su número único desde el punto de vista del usuario o desarrollador. Como resultado, normalmente obtendrá de 900 a 1000 combinaciones.

También prefiero un algoritmo en el que el Asesor Experto reconozca al menos las órdenes establecidas por el trader y las codifique en consecuencia.

PS

No creo que haya que tener miedo de que varios EAs confundan el MAGIC codificado, al menos creo que con un cierto enfoque no es tan peligroso (y probablemente probable) como parece a primera vista. Especialmente se vuelve irrelevante si todos estos expertos (aunque sean de diferentes autores) apoyan esta metodología de codificar MAGIC y tienen en cuenta las acciones de los demás. Lo ideal es que sólo un experto opere con tal o cual par.....

 

El artículo da un ejemplo de uso de códigos, y no se utilizan todos los dígitos y la codificación es obviamente con exceso,

Si es necesario, incluso estos 9 bits ocupados pueden ser comprimidos.

Además de la identificación al mago (esos sus 9 bits restantes) también se puede transferir el estado de la balanza en el momento de hacer un pedido.

Dado que el equilibrio es poco probable que tome más de 6 bits, todavía hay espacio para cualquier codificación.

 
Urain:

El artículo da un ejemplo de uso de códigos, y no se utilizan todos los dígitos y la codificación es obviamente con exceso,

Si es necesario, incluso estos 9 bits ocupados pueden ser comprimidos.

Además de la identificación al mago (esos sus 9 bits restantes) también se puede transferir el estado de la balanza en el momento de hacer un pedido.

Dado que el saldo es poco probable que tome más de 6 bits, todavía hay espacio para cualquier codificación.

A todo esto hay que añadir 1000 o 10000 y restarlo antes de descodificar, para que haya un rango garantizado de magias no ocupadas por su método.

 
Integer:

A todo esto hay que añadir 1000 o 10000, y antes de la decodificación de restar, por lo que hay un rango garantizado de no ocupado por su método de magias.

Bueno, cómo hacer esto sin dolor descrito en el artículo (sólo necesita un poco de trabajo para ampliar el rango de cifrado),

No veo ningún problema.

PS el único lugar delgada no debe olvidarse de traducir el saldo en enteros de lo contrario la coma dará glitch, cómo hacerlo debe ser visto en la unión si la cuenta cent entonces multiplicar por 100 si tal precisión no es necesario entonces la traducción en int con el recorte.

 
Urain:

Bueno, la forma de hacerlo sin dolor se describe en el artículo (sólo necesita un poco de ajuste para ampliar la gama de cifrado),

No veo ningún problema.

PS el único lugar delgada no debe olvidarse de traducir el saldo en enteros de lo contrario coma dará glitch, cómo hacerlo debe mirar a la unión si la cuenta es cent entonces multiplicar por 100 si tal precisión no es necesaria entonces la traducción en int con recorte.

Si no hay problema, da una instrucción corta y clara, como garantizar la no-intersección de magias codificadas por tu sistema y no codificadas.

 
Integer:

Si no es un problema, da una instrucción corta y clara, como garantizar la no-intersección de magiks codificados por tu sistema y no codificados.

Para que mi respuesta no parezca una excusa diré de una vez que esta pregunta no se tiene en cuenta, pero está permitida.

Aquí está el valor máximo de ulong 18 446 744 073 709 551 615 esos 17*10^18 tiene todos los campos libres. Стоит добавить при кодировании 17 000 000 000 000 000 000 и поставить при декодировании проверку содержит ли 20 и 19 разряд числа 1 и 7 и вы гарантированно определите кодированный ли магик или нет.

//+------------------------------------------------------------------+
//| La función devuelve un magik prefabricado ensamblado a partir de los datos de entrada |||
//+------------------------------------------------------------------+
ulong Cmagic::SetMagic_request(int digital_name=0,int code_interaction=0)
  {
   if(digital_name>=1000)Print("El nombre numérico del asesor está mal configurado (mayor de 1000)");
   if(code_interaction>=1000)Print("Código de identificación alienígena incorrecto (mayor de 1000)".);
   mag.digital_name     =digital_name;
   mag.code_interaction =code_interaction;
   mag.expert_symbol    =symbolexpert();
   mag.magicnumber      =17000000000000000000+// вот эта вставка даст 20 разрядов магику
                         mag.digital_name*(int)pow(1000,2)+
                         mag.code_interaction*(int)pow(1000,1)+
                         mag.expert_symbol;
   return(mag.magicnumber);
  }

y en el decodificador.

//+------------------------------------------------------------------+
//| La función divide el magik en tres partes de tres dígitos ||
//|| y devuelve la parte apuntada por la categoría ||
//+------------------------------------------------------------------+
int Cmagic::decodeMagic_result(int category)
  {
   string string_value=(string)mag.magicnumber;
   int rem=(int)MathMod(StringLen(string_value),3);
   if(rem!=0)
     {
      rem=3-rem;
      string srem="0";
      if(rem==2)srem="00";
      string_value=srem+string_value;
     }
   int start_pos=StringLen(string_value)-3*category;
   string value=StringSubstr(string_value,start_pos,3);
   if(StringLen(string_value)!=20)return((int)StringToInteger("0"));//если магика не 20 разрядов значит не кодированный
   return((int)StringToInteger(value));
  }

así es, y no olvides Dimitri que el que quiere hacer busca una oportunidad y el que no quiere hacer busca una razón, abrí una ventana en tu poder para hacer de ella una ventana o incluso una puerta.

Por cierto, yo uso este

(int)pow(1000,2)

desplazamiento por dígitos pero nadie prohíbe reescribirlo a través de string, simplemente en el artículo quería mostrar ambos métodos y si es posible encajarlos orgánicamente (así la codificación va a través de int y la decodificación a través de string).

Y en general quería mostrar las posibilidades y no dar un convertidor de caja negra (es mejor dar a un hombre una pala que un cubo de gachas).

PS aquí dijo una cosa codificada otra, ( tengo una tormenta eléctrica para que la red está regularmente noqueado) codificado cheque no 1 y 7 en 20 y 19 dígitos y la presencia de estos mismos dígitos los que si el magik 20 dígitos significa codificación utilizado, pero usted entiende el cheque puede ser reproducido.

 

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.