Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 611

 
Vladimir Zubov:

No lo sé, yo no suelo cerrar el navegador hasta que llego a la fase de "listo para comprobar". Intenta buscar en tu ficha "mis productos", el borrador suele estar ahí, si no está, puede que tengas que empezar desde el principio. Si el nombre del producto que querías publicar no está cogido, probablemente no has guardado el borrador.

Gracias. ¡Lo encontré!
 
¡Saludos a todos, queridos colegas!
Hace tiempo hice una pregunta sobre la posibilidad de guardar un array de objetos de clase en un archivo, y obtuve una respuesta afirmativa de la comunidad. Por fin he podido comprobarlo todo. Y sí, efectivamente eso salva. Y luego incluso se lee ESO. De todos modos, tanto FileWriteArray como FileReadArray devuelven valores correctos por el número de elementos escritos y leídos. Sin embargo, al intentar acceder al primer elemento del array a través de un método de la clase, el probador genera el error de acceso al puntero no válido seguido del error crítico OnTick y termina. Tenga en cuenta, sin embargo, que si usted está trabajando no con una matriz escrita y luego leer, pero sólo con algo que se crea en la memoria, todo funciona. ¿Cuál puede ser el problema? ¿Cuál es la forma correcta de restaurar una matriz de objetos guardada?
 
BlackTomcat:
¡Saludos a todos, queridos colegas!
Hace tiempo hice una pregunta sobre la posibilidad de guardar un array de objetos de clase en un archivo, y obtuve una respuesta afirmativa de la comunidad. Por fin he podido comprobarlo todo. Y sí, efectivamente eso salva. Y luego incluso se lee ESO. De todos modos, tanto FileWriteArray como FileReadArray devuelven valores correctos por el número de elementos escritos y leídos. Sin embargo, al intentar acceder al primer elemento del array a través de un método de la clase, el probador genera el error de acceso al puntero no válido seguido del error crítico OnTick y termina. Tenga en cuenta, sin embargo, que si usted está trabajando no con una matriz escrita y luego leer, pero sólo con algo que se crea en la memoria, todo funciona. ¿Cuál puede ser el problema? ¿Cómo restaurar correctamente una matriz de objetos guardada?
Por favor, envíenme el código.
 
Hola! Conozco MT4 bastante bien, pero MT5 es para principiantes. Por favor, indique cuál es el comando para cerrar una orden. No he podido encontrarlo en la lista de tipos de operaciones aquí https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions. SóloCLOSE_BY y sólo necesito cerrarla.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexander Kharlamov:
Hola, conozco MT4 bastante bien, pero MT5 es un novato. Por favor, indíqueme qué comando para cerrar la orden. No he podido encontrar ningún comando en la lista de tipos de operaciones aquí https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions. El único comando que tengo esCLOSE_BY, sólo necesito cerrar la orden.

en mt5 no es tan sencillo

cerrar significa abrir una operación opuesta con el mismo lote

es decir, la operaciónTRADE_ACTION_DEAL

 
Vladislav Andruschenko:

en mt5 no es tan sencillo

cerrar significa abrir una operación opuesta con el mismo lote

es decir, la operaciónTRADE_ACTION_DEAL

Gracias por la respuesta, pero no entiendo bien... ¿He abierto una operación opuesta y luego tengo que hacer unTRADE_ACTION_CLOSE_BY entre ellas?
 
Alexander Kharlamov:
Gracias por la respuesta, pero aún no lo entiendo del todo. ¿Abro una posición opuesta y luegoTRADE_ACTION_CLOSE_BY entre ellas?

En MT5 existe el concepto de POSICIÓN. Puede cerrar una posición. Si quiere cerrar una posición por completo, utilice la biblioteca estándar. Para una cuenta de compensación un ejemplo de cierre de una posición:

//+------------------------------------------------------------------+
//|                                                 PositionClos.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- подключение стандартной библиотеки
#include <Trade\Trade.mqh>
//--- объект класса CTrade
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- закрытие позицию по текущему символу
   trade.PositionClose(Symbol());
  }
//+------------------------------------------------------------------+
Archivos adjuntos:
 
Karputov Vladimir:

En MT5 existe el concepto de POSICIÓN. Puede cerrar una posición. Si quiere cerrar una posición por completo, utilice la biblioteca estándar. Para una cuenta de compensación un ejemplo de cómo cerrar una posición:

Creo que estoy empezando a entenderlo. ) La posición cambiará con cada ejecución de la orden para ese instrumento, cierto. La pregunta ahora es"El identificador de posición es un número único que se asigna a cada posición recién abierta y no cambia a lo largo de su vida. Corresponde al ticket de la orden con la que se abrió la posición".

Y si las órdenes posteriores modifican la posición, ¿sigue siendo su número igual al de la primera orden que la creó?
 
Alexander Kharlamov:

1. Creo que empiezo a entenderlo. ) La posición cambiará con cada ejecución de la orden para este símbolo, ¿verdad?
2. Elidentificador de la posición es un número único, que se asigna a cada posición recién abierta y no cambia a lo largo de su vida. Corresponde al ticket de la orden con la que se abrió la posición".

Y si las órdenes posteriores modifican la posición, ¿sigue siendo su número igual al de la primera orden que la creó?

1. Sí, así es. La ejecución de una orden genera una transacción. Una transacción puede:

  • crear una posición
  • cambiar el volumen de una posición
  • cerrar una posición
2. ¿Qué puede ser mejor que la práctica? :) Abrir una posición (manualmente) en cualquier gráfico. Ejecutar el script

//+------------------------------------------------------------------+
//|                                           PositionGetInteger.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0;i<PositionsTotal();i++)
     {
      //--- проверим наличие позиции и выведем время её изменения 
      string pos_symbol=PositionGetSymbol((uint)i);
      if(pos_symbol!=NULL)
        {
         //--- получим идентификатор позиции для дальнейшей работы с ней 
         ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
         Print(pos_symbol," postion #",position_ID);
         //--- получим время образования позиции в миллисекундах с 01.01.1970 
         long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
         PrintFormat("Position #%d  POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID,
                     create_time_msc,TimeToString(create_time_msc/1000));
         //--- получим время последнего изменения позиции в секундах с 01.01.1970 
         long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE = %i64 seconds => %s",
                     position_ID,update_time_sec,TimeToString(update_time_sec));
         //--- получим время последнего изменения позиции в миллисекундах с 01.01.1970 
         long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s",
                     position_ID,update_time_msc,TimeToString(update_time_msc/1000));
        }
     }
//--- 
  }
//+------------------------------------------------------------------+

- Mira la línea (mira la pestaña "Expertos" del terminal):

2016.08.29 14:51:24.435 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Aumenta el volumen, ejecuta el script de nuevo - compara la línea de nuevo

2016.08.29 14:51:32.872 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Como puede ver, la propiedad de posición (POSITION_IDENTIFIER) no cambia si la posición no se invierte.

Archivos adjuntos:
 
POSIITION_IDENTIFIER cambia cuando se invierte la posición.
Razón de la queja: