Erreurs, bugs, questions - page 53

 
Kos:
Je n'ai pas trouvé de description des codes de réponse (Retcode) pour la structure MqlTradeCheckResult des résultats de la demande de transaction dans la documentation. Y en aura-t-il ?


Toutes les descriptions sont dans la documentation.

Regardez la fonction OrderSend, la structure MqlTradeResult et la liste des codes de réponse des transactions.

 
Renat:

Told - tableau vide sans taille

Tnew[1] - hors tableau, le tableau est décrit comme Tnew[1], donc ses éléments ne peuvent être accédés que comme Tnew[0], car l'index commence à zéro.

Quel est le résultat ? Dans ce cas, Tnew[1]est une expression incorrecte, mais est-elle valide ? Est-ce que Tnew[0] , Tnew[] est une expression valide, ou autre chose ? Le résultat de l'Expert Advisor ne semble pas changer lorsque Tnew[1], Tnew[0], Tnew[] sont utilisés.
 
Renat:

Toutes les descriptions sont dans la documentation.

Regardez la fonction OrderSend, la structure MqlTradeResult et la liste des codes de réponse des transactions.

Renat, si je vous ai bien compris, les codes de retour ENUM_TRADE_RETURN_CODES pour la structure MqlTradeResult s'appliquent également à la structure MqlTradeCheckResult
 
ias:
Quel est le résultat ? Tnew[1]est une expression incorrecte dans ce cas, mais elle est valide ? Est-ce que Tnew[0] , Tnew[] est une expression valide ou autre chose ? Le résultat de l'expert ne semble pas changer lorsqu'on utilise Tnew[1],Tnew[0],Tnew[].

Le résultat ne peut pas être le même, du moins pas si les données sont lues dans le tableau par un index qui n'existe pas. Que pensez-vous qu'il y ait dans Tnew[1] ?

Je ne suis pas sûr de ce qui est écrit, lorsque l'EA sort de la plage, il peut signaler une erreur et passer à autre chose, mais qu'y aura-t-il dans Tnew[0] dans ce cas ?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Kos:
Renat, si je vous ai bien compris, les codes de retour ENUM_TRADE_RETURN_CODES pour la structure MqlTradeResult s'appliquent également à la structure MqlTradeCheckResult

Oui, la base des codes d'erreur commerciale est la même pour l'ensemble de l'espace fonctionnel commercial.

Les descriptions des nouvelles fonctions seront corrigées - nous n'avons tout simplement pas eu le temps de le faire tout de suite.

 
Interesting:

Le résultat ne peut pas être le même, du moins pas si les données sont lues dans le tableau par un index qui n'existe pas. Que pensez-vous qu'il y ait dans Tnew[1] ?

Je ne suis pas sûr de l'écriture, le conseiller expert peut signaler une erreur et passer à autre chose lorsqu'il quitte la plage, mais qu'y aura-t-il dans Tnew[0] dans ce cas ?

Le résultat du travail de l'expert ne change pas lorsque l'on utilise le temps de date Tnew[1];Tnew[0];Tnew[] ;.est-ce qu'il s'ensuit que dans Exp_TEMA.mq5 de l'article "Créer un conseiller expert qui négocie sur différents symboles" la la fonction

//+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+

ne fonctionne pas ?

A votre avis, que représente Tnew[1] ?

Après CopyTime(symbol, timeframe, 0, 1, Tnew) ; l'adresse Tnew[1] doit contenir l'heure de début de la barre précédente.

 
ias:

Le résultat du travail de l'expert ne change pas lorsque l'on utilise les dates Tnew[1];Tnew[0];Tnew[] ;. Cela signifie-t-il que le conseiller expert Exp_TEMA.mq5 de l'article "Créer un conseiller expert qui trade sur différents symboles" a le même résultat ? la fonction

ne fonctionne pas ?

A votre avis, que représente Tnew[1] ?

Après CopyTime(symbol, timeframe, 0, 1, Tnew) ; l'adresse Tnew[1] doit contenir l'heure de début de la barre précédente.

Analysons dans l'ordre

Ces deux chaînes déclarent deux tableaux, dont l'un est dynamique, tandis que le second ( Tnew) ne contient qu'un seul enregistrement.

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

Il s'agit d'une tentative de modifier la taille du tableau dynamique. On suppose que le nombre d'enregistrements dans le tableau sera égal à la taille.

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

Cette ligne copie un enregistrement (date de barre) à partir de la barre numéro 0 dans le tableau Tnew. Cette date devient alors disponible comme Tnew[0] (parce que le tableau est numéroté avec ZERO).

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

Ici, le seul enregistrement du tableau Tnew est comparé à l'enregistrement numéroté Numéro-1 dans une cellule du tableau Told (rappelons que le tableau est numéroté à partir de 0).

Si ces dates ne correspondent pas, nous écrivons la valeur du tableau Tnew dans la cellule du tableau Told.

if (Tnew[0] != Told[Number])
{
Told[Number] = Tnew[0];
return(true);
}
 
Kos:
Je n'ai pas trouvé de description des codes de réponse (Retcode) pour la structure des résultats de contrôle des demandes de commerce MqlTradeCheckResult dans la documentation. Seront-ils disponibles ?


Dans MetaTrader 5\MQL5\Include\ErrorDescription.mqh
Dossiers :
 
Valmars:
Dans le fichier MetaTrader 5\MQL5\Include\ErrorDescription.mqh
Valery, merci. Mais ce n'est pas ce que je recherchais :)
 

J'ai une question. La question des graphiques sans trous n'est-elle pas prise en compte ? https://www.mql5.com/ru/forum/100491

Très difficile de tout synchroniser, il me semble avoir essayé de tout prendre en compte dans l'indicateur, mais ces trous sont très difficiles à traiter

2010.07.19 02:20:12 Vérification des trous (EURUSD,M1) Nombre de trous dans l'historique 260 de la date 2010.07.09 21:35:00
2010.07.19 02:20:12 Vérification des trous (EURUSD,M1) Trou GBPUSD 2010.07.19 00:20:00
2010.07.19 02:20:12 Vérification des trous (EURUSD,M1) Trou USDJPY 2010.07.19 00:15:00
2010.07.19 02:20:12 Trou de contrôle (EURUSD,M1) Trou EURGBP 2010.07.16 22:43:00
2010.07.19 02:20:12 Vérification des trous (EURUSD,M1) Trou GBPUSD 2010.07.16 22:43:00
2010.07.19 02:20:12 Vérification des trous (EURUSD,M1) Trou GBPUSD 2010.07.16 22:38:00
2010.07.19 02:20:12 Vérification des trous (EURUSD,M1) Trou 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);
  }
//+------------------------------------------------------------------+

et deuxième question : y a-t-il d'autres pièges dans cet indicateur multidevises que je n'ai pas vérifiés ?

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