Discusión sobre el artículo "Órdenes, Posiciones y Transacciones en MetaTrader 5" - página 2

 

Торговыми событиями считаются следующие изменения на счете:

  • cargo e imputación de fondos;
  • cobro de comisiones, swaps e impuestos;
  • establecimiento, supresión y modificación de órdenes
  • ejecución de operaciones sobre la base de órdenes
  • apertura y cierre de posiciones;
  • modificación del volumen y la dirección de las posiciones.

La lista no incluye un evento de negociación como la "modificación de los niveles StopLoss y/o TakeProfit" de una posición abierta(Modificación SL & TP). ¿O se considera como un caso especial de "ejecución de operaciones sobre la base de órdenes"?

 
Yedelkin:

La lista no incluye un evento de negociación como la "modificación de los niveles StopLoss y/o TakeProfit" de una posición abierta(SL & TP Modification). ¿O se considera un caso especial de "operaciones basadas en órdenes"?

"Modificación de los niveles StopLoss y/o TakeProfit" de una posición abierta(SL & TP Modification)" está más cerca de "establecimiento, eliminación ymodificación de órdenes".
  • establecimiento, eliminación y modificación de órdenes";
 
Rosh:
"Modificación de los niveles StopLoss y/o TakeProfit" en una posición abierta(Modificación SL & TP)" se acerca más a la

a esta pregunta. Pero, en realidad, al hablar de "establecimiento, supresión y modificación de órdenes", estamos hablando de establecimiento, supresión y modificación de órdenes pendientes . La modificación de los niveles SL y/o TP de una posición abierta es de naturaleza algo diferente, ya que las solicitudes correspondientes pertenecen a la categoría de "órdenes de ejecución inmediata ". ¿O me equivoco al hablar de "ejecución inmediata"?

 
Rosh:

El artículo da un ejemplo de carga del historial de operaciones de un día (un código tiene un ejemplo de carga del historial de 3 días). Sí, se trata de una limitación y el ejemplo no es universal. Pero si el lector entiende esta peculiaridad mientras lee el artículo, podrá decidir por sí mismo la pregunta - para qué intervalo y desde qué momento necesita cargar el historial de operaciones en la caché.

El lector ha recibido los ejemplos y algoritmos más simples y ahora puede aplicarlos independientemente en las funciones necesarias de procesamiento de eventos. Puede crear de forma independiente su propia base de historial de operaciones y realizar su inicialización y sincronización, etc.

Un intento de dar recetas y funciones específicas para el trabajo óptimo con el historial de operaciones para todos los casos requerirá al menos un artículo más. Más concretamente, no los ejemplos en sí, sino enfoques para resolver determinadas tareas. El objetivo de este artículo era entender cómo funcionan las funciones de trading y a qué matices hay que prestar atención para no perder el tiempo investigando.

Estoy seguro de que después de leer el artículo, todo será fácil de aquí en adelante.

Rashid, no estoy menospreciando la utilidad del artículo.

Es sólo que sin ejemplos de la vida (los que se pueden aplicar a escribir un EA) parece bastante referencial.

Sí, hay información útil en él, y una persona entendida podrá utilizarla. Pero un usuario poco sofisticado no será capaz de organizar un trabajo normal con la historia después de leer sólo este artículo, es decir, le será inútil.

 

Hay una parte en el artículo:

"Por ejemplo, he aquí un script que busca el último pedido del último día y muestra información al respecto.

// --- definir los límites del historial comercial requerido
   datetime end=TimeCurrent();                 // hora actual del servidor
   datetime start=end-PeriodSeconds(PERIOD_D1);// fijar el inicio en 24 horas
//--- solicitar el historial de operaciones del día en la caché del programa
   HistorySelect(start,end);
//--- obtener el número de pedidos en el historial
   int history_orders=HistoryOrdersTotal();
//--- obtener el ticket del pedido del histórico que tiene el último índice de la lista
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // obtener el orden histórico en caché, trabajar con él
     {
      //--- estado del pedido
      ENUM_ORDER_STATE state=(ENUM_ORDER_STATE)HistoryOrderGetInteger(order_ticket,ORDER_STATE);
      long order_magic      =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
      long pos_ID           =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);
      PrintFormat("Pedido #%d: ORDER_MAGIC=#%d, ORDER_STATE=%d, ORDER_POSITION_ID=%d",
                  order_ticket,order_magic,EnumToString(state),pos_ID);

     }
   else              // intento fallido de obtener una orden

     {
      PrintFormat("Total %d pedidos en el historial, falló al seleccionar un pedido"+
                  " con índice %d. Error %d",history_orders,history_orders-1,GetLastError());
     }

La descripción del script dice que se busca el último pedido, pero el propio código habla de obtener el ticket que tiene el último índice en la lista de pedidos históricos:

//--- obtener el ticket del pedido del historial que tiene el últimoíndice    в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
Es decir, se da a entender que es el ticket con el máximo índice el que hace referencia al último pedido. Pero no he encontrado en ninguna parte de los materiales que se garantice que el último pedido tenga siempre el índice máximo en la lista de pedidos históricos. ...Si, digamos, sólo hay un pedido en la lista, no hay duda. Pero si hay más pedidos en la lista, ¿podemos confiar siempre en el método propuesto para encontrar el último pedido? En otras palabras, ¿está siempre garantizado que el último pedido histórico tiene el índice máximo en la lista de pedidos históricos?
 

Buenas tardes

1) He mirado las propiedades de la posición:

POSITION_PROFIT

¿qué es, en qué se mide?

Ejemplo:

doble beneficio =PositionGetDouble(POSITION_PROFIT);

resultado:

Posición EURUSD #101470723: POSITION_MAGIC=0, precio pos apertura=1,30825, precio pos cierre=1,30835, type=POSITION_TYPE_BUY, profit=-2061584302, comment=.

profit=-2061584302 ¿cómo entenderlo?

2) ¿Puede alguien explicar con precisión pero de manera sencilla cómo leer esta entrada

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

¿Quizás la función cis PositionGetInteger(POSITION_TYPE) ha solicitado el valor de una propiedad llamada POSITION_TYPE para una posición preseleccionada, pero este valor se devuelve como un número de secuencia de enumeración, y para representarlo de forma digerible, obtenemos este valor digerible ya de la enumeración cis ENUM_POSITION_TYPE en la variable de tipo, cuyo tipo se declara como ENUM_POSITION_TYPE al mismo tiempo?

En ese caso, ¿entiendo correctamente que es posible escribir una cierta clase por mí mismo, que en el sentido se convertirá en una función, aprox:

inicialización textPosition = esa cierta clase; // en el constructor de la cual leer en el búfer de posición y recordar todos los parámetros

y luego utilizar:

tekPrecioApertura=tekPosición.PrecioApertura;

tekDirectionPosition=tekPosition.DirectionPosition;

tekDirectionPosition=tekPosition.DirectionPosition;

tekProfitPosition=tekPosition.ProfitPosition;

Gracias.

 
bivmail:

2) ¿Puede alguien explicar exactamente pero simplemente cómo leer esta entrada

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

La función PositionGetInteger("identificador de propiedad") devuelve un valor de tipo long. Si el "identificador de propiedad" es de un tipo distinto de long (por ejemplo, el identificador POSITION_TYPE es de tipo ENUM_POSITION_TYPE), es conveniente convertir el valor devuelto por la función PositionGetInteger() a un valor del tipo requerido (es decir, a un valor de tipo ENUM_POSITION_TYPE).

En su ejemplo, se declara la variable de tipo ENUM_POSITION_TYPE, a la que se asigna el valor de tipo ENUM_POSITION_TYPE, obtenido como resultado de la conversión explícita del valor de tipo long al valor de tipo ENUM_POSITION_TYPE.

Las reglas de conversión de valores de tipos numéricos se describen en MQL5 Reference Guide / Language Basics / Data Types / Type Casting / Casting Numeric Types

Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - Документация по MQL5
 

Cita del artículo: "Cuando se pierde la conexión con el servidor de comercio, el terminal realiza periódicamente intentos de restablecer la conexión".

¿Cuál es la frecuencia de los intentos de restablecer la conexión?

 
Cada 5 segundos.
 

Entendido, gracias.