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

 

¿Cómo añado minutos al bloque de horas del asesor?

//input parametrs
input uchar                InpStartHour            = 1;           // Start hour
input uchar                InpEndHour              = 23;           // End hour

//---------------------------

void OnTick()
  { 
   MqlDateTime STimeCurrent;
   TimeToStruct(TimeCurrent(),STimeCurrent);
  
   if(STimeCurrent.hour<InpStartHour || STimeCurrent.hour>InpEndHour)
      return;
   }

 
Vladimir Baskakov:

¿Cómo puedo añadir minutos al bloque horario de un EA?

Alto Bajo Estrategia a tiempo 2:

La función bool TimeControl() es la encargada de comprobar la hora. Puede funcionar en dos estados: tanto en fechas de un día como en fechas de más de un día.

//--- input parameters
***
input bool     InpTimeControl       = true;        // Use time control
input uchar    InpStartHour         = 10;          // Start Hour 
input uchar    InpStartMinute       = 01;          // Start Minute 
input uchar    InpEndHour           = 15;          // End Hour 
input uchar    InpEndMinute         = 02;          // End Minute 
***
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TimeControl())
      return;
  }
//+------------------------------------------------------------------+
//| TimeControl                                                      |
//+------------------------------------------------------------------+
bool TimeControl(void)
  {
   if(!InpTimeControl)
      return(true);
   MqlDateTime STimeCurrent;
   datetime time_current=TimeCurrent();
   if(time_current==D'1970.01.01 00:00')
      return(false);
   TimeToStruct(time_current,STimeCurrent);
   if((InpStartHour*60*60+InpStartMinute*60)<(InpEndHour*60*60+InpEndMinute*60)) // intraday time interval
     {
/*
Example:
input uchar    InpStartHour      = 5;        // Start hour
input uchar    InpEndHour        = 10;       // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _
*/
      if((STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60) && 
         (STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60))
         return(true);
     }
   else if((InpStartHour*60*60+InpStartMinute*60)>(InpEndHour*60*60+InpEndMinute*60)) // time interval with the transition in a day
     {
/*
Example:
input uchar    InpStartHour      = 10;       // Start hour
input uchar    InpEndHour        = 5;        // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  _  _  _  _  _  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  _  _  _  _  _  +  +  +  +  +  +
*/
      if(STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60 || 
         STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60)
         return(true);
     }
   else
      return(false);
//---
   return(false);
  }
 

Por favor, avisa,

En MQL5 necesito cerrar la mitad de una posición, pero tengo que comprobar si la mitad de la posición es menor que el lote mínimo y luego cerrar todo el volumen, ¿es correcto?

double volume=MathMax(PositionGetDouble(POSITION_VOLUME)/2,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN)/AccountInfoInteger(ACCOUNT_LEVERAGE));
 
Evgeny Dyuka:

Por favor, avisa,

En MQL5 necesito cerrar la mitad de una posición, pero tengo que comprobar si la mitad de la posición es menor que el lote mínimo y luego cerrar todo el volumen, ¿es correcto?

Tal vez sea más fácil comprobar antes de la división, si el lote es menos de 2 veces el mínimo, entonces no hay necesidad de molestar a la terminal?

 

No puedo pasar la prueba para el mercado, devuelve un error, pero no hay ningún error en el informe

¿Qué hacer?


 
Evgeny Dyuka:

no puede pasar la prueba para el mercado, devuelve un error, pero no hay ningún error en el informe

¿Qué hacer?


Por favor, inténtelo más tarde.
 

¿Cómo puedo obtener el precio de cierre de una orden (operación, posición - cualquier cosa)?

Para los pedidos, sólo está disponible ORDER_PRICE_OPEN, pero no ORDER_PRICE_CLOSE.

Las posiciones sólo tienen POSITION_PRICE_OPEN.

Los oficios no tienen nada de abstracto: DEAL_PRICE.

Busqué en el foro y no lo encontré.

 
secret:

¿Cómo puedo obtener el precio de cierre de una orden (operación, posición - cualquier cosa)?

Para los pedidos, sólo está disponible ORDER_PRICE_OPEN, pero no ORDER_PRICE_CLOSE.

Las posiciones sólo tienen POSITION_PRICE_OPEN.

Los oficios no tienen nada de abstracto: DEAL_PRICE.

He buscado en el foro y no lo he encontrado.

Para facilitar la comprensión y el trabajo en MQL5:

1. ***

2. Si necesita un precio de cierre, no puede prescindir de acceder al historial de operaciones. ElHistorySelect se encarga de solicitar el historial de operaciones

3. El ejemplo de trabajo con el historial, con salida de información en un archivo o en la pestaña "Expertos", está en el código deHistorial de Tratos y Pedidos

Para entender de qué se trata, hay que saber

ENUM_DEAL_ENTRY-dirección de la operación - entrada en el mercado, salida del mercado o inversión

ENUM_DEAL_ENTRY

Identificador

Descripción

DEAL_ENTRY_IN

Entrada en el mercado

DEAL_ENTRY_OUT

Salida del mercado

DEAL_ENTRY_INOUT

Vuelta en U

DEAL_ENTRY_OUT_BY

Cerrar la posición del contador


ENUM_DEAL_TYPE-Tipo de acuerdo

ENUM_DEAL_TYPE

Identificador

Descripción

DEAL_TYPE_BUY

Comprar

DEAL_TYPE_SELLVender

***



Esto es lo básico.

 
Vladimir Karputov:

Gracias por la respuesta, he mirado tanto la documentación como tu ejemplo, pero aún no he encontrado cómo obtener un parámetro similar a OrderClosePrice() en MT4.

 
secret:

Gracias por la respuesta, he mirado tanto la documentación como tu ejemplo pero aún no he encontrado cómo obtener un parámetro similar a OrderClosePrice() en MT4.

alternativamente abrirhttps://www.mql5.com/ru/code/16006

y mira la implementación de @fxsaber

o simplemente conectar la librería anterior y transferir el código de MT4 a MT5, en el 99% de los casos no tendrás que retocar nada, todo funcionará igual que en MT4

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
Razón de la queja: