Características del lenguaje mql5, sutilezas y técnicas - página 45

 
Alexey Viktorov:

¿Tal vez sirva? Aunque el Forex no siempre lo muestra correctamente.

muestra un valor erróneo, por ejemplo para SBRF-9.17 la hora de finalización de la sesión de negociación del viernes == 23:45:00 según el gráfico de minutos, y esta función muestra 00:00:00, según la información de la bolsa de la noche la hora de finalización de la sesión de negociación a las 23:50

No creo que el punto principal sea la posibilidad de crear controles donde estamos y utilizar constantes, pero tal vez alguien ya ha implementado esta funcionalidad y no tengo que escribir mi propio tren
 
Alexey Viktorov:

No hay dependencia ni puede haberla. Por lo tanto, no puede haber un código especial.

Los desarrolladores no utilizan el LFO en estos casos. Los algoritmos son claros y repetibles.

 
Konstantin:

En el mercado de futuros, cómo determinar la hora de cierre del mercado del día anterior en diferentes variantes de encontrar el intervalo de tiempo actual:

1. estamos en el intervalo sábado - domingo, necesitamos la hora de cierre de la sesión comercial del viernes por la noche
2. estamos en el mercado cerrado de lunes a viernes; necesitamos la hora de cierre de la sesión vespertina de lunes a jueves
3. en el rango de negociación de lunes a viernes; necesitamos la hora de cierre de la sesión de negociación del viernes por la noche
4. en el horario de martes a viernes necesitamos la hora de cierre de las sesiones nocturnas de lunes a jueves

Tal vez alguien escribió una funcionalidad similar, no quiero reinventar la rueda ))

No creo que haya mucha más flexibilidad que las constantes:

/*!
   \brief   Расчет конечной даты запроса
*/
datetime CVolumeCluster::CalcStopDate(void) {
   MqlDateTime _date;
   datetime _time_t = TimeTradeServer(_date);

   if(_date.hour == 23 && _date.min >= 44) {          // определяем время окончания торговой сессии
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      _time_t    = StructToTime(_date);
   } else {
      TimeToStruct(_time_t - 86400, _date);
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      if(_date.day_of_week == 0 || _date.day_of_week == 6)
         _date.day_of_week = 5;
      _time_t = StructToTime(_date);
   }
//---
   return _time_t;
}
 

aconsejar a los que trabajan con la clase CCanvas, cómo hacer que la actualización de la marca gráfica consuma menos recursos, por ejemplo tenemos unos cientos de miles de líneas en el marcador gráfico, al redimensionar tenemos que volver a pintar cada línea en el marcador gráfico, porque sin volver a pintar simplemente al redimensionar, las líneas en el gráfico no se muestran, aunque el objeto de la marca gráfica cambie su tamaño

 
Konstantin:

probablemente no hay nada más flexible que las constantes:

¿No es más fácil?

/********************Script program start function*******************/
void OnStart()
{
 datetime timeArray[1], barArray[1];
 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);
 Print(barArray[0];
}/*******************************************************************/
 
Alexey Viktorov:

¿No es esto más fácil?

 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);              // время текущего дня 00:00:00
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);  // время открытия - 1 секунду

el resultado es básicamente correcto )) gracias

 
Ahora (1626) no funciona

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Características del lenguaje mql5, sutilezas y trucos

fxsaber, 2017.05.05 23:48

// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
  const class CLASS_TMP {} Tmp;
  
  return((int)::StringFormat("%d", &Tmp) - 1);
}
Ejemplo de aplicación
int OnInit()
{
  if (GetAmountObjects() > 0)
    Print("До " + __FUNCSIG__ + " были вызваны конструкторы!");

  return(INIT_SUCCEEDED);
}
 
// Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define  TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define  TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

void OnTradeTransaction(   const MqlTradeTransaction&, const MqlTradeRequest& Request, const MqlTradeResult& )
{
  if (Request.action)
    Print(ToString(Request));
}

Si hay un problema con el mismo Relleno, ejecute este EA y cree la orden que desee manualmente (F9 en el terminal). La solicitud de operación generada será impresa por el EA.

Desgraciadamente, es problemático hacer esto en las cuentas reales. Los promotores han rechazado la sugerencia.

 
fxsaber:

Si hay un problema con el mismo Relleno, ejecute este EA y cree la orden que desee manualmente (F9 en el terminal). La solicitud de operación generada será impresa por el EA.

Lo único que falta es un ejemplo de cómo funciona

 
Rashid Umarov:

Lo que necesitamos es un ejemplo de cómo funciona.

Exponer manualmente


Obtenemos la solicitud de comercio generada en el registro

Request.action = TRADE_ACTION_PENDING (5)
Request.magic = 0
Request.order = 157092716
Request.symbol = EURUSD
Request.volume = 0.01
Request.price = 1.13941
Request.stoplimit = 0.0
Request.sl = 1.13926
Request.tp = 1.13955
Request.deviation = 0
Request.type = ORDER_TYPE_BUY_LIMIT (2)
Request.type_filling = ORDER_FILLING_RETURN (2)
Request.type_time = ORDER_TIME_SPECIFIED (2)
Request.expiration = 2017.07.11 12:08:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Por desgracia, es muy caro para los verdaderos comerciantes. Por eso he presentado una propuesta.