Fehler, Irrtümer, Fragen - Seite 53

 
Kos:
Ich habe in der Dokumentation keine Beschreibung der Antwortcodes (Retcode) für die MqlTradeCheckResult-Struktur der Handelsanfrageergebnisse gefunden. Wird es welche geben?


Alle Beschreibungen sind in der Dokumentation enthalten.

Sehen Sie sich die OrderSend-Funktion, die MqlTradeResult-Struktur und die Liste der Trade-Response-Codes an.

 
Renat:

Told - leeres Array ohne Größe

Tnew[1] - out of array, das Array wird als Tnew[1] bezeichnet, so dass auf seine Elemente nur als Tnew[0] zugegriffen werden kann, da der Index bei Null beginnt.

Was ist das Ergebnis? In diesem Fall ist Tnew[1]ein falscher Ausdruck, aber ist er gültig? Ist Tnew[0] , Tnew[] ein gültiger Ausdruck, oder etwas anderes? Das Ergebnis des Expert Advisors scheint sich nicht zu ändern, wenn Tnew[1], Tnew[0], Tnew[] verwendet werden.
 
Renat:

Alle Beschreibungen sind in der Dokumentation enthalten.

Sehen Sie sich die OrderSend-Funktion, die MqlTradeResult-Struktur und die Liste der Trade-Response-Codes an.

Renat, wenn ich dich richtig verstanden habe, gelten die ENUM_TRADE_RETURN_CODES-Rückgabecodes für die Struktur MqlTradeResult auch für die Struktur MqlTradeCheckResult
 
ias:
Was ist das Ergebnis? Tnew[1]ist in diesem Fall ein falscher Ausdruck, aber er ist gültig? Ist Tnew[0] , Tnew[] ein gültiger Ausdruck oder etwas anderes? Das Ergebnis des Experten scheint sich nicht zu ändern, wenn man Tnew[1],Tnew[0],Tnew[] verwendet.

Das Ergebnis kann nicht dasselbe sein, zumindest nicht, wenn Daten aus dem Array mit einem Index gelesen werden, der nicht existiert. Was steht Ihrer Meinung nach in Tnew[1]?

Ich bin nicht so sicher, was geschrieben wird, wenn der EA den Bereich verlässt, kann es einen Fehler melden und weitergehen. Aber was wird in Tnew[0] in diesem Fall sein?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Kos:
Renat, wenn ich Sie richtig verstanden habe, gelten die ENUM_TRADE_RETURN_CODES-Rückgabecodes für die Struktur MqlTradeResult auch für die Struktur MqlTradeCheckResult

Ja, die Basis der Handelsfehlercodes ist die gleiche für den gesamten Handelsfunktionsraum.

Die Beschreibungen für neue Funktionen werden korrigiert - wir hatten nur keine Zeit, dies sofort zu tun.

 
Interesting:

Das Ergebnis kann nicht dasselbe sein, zumindest nicht, wenn Daten aus dem Array mit einem Index gelesen werden, der nicht existiert. Was steht Ihrer Meinung nach in Tnew[1]?

Ich bin mir nicht sicher über das Schreiben, der Expert Advisor kann einen Fehler melden und weitergehen, wenn es den Bereich verlässt, aber was wird in Tnew[0] in diesem Fall sein?

Das Ergebnis der Expertentätigkeit ändert sich nicht, wenn die Datumsangaben Tnew[1];Tnew[0];Tnew[]; verwendet werden.folgt daraus, dass in Exp_TEMA.mq5 aus dem Artikel "Erstellen eines Expert Advisors, der auf verschiedenen Symbolen handelt" die die Funktion

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

nicht funktioniert?

Was denken Sie, was Tnew[1] ist?

Nach CopyTime(symbol, timeframe, 0, 1, Tnew); sollte die Adresse Tnew[1] die Startzeit des vorherigen Balkens enthalten.

 
ias:

Das Ergebnis der Arbeit des Experten ändert sich nicht, wenn Sie datetime Tnew[1];Tnew[0];Tnew[]; verwenden. Bedeutet dies, dass der Expert Advisor Exp_TEMA.mq5 aus dem Artikel "Erstellen eines Expert Advisors, der auf verschiedenen Symbolen handelt" das gleiche Ergebnis hat? die Funktion

nicht funktioniert?

Was denken Sie, was Tnew[1] ist?

Nach CopyTime(symbol, timeframe, 0, 1, Tnew); sollte die Adresse Tnew[1] die Startzeit des vorherigen Balkens enthalten.

Analysieren wir der Reihe nach

Diese beiden Strings deklarieren zwei Arrays, von denen eines dynamisch ist, während das zweite ( Tnew) nur einen Datensatz enthält.

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

Dies ist ein Versuch, die Größe des dynamischen Arrays zu ändern. Es wird davon ausgegangen, dass die Anzahl der Datensätze im Array gleich der Größe ist.

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

Diese Zeile kopiert einen Datensatz (Taktdatum) ab der Taktnummer 0 in das Array Tnew. Dieses Datum ist dann als Tnew[0] verfügbar (da das Array mit NULL nummeriert ist).

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

Hier wird der einzige Datensatz des Arrays Tnew mit dem Datensatz mit der Nummer Number-1 in einer Zelle des Arrays Told verglichen (zur Erinnerung: das Array ist von 0 an nummeriert).

Wenn diese Daten nicht übereinstimmen, schreiben wir den Wert von Tnew array in die Zelle von Told array.

if (Tnew[0] != Told[Number])
{
Told[Number] = Tnew[0];
return(true);
}
 
Kos:
Ich habe in der Dokumentation keine Beschreibung der Response Codes (Retcode) für die Struktur von MqlTradeCheckResult trade request check results gefunden. Werden sie verfügbar sein?


In MetaTrader 5\MQL5\Include\ErrorDescription.mqh
Dateien:
 
Valmars:
In der Datei MetaTrader 5\MQL5\Include\ErrorDescription.mqh
Valery, ich danke dir. Aber das ist nicht das, wonach ich gesucht habe:)
 

Ich habe eine Frage. Wird die Frage der Grafiken ohne Löcher nicht berücksichtigt? https://www.mql5.com/ru/forum/100491

Es ist sehr schwierig, alles zu synchronisieren. Ich habe wohl versucht, alles im Indikator zu berücksichtigen, aber diese Löcher sind sehr schwer zu bewältigen.

2010.07.19 02:20:12 Überprüfung der Löcher (EURUSD,M1) Anzahl der Löcher in der Geschichte 260 ab dem Datum 2010.07.09 21:35:00
2010.07.19 02:20:12 Überprüfung der Löcher (EURUSD,M1) GBPUSD Loch 2010.07.19 00:20:00
2010.07.19 02:20:12 Überprüfung der Löcher (EURUSD,M1) Loch USDJPY 2010.07.19 00:15:00
2010.07.19 02:20:12 Überprüfung der Löcher (EURUSD,M1) Loch EURGBP 2010.07.16 22:43:00
2010.07.19 02:20:12 Überprüfen von Löchern (EURUSD,M1) GBPUSD-Loch 2010.07.16 22:43:00
2010.07.19 02:20:12 Überprüfung von Löchern (EURUSD,M1) GBPUSD-Loch 2010.07.16 22:38:00
2010.07.19 02:20:12 Überprüfung der Löcher (EURUSD,M1) AUDUSD-Loch 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);
  }
//+------------------------------------------------------------------+

Und die zweite Frage: Gibt es noch andere Fallstricke in diesem Mehrwährungsindikator, die ich noch nicht geprüft habe?

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