Errores, fallos, preguntas - página 53

 
Kos:
No he encontrado ninguna descripción de los códigos de respuesta (Retcode) para la estructura MqlTradeCheckResult de los resultados de la solicitud de comercio en la documentación. ¿Habrá alguna?


Todas las descripciones están en la documentación.

Mire la función OrderSend, la estructura MqlTradeResult y la lista de códigos de respuesta comercial.

 
Renat:

Told - matriz vacía sin tamaño

Tnew[1] - fuera de la matriz, la matriz se describe como Tnew[1], por lo que sólo se puede acceder a sus elementos como Tnew[0], porque el índice comienza en cero.

¿Cuál es el resultado? En este caso Tnew[1]es una expresión incorrecta, pero ¿es válida? ¿Es Tnew[0] , Tnew[] una expresión válida, o algo más? El resultado del Asesor Experto no parece cambiar cuando se utiliza Tnew[1], Tnew[0], Tnew[].
 
Renat:

Todas las descripciones están en la documentación.

Mire la función OrderSend, la estructura MqlTradeResult y la lista de códigos de respuesta comercial.

Renat, si te he entendido bien, los códigos de retorno ENUM_TRADE_RETURN_CODES para la estructura MqlTradeResult también se aplican a la estructura MqlTradeCheckResult
 
ias:
¿Cuál es el resultado? Tnew[1]es una expresión incorrecta en este caso, pero es válida? ¿Es Tnew[0] , Tnew[] una expresión válida o algo más? El resultado del experto no parece cambiar al utilizar Tnew[1],Tnew[0],Tnew[].

El resultado no puede ser el mismo, al menos no si los datos se leen de la matriz por un índice que no existe. ¿Qué crees que hay en Tnew[1]?

No estoy tan seguro de lo que se está escribiendo, cuando el EA sale del rango, puede reportar un error y seguir adelante. Pero, ¿qué habrá en Tnew[0] en este caso?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Kos:
Renat, si te he entendido bien, los códigos de retorno ENUM_TRADE_RETURN_CODES para la estructura MqlTradeResult también se aplican a la estructura MqlTradeCheckResult

Sí, la base de los códigos de error del comercio es la misma para todo el espacio de la función comercial.

Las descripciones de las nuevas funciones se corregirán, pero no hemos tenido tiempo de hacerlo de inmediato.

 
Interesting:

El resultado no puede ser el mismo, al menos no si los datos se leen de la matriz por un índice que no existe. ¿Qué crees que hay en Tnew[1]?

No estoy seguro de la escritura, el Asesor Experto puede informar de un error y seguir adelante cuando se sale del rango, pero ¿qué habrá en Tnew[0] en este caso?

El resultado del trabajo del experto no cambia cuando se utiliza el datetime Tnew[1];Tnew[0];Tnew[];.se deduce que en Exp_TEMA.mq5 del artículo "Creación de un Asesor Experto que opera en diferentes símbolos" el la función

//+X================================================================X+
//| IsNewBar() function                                              |
//+X================================================================X+
bool IsNewBar(int Number, string symbol, ENUM_TIMEFRAMES timeframe)
  {
//----+
   static datetime Told[];
   datetime Tnew[1];
   
   //----+ Объвление переменной для хранения размеров массивов переменных
   static int Size_ = 0;
   
   //----+ Изменение размеров массивов переменных
   if (Number + 1 > Size_)
    {
     uint size = Number + 1;
     //----
     if (ArrayResize(Told, size) == -1)
      {
       string word = "";
       StringConcatenate(word, "IsNewBar( ", Number,
                    " ): Ошибка!!! Не удалось изменить размеры массивов переменных!!!"); 
       Print(word); 
       //----          
       int error = GetLastError();
       ResetLastError();
       if (error > 4000)
        {
         StringConcatenate(word, "IsNewBar( ", Number, " ): Код ошибки ", error);
         Print(word); 
        }  
       //----                                                                                                                                                                                                  
       Size_ = -2;
       return(false);
      }
    }
   
   CopyTime(symbol, timeframe, 0, 1, Tnew); 
   if (Tnew[0] != Told[Number])
    {
     Told[Number] = Tnew[0];
     return(true);
    }
//----+
   return(false);
  }
//+X================================================================X+

no funciona?

¿Qué crees que es Tnew[1]?

Después de CopyTime(symbol, timeframe, 0, 1, Tnew); la dirección Tnew[1] debe contener la hora de inicio de la barra anterior.

 
ias:

El resultado del trabajo del experto no cambia cuando se utiliza el datetime Tnew[1];Tnew[0];Tnew[];.¿Debe seguirse que hay un Asesor Experto Exp_TEMA.mq5 del artículo "Creación de un Asesor Experto para operar en diferentes símbolos"? la función

no funciona?

¿Qué crees que es Tnew[1]?

Después de CopyTime(symbol, timeframe, 0, 1, Tnew); la dirección Tnew[1] debe contener el tiempo de inicio de la barra anterior.

Analicemos por orden

Estas dos cadenas declaran dos matrices, una de las cuales es dinámica, mientras que la segunda ( Tnew) sólo contiene un registro.

static datetime Told[];
datetime Tnew[1];

Esto es un intento de cambiar el tamaño de la matriz dinámica. Se supone que el número de registros en la matriz será igual al tamaño.

if (ArrayResize(Told, size) == -1)

Esta línea copia un registro (fecha de compás) empezando por el número de compás 0 en la matriz Tnew. Esta fecha pasa a estar disponible como Tnew[0] (porque la matriz está numerada con CERO).

CopyTime(symbol, timeframe, 0, 1, Tnew);

Aquí, el único registro de la matriz Tnew se compara con el registro numerado Número-1 en una celda de la matriz Told (recuerde que la matriz está numerada desde 0).

Si estas fechas no coinciden, escribimos el valor de la matriz Tnew en la celda de la matriz Told.

if (Tnew[0] != Told[Number])
{
Told[Number] = Tnew[0];
return(true);
}
 
Kos:
No he encontrado en la documentación ninguna descripción de los códigos de respuesta (Retcode) para la estructura de los resultados de la comprobación de la solicitud de comercio MqlTradeCheckResult. ¿Estarán disponibles?


En MetaTrader 5\MQL5\Include\ErrorDescription.mqh
Archivos adjuntos:
 
Valmars:
En el archivo MetaTrader 5\MQL5\Include\ErrorDescription.mqh
Valery, gracias. Pero esto no es lo que estaba buscando:)
 

Tengo una pregunta. ¿No está pensando en una carta sin agujeros? https://www.mql5.com/ru/forum/100491

Muy difícil de sincronizar todo, parece que he tratado de tener en cuenta todo en el indicador, pero estos agujeros son muy difíciles de tratar

2010.07.19 02:20:12 Comprobación de agujeros (EURUSD,M1) Número de agujeros en el historial 260 desde la fecha 2010.07.09 21:35:00
2010.07.19 02:20:12 Comprobación de agujeros (EURUSD,M1) GBPUSD agujero 2010.07.19 00:20:00
2010.07.19 02:20:12 Comprobación de agujeros (EURUSD,M1) Agujero USDJPY 2010.07.19 00:15:00
2010.07.19 02:20:12 Comprobando agujeros (EURUSD,M1) Agujero EURGBP 2010.07.16 22:43:00
2010.07.19 02:20:12 Comprobación de agujeros (EURUSD,M1) Agujero GBPUSD 2010.07.16 22:43:00
2010.07.19 02:20:12 Comprobación de agujeros (EURUSD,M1) Agujero GBPUSD 2010.07.16 22:38:00
2010.07.19 02:20:12 Comprobación de agujeros (EURUSD,M1) Agujero AUDUSD 2010.07.16 22:21:00

etc. .....

//+------------------------------------------------------------------+
//|                                                 Проверка дыр.mq5 |
//|                                                    Привалов С.В. |
//|                           https://www.mql5.com/ru/users/Prival |
//+------------------------------------------------------------------+
#property copyright "Привалов С.В."
#property link      "https://www.mql5.com/ru/users/Prival"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_color1  Blue


int   MaxBars=7200;  // точка старта
string mas_0[]={"USDCHF","GBPUSD","EURUSD","USDJPY","USDCAD","AUDUSD","EURGBP","EURAUD","EURCHF","EURJPY","GBPJPY","GBPCHF"};
int count_symbol=12;
double Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_HISTOGRAM);

//--- на старте сразу же пошлем асинхронные запросы на поднятие таймфреймов в память
   for(int i=0; i<count_symbol; i++) CheckOtherSymbol(mas_0[i],MaxBars);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<MaxBars) return(0);    // ничего не считаем и ничего не рисуем на графике         

   int start_pos=rates_total-MaxBars-1;  // точка старта

   if(close[start_pos]==0)   return(0);  // ничего не считаем и ничего не рисуем на графике 

//--- снова пошлем асинхронные запросы на поднятие таймфреймов в память
   for(int i=0; i<count_symbol; i++)
      {
      if(!CheckOtherSymbol(mas_0[i],MaxBars)) return(0);
      }

   if(prev_calculated==0)
     {
      Print("Дата начала тестирования ",time[start_pos]);
      Print("Символ ",_Symbol," приод ",_Period);
     }
   else start_pos=prev_calculated-1;
   int  sum=0;
//--- расчет индикатора
   for(int i=start_pos;i<rates_total;i++)
     {
      Buffer[i]=0;
      for(int j=0; j<count_symbol; j++)
         {
         if(!CheckTimeOtherSymbol(mas_0[j],time[i]))
            {
            Print("Дыра ",mas_0[j]," ",time[i]);
            sum++;
            }
         }
     }
     Print("Количество дыр в истории ",sum, " от даты ",time[start_pos]);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Проверка символов с асинхронным возбуждением                     |
//+------------------------------------------------------------------+
//| вход                                                             |
//| symbol - символ                                                  |
//| count_Bars - необходимое количество баров                        |
//+------------------------------------------------------------------+
bool CheckOtherSymbol(string symbol,int bars)
  {
   datetime ctm[1];
   datetime checktime=TimeCurrent()-bars*PeriodSeconds(_Period);  // требуемое время
   bool     res=true;
// скопируем время требуемого бара
   if(CopyTime(symbol,_Period,checktime,1,ctm)!=1) res=false;
   if(!res) Print("Нет данных по символу ",symbol);
//--- вернем результат
   return(res);
  }
//+------------------------------------------------------------------+
//| Проверка синхронности символов                                   |
//+------------------------------------------------------------------+
bool CheckTimeOtherSymbol(string symbol,datetime time)
  {
   datetime ctm[1];
   bool     res=false;
//--- скопируем время бара
   if(CopyTime(symbol,_Period,time,1,ctm)==1)
     {
      // сравним его с требуемым
      if(ctm[0]==time) res=true;
     }
//   if(!res) Print("Нет синхронизации по символу ",symbol," time[0]=",ctm[0]," нужно ",time);
//--- вернем результат
   return(res);
  }
//+------------------------------------------------------------------+

y segunda pregunta: ¿hay algún otro escollo en este indicador multidivisa que no haya comprobado?

Всем, кто хотел видеть графики без пропущенных баров - сюда =) - MQL4 форум
  • www.mql5.com
Всем, кто хотел видеть графики без пропущенных баров - сюда =) - MQL4 форум
Archivos adjuntos: