Discusión sobre el artículo "Creación de un algoritmo de creación de mercado en MQL5"

 

Artículo publicado Creación de un algoritmo de creación de mercado en MQL5:

¿Cómo funcionan los creadores de mercado? Consideremos esta cuestión y creemos un algoritmo primitivo de creación de mercado.

Mucha gente piensa que un creador de mercado no asume ningún riesgo. Sin embargo, este no es el caso. El principal riesgo de un creador de mercado es el riesgo de inventario. Este riesgo radica en el hecho de que una posición puede moverse bruscamente en una dirección sin la posibilidad de deshacerse de ella y ganar dinero con el diferencial. Por ejemplo, cuando una multitud frenética vende un activo, el creador de mercado se ve obligado a comprar toda la oferta. Como resultado, el precio entra en negativo y el creador de mercado sufre pérdidas. 

Las empresas intentan evitar este riesgo utilizando ecuaciones especiales de centrado de diferenciales y determinando el precio óptimo de compra y venta. Pero esto no siempre es posible. Aunque el precio no sea óptimo, el trabajo del creador de mercado es suministrar liquidez al mercado, y debe hacerlo, aunque temporalmente opere con pérdidas.

Autor: Yevgeniy Koshtenko

 

Gracias, Eugene, por el artículo. Muchas lagunas en el rompecabezas de mis conocimientos sobre el mercado de divisas se llenan casi por completo.

Hay un único matiz: algunos lectores de tu artículo pueden no iniciar el Asesor Experto en el probador de estrategias si el par de divisas que se está probando tiene un sufijo o prefijo. Deberían tenerlo en cuenta y especificarlo en la configuración de los parámetros del Asesor Experto.

Pero así - ¡¡¡todo es SUPER!!!

Saludos, Vladimir.

 
MrBrooklin #:

Gracias, Eugene, por el artículo. Muchas lagunas en el puzzle de mis conocimientos sobre el mercado de divisas se han llenado casi por completo.

Hay un único matiz: algunos lectores de tu artículo pueden no iniciar el Asesor Experto en el probador de estrategias si el par de divisas que se está probando tiene un sufijo o prefijo. Deberían tenerlo en cuenta y especificarlo en la configuración de los parámetros del Asesor Experto.

Por lo demás - ¡¡¡todo SUPER!!!

Saludos, Vladimir.

¡Muchas gracias! Voy a comprobar mañana con prefijos en otro corredor. Si algo, voy a hacer una adición)

 

Eugene, ayer no miré detenidamente el código del Asesor Experto, ya que estaba más interesado en la parte del texto del artículo, por lo que no hice una pregunta sobre la parte del código resaltada en amarillo:

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int CountOrders(string symb,ENUM_ORDER_TYPE type)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(OrderGetTicket(i)))
        {
         if(OrderGetInteger(ORDER_TYPE)==type && PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic)
            count++;
        }
     }
   return(count);
  }

Presté atención a su advertencia de inmediato: Aquí están las funciones para contar las órdenes abiertas y las posiciones abiertas. CountOrders y CountTrades se encargan de contar las órdenes y posiciones abiertas para un determinado símbolo teniendo en cuenta el número mágico de EA. En realidad no se usan en el código todavía, pero se usarán en futuras versiones, cuando finalmente escriba una función normal para centrar el spread entre límites....

Pero no entiendo muy bien - ¿fue tu idea o debería ser diferente?

Saludos, Vladimir.

 
MrBrooklin posiciones abiertas. CountOrders y CountTrades se encargan de contar las órdenes y posiciones abiertas para un determinado símbolo teniendo en cuenta el número mágico de EA. En realidad no se utilizan en el código todavía, pero se utilizarán en futuras versiones, cuando finalmente escriba una función normal para centrar el spread entre límites....

Pero no entiendo muy bien - ¿fue idea tuya o debería ser diferente?

Saludos, Vladimir.

Era la intención - de lo contrario el Asesor Experto puede empezar a confundir las órdenes de su mago con otras) Symb tiene la intención de hacer una versión multidivisa del Asesor Experto en el futuro. No he conseguido hacerlo todavía)))))

 
Yevgeniy Koshtenko #:

Se pretende - porque de lo contrario la EA puede empezar a confundir las órdenes de su mago con otros) Por simbología se pretende hacer una versión multidivisa de la EA en el futuro. No he sido capaz de hacerlo todavía)))))

Todo está claro con las órdenes, pero ¿por qué se comprueban las posiciones de symbol y magik en esta función? ))

Saludos, Vladimir.

 

Esto es una vergüenza para MQ, no un artículo. ¿Cómo se puede permitir que se publique algo así?

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int CountTrades(string symb)
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            count++;
           }
        }
     }
   return(count);
  }

PositionGetTicket(i) según la documentación"La función devuelve un ticket de una posición por índice en la lista de posiciones abiertas y selecciona automáticamente esta posición para seguir trabajando con ella...". ¿Y por qué seleccionar una posición por su ticket utilizando la función PositionSelectByTicket si ya está seleccionada? ¿Está enseñando a los recién llegados cómo no hacerlo?

La observación de Vladimir es bastante justa. Y tu respuesta no tiene nada que ver con eso... ¿Por qué comprobar el símbolo y el magik POSITION si trabajamos con órdenes????

 

Aparte del código, tampoco me gustó la parte del texto.

Es una basura, no es más que un trozo de papel.

Es un tema interesante, sin discusión.

¿Qué tipo de mercado estamos creando, qué sentido tiene?

El hecho de que no era posible crearlo es un hecho, porque el autor carecía de matriz.

y hay mucha por ahí.

Hay que pensarlo por lo menos otros ...diez años, tal vez logremos hacerlo.

como un comienzo y como una forma de mejorar - ok, en esto apoyo.

 

Renat Akhtyamov #:

¿Qué tipo de creación de mercado estamos creando, qué sentido tiene?

El hecho de que no fue posible crearlo es un hecho, ya que el autor carecía de la matriz necesaria

Deberías leer elartículo no en diagonal, sino desde el principio hasta el final, es decir, completamente, entonces no surgirán tales preguntas.

Estoy completamente de acuerdo con la crítica de Alexey Viktorov sobre el uso de la funciónPositionSelectByTicket() cuando ya se ha seleccionado un ticket sin ella. Por cierto, yo tampoco le presté atención.

Pero gracias por el artículo.

Saludos, Vladimir.

 
MrBrooklin #:

Elartículo no debe leerse en diagonal, sino de principio a fin, es decir, por completo, pues así no surgirán estas preguntas.

Estoy completamente de acuerdo con la crítica de Alexey Viktorov sobre el uso de la función PositionSelectByTicket () cuando ya se ha seleccionado un billete sin ella. Por cierto, yo mismo no le presté atención.

¡Pero gracias por el artículo de todos modos!

Saludos, Vladimir.

No se selecciona un ticket, sino una posición para trabajar con sus propiedades mediante las funciones correspondientes.

 
Alexey Viktorov #:

No se selecciona un ticket, sino una posición para trabajar con sus propiedades a través de las funciones adecuadas.

Hola Alexei, gracias por la aclaración. )) Cuando escribí mi mensaje, me basé en la misma documentación (resaltada en amarillo):

Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней 
при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString.

ulong  PositionGetTicket(
   int  index      // número en la lista de elementos
   );

Параметры

index

[in]  Индекс позиции в списке открытых позиций, начиная с 0.

Возвращаемое значение

Тикет позиции. В случае неудачного выполнения возвращает 0.

Saludos, Vladimir.