Preguntas de un "tonto" - página 200

 

Así pues, existe una función para determinar la hora de apertura de una barra (incluso si la barra está en el futuro)

//+---------------------------------------------------------------------------+
//| Получение точного времени открытия                                        |
//|Input:                                                                     |
//|1) Время, которое необходимо округлить до ближайшего времени открытия бара |
//|2) Переменная для вывода результата                                        |
//|3) Период ТФ                                                               |
//|4) Отклонение влево-вправо                                                 |
//|Возврат: количество элементов(1), 0 если не скопировано, (-1) если ошибка  |
//+---------------------------------------------------------------------------+
int GetSingleBarOpenTime(datetime Time,datetime &Output,ENUM_TIMEFRAMES nPeriod,int Shift=0) export
  {
   datetime OpenTime[1];
   int Count=0;
// если бар существует то используем стандартную процедуру поиска времени открытия
   if(Time<=TimeCurrent() && Shift==0)
     {
      Count=CopyTime(Symbol(),nPeriod,Time,1,OpenTime);
      if(Count==0)
        {
         Print("GetCorrectOpenTime CopyTime elements=0");
         return(0);
        }
      else if(Count<0)
        {
         Print("GetCorrectOpenTime error "+(string)GetLastError());
         return(Count);
        }
      else
        {
         Output=OpenTime[0];
         return(Count);
        }
     }
//если бар находится в будущем то используем следующую процедуру
   else
     {
      MqlDateTime sTime;
      // NumOfUnits - количество стандартных единиц
      int NumOfUnits=0; 
      int ToRnd;
      TimeToStruct(Time,sTime);
      //Единица измерения(1-минута, 2 - час, 3 - день, 4 - неделя(но используются дни), 5 - месяц)
      short Unit=0;
      //в зависимости от ТФ инициализируются параметры
      switch(nPeriod)
        {
         case PERIOD_M1:   {Unit=1;NumOfUnits=1;break;}
         case PERIOD_M2:   {Unit=1;NumOfUnits=2;break;}
         case PERIOD_M3:   {Unit=1;NumOfUnits=3;break;}
         case PERIOD_M4:   {Unit=1;NumOfUnits=4;break;}
         case PERIOD_M5:   {Unit=1;NumOfUnits=5;break;}
         case PERIOD_M6:   {Unit=1;NumOfUnits=6;break;}
         case PERIOD_M10:  {Unit=1;NumOfUnits=10;break;}
         case PERIOD_M12:  {Unit=1;NumOfUnits=12;break;}
         case PERIOD_M15:  {Unit=1;NumOfUnits=15;break;}
         case PERIOD_M20:  {Unit=1;NumOfUnits=20;break;}
         case PERIOD_M30:  {Unit=1;NumOfUnits=30;break;}
         case PERIOD_H1:   {Unit=2;NumOfUnits=1;break;}
         case PERIOD_H2:   {Unit=2;NumOfUnits=2;break;}
         case PERIOD_H3:   {Unit=2;NumOfUnits=3;break;}
         case PERIOD_H4:   {Unit=2;NumOfUnits=4;break;}
         case PERIOD_H6:   {Unit=2;NumOfUnits=6;break;}
         case PERIOD_H8:   {Unit=2;NumOfUnits=8;break;}
         case PERIOD_H12:  {Unit=2;NumOfUnits=12;break;}
         case PERIOD_D1:   {Unit=3;NumOfUnits=1;break;}
         case PERIOD_W1:   {Unit=4;NumOfUnits=7;break;}
         case PERIOD_MN1:  {Unit=5;NumOfUnits=1;break;}
         default:         {Print("Period is unknown"); break;}
        }
      // Если ТФ - минуты, то
      if(Unit==1)
        {
         sTime.sec=0;
         //Остаток от деления
         ToRnd=(int)fmod(sTime.min,NumOfUnits);
         Time=StructToTime(sTime);
         // Округление до ближайшего времени открытия(пример: если сейчас 14:25, и тф 2min, то ближайщее время открытия бара - 14:24)
         Time-=(ToRnd*60);
         Time+=(NumOfUnits*Shift*60);

        }
      else if(Unit==2)
        {
         sTime.sec=0;
         sTime.min=0;
         ToRnd=(int)fmod(sTime.hour,NumOfUnits);
         Time=StructToTime(sTime);
         Time-=(ToRnd*60*60);
         Time+=(NumOfUnits*Shift*60*60);
        }
      else if(Unit==3)
        {
         sTime.hour=0;
         sTime.min=0;
         sTime.sec=0;
         ToRnd=(int)fmod(sTime.day,NumOfUnits);
         Time=StructToTime(sTime);
         int hds;
         hds=sTime.day_of_week;
         if (hds==0) hds=7;
         hds=floor((hds+Shift)/7)*2;
         int ti=Shift+hds;
         while (hds>7)
         {
            hds=(floor(hds/7))*2;
            ti+=hds;
         }
         Print(ti);
         Time-=(ToRnd*60*60*24);
         Time+=(NumOfUnits*Shift*60*60*24);
        }
      else if(Unit==4)
        {
         sTime.hour=0;
         sTime.min=0;
         sTime.sec=0;
         ToRnd=(int)fmod(sTime.day,NumOfUnits);
         Time=StructToTime(sTime);
         Time-=(ToRnd*60*60*24);
         Time+=(NumOfUnits*Shift*60*60*24);
        }
      else if(Unit==5)
        {
         sTime.sec=0;
         sTime.min=0;
         sTime.hour=0;
         sTime.day=1;
         sTime.mon=sTime.mon-(int)fmod(sTime.mon,NumOfUnits)+(NumOfUnits*Shift);
         while(sTime.mon<1)
           {
            sTime.year--;
            sTime.mon=12+sTime.mon;
           }
         while(sTime.mon>12)
           {
            sTime.year++;
            sTime.mon=sTime.mon-12;
           }
         if(sTime.sec<0)
            Print("GetSingleBarOpenTime seconds error");
         if(sTime.min<0)
            Print("GetSingleBarOpenTime minutes error");
         if(sTime.hour<0)
            Print("GetSingleBarOpenTime hours error");
         if(sTime.day<1)
            Print("GetSingleBarOpenTime days error");
         if(sTime.mon<0)
            Print("GetSingleBarOpenTime months error");
         if(sTime.year<1970)
            Print("Year < 1970");
         Time=StructToTime(sTime);
        }
      Output=Time;
      return(1);
     }
  }

El problema de Shift es que ahora no se desplaza por el número de barras sino por el número de días (me da igual si estoy en D1 o no - D1 es lo más importante). Así que creo que tengo en mi cabeza que puedo comprobar el número de díasTotal por turno (número de días de la semana) y el día actual de la semana, pero que la fórmula a utilizar - no puedo determinar.

Nota: en Unit=3 intente hacerlo (hasta ahora sin éxito)

Ayuda, por favor.

 
victorva: la solicitud de comercio da el error 10016 ("paradas erróneas"). ¿En qué se equivocan?

1. Inserte el código correctamente (Ctrl+Alt+M).

void OnTick()
  {
   MqlTick last_tick={0};                       // предопределенная структура для получения текущих данных рынка
   SymbolInfoTick("EURUSD",last_tick);          // инструмент: указывать обязательно
   double Bid = last_tick.bid;                         // Текущая цена Bid
   MqlTradeRequest request={0};                 
   MqlTradeResult result={0};                 
   request.action=TRADE_ACTION_DEAL;           
   request.magic=555;                          
   request.symbol="EURUSD";
   request.volume=1.0;                  
   request.deviation=0;                 
   request.type=ORDER_TYPE_BUY;                        
   request.sl=Bid-300*_Point;                         // Уровень Stop Loss ордера
   request.tp=Bid+1000*_Point;                    // Уровень Take Profit ордера
   OrderSend(request,result);
   Comment("retcode = ",result.retcode);
  }
2. Empecemos por el hecho de que su solicitud no contiene el campo obligatorio request.price (la ausencia de dicho campo sólo es aceptable para el modo de ejecución del mercado). Así que resulta que mientras request.price==0.
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • 2010.02.23
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 
victorva:

la consulta comercial da el error 10016 ("paradas incorrectas"). ¿En qué se equivocan?


request.sl=Bid-300*_Point; // Nivel de Stop Loss de la orden
request.tp=Bid+1000*_Point; // Nivel de la orden Take Profit

En que no están normalizados. (utilice el botón SRC para insertar el código).

  request.sl=NormalizeDouble(Bid-300*_Point,_Digits);   // Уровень Stop Loss ордера
  request.tp=NormalizeDouble(Bid+1000*_Point,_Digits);  // Уровень Take Profit ордера
 

Comprobación del funcionamiento de la inserción automática de enlaces

1. Вставляйте код правильно (Ctrl+Alt+M).

 
Yedelkin:

1. Inserte el código correctamente (Ctrl+Alt+M).

2. Empecemos por el hecho de que su solicitud no especifica el campo obligatorio request.price (la ausencia de dicho campo sólo se permite para el modo de ejecución del mercado). Así que resulta que mientras request.price==0.

Gracias. Poner el precio, ha funcionado.

 

Por favor, ayúdenme, no puedo entender nada.

|9|8|7|6|5|4|3|2|1|0| <-- series temporales Tasas

CopyRates(Symbol(),Period(),Time,2,Result);

Por ejemplo he especificado el tiempo de la vela #3. En este caso, recupero las tasas de las velas #3 y #4. Pero cómo obtener los índices de las velas #3 y #2, teniendo un tiempo de apertura de la vela #3. El número negativo no se digiere.

Tenía la idea de buscar una especie de índice, pero para hacerlo necesito copiar todos los elementos del actual, pero, caramba, si tengo M1 y una barra de 10 años, entonces el array es demasiado grande.

Gracias de antemano

 

¡Buenos días!

¿Podría explicar en qué unidades se mide el tráfico en la pestaña "Servicios" de MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712)? ¿Se mide en kiloBytes|megaBytes o en kiloBytes|megaBytes?

Gracias.

 

Chicos, ¿podéis decirme si hay algún indicador u objeto en la base que permita mostrar los gráficos de otras monedas en el gráfico principal?

p.d. Yo escribí mi propio para mt4, pero tal vez hay uno listo aquí...

 
storm:

Chicos, ¿podéis decirme si hay algún indicador u objeto en la base que permita mostrar los gráficos de otras monedas en el gráfico principal?

p.d. Yo escribí mi propio para mt4, pero tal vez hay uno listo aquí...

Lo encontré, ya lo escribieron, z**** , no necesito escribirlo yo al menos. https://www.mql5.com/ru/code/1055
MultiCurrency
MultiCurrency
  • votos: 9
  • 2012.09.14
  • Nikolay Kositsin
  • www.mql5.com
Индикатор MultiCurrency позволяет анализировать одновременно до восьми графиков валют.
 
storm:
Lo encontré, ya está escrito, z**** , no tienes que escribirlo tú. https://www.mql5.com/ru/code/1055
La inversión en el mismo estaba prevista por el autor, pero no fue implementada, tuve que retocarla, ¡pero el crédito es para el autor!
Razón de la queja: