Errori, bug, domande - pagina 53

 
Kos:
Non ho trovato nessuna descrizione dei codici di risposta (Retcode) per la struttura MqlTradeCheckResult dei risultati delle richieste commerciali nella documentazione. Ce ne saranno?


Tutte le descrizioni sono nella documentazione.

Guarda la funzione OrderSend, la struttura MqlTradeResult e l'elenco dei codici di risposta alla negoziazione.

 
Renat:

Told - array vuoto senza dimensione

Tnew[1] - fuori dall'array, l'array è descritto come Tnew[1], quindi i suoi elementi sono accessibili solo come Tnew[0], perché l'indice inizia a zero.

Qual è l'uscita? In questo caso Tnew[1]è un'espressione errata, ma è valida? Tnew[0] , Tnew[] è un'espressione valida o qualcos'altro? Il risultato di Expert Advisor non sembra cambiare quando si usano Tnew[1], Tnew[0], Tnew[].
 
Renat:

Tutte le descrizioni sono nella documentazione.

Guarda la funzione OrderSend, la struttura MqlTradeResult e l'elenco dei codici di risposta alla negoziazione.

Renat, se ho capito bene, i codici di ritorno ENUM_TRADE_RETURN_CODES per la struttura MqlTradeResult si applicano anche alla struttura MqlTradeCheckResult
 
ias:
Qual è l'uscita? Tnew[1]è un'espressione errata in questo caso, ma è valida? Tnew[0] , Tnew[] è un'espressione valida o qualcos'altro? Il risultato dell'esperto non sembra cambiare quando si usa Tnew[1],Tnew[0],Tnew[].

Il risultato non può essere lo stesso, almeno non se i dati vengono letti dall'array da un indice che non esiste. Cosa pensate ci sia in Tnew[1]?

Non sono così sicuro di quello che viene scritto, quando l'EA lascia l'intervallo, può segnalare un errore e andare avanti. Ma cosa ci sarà in Tnew[0] in questo caso?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Kos:
Renat, se ho capito bene, i codici di ritorno ENUM_TRADE_RETURN_CODES per la struttura MqlTradeResult si applicano anche alla struttura MqlTradeCheckResult

Sì, la base dei codici di errore commerciale è la stessa per tutto lo spazio delle funzioni commerciali.

Le descrizioni delle nuove funzioni saranno corrette - non abbiamo avuto il tempo di farlo subito.

 
Interesting:

Il risultato non può essere lo stesso, almeno non se i dati vengono letti dall'array da un indice che non esiste. Cosa pensate ci sia in Tnew[1]?

Non sono sicuro della scrittura, l'Expert Advisor può segnalare un errore e andare avanti quando esce dal range, ma cosa ci sarà in Tnew[0] in questo caso?

Il risultato del lavoro dell'esperto non cambia quando si usa datetime Tnew[1];Tnew[0];Tnew[];.ne consegue che in Exp_TEMA.mq5 dall'articolo "Creare un Expert Advisor che negozia su diversi simboli" il , la funzione

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

non funziona?

Cosa pensate che sia Tnew[1]?

Dopo CopyTime(symbol, timeframe, 0, 1, Tnew); l'indirizzo Tnew[1] dovrebbe contenere il tempo di inizio della barra precedente.

 
ias:

Il risultato del lavoro dell'esperto non cambia quando si usa datetime Tnew[1];Tnew[0];Tnew[];.Dovrebbe seguire che esiste un Expert Advisor Exp_TEMA.mq5 dall'articolo "Creare un Expert Advisor per fare trading su diversi simboli"? , la funzione

non funziona?

Cosa pensate che sia Tnew[1]?

Dopo CopyTime(symbol, timeframe, 0, 1, Tnew); l'indirizzo Tnew[1] dovrebbe contenere il tempo di inizio della barra precedente.

Analizziamo in ordine

Queste due stringhe dichiarano due array, uno dei quali è dinamico, mentre il secondo ( Tnew) contiene solo un record.

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

Questo è un tentativo di cambiare la dimensione dell'array dinamico. Si presume che il numero di record nell'array sia uguale alla dimensione.

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

Questa linea copia un record (data della barra) a partire dalla barra numero 0 nell'array Tnew. Questa data diventa quindi disponibile come Tnew[0] (perché l'array è numerato con ZERO).

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

Qui, l'unico record dell'array Tnew viene confrontato con il record numerato Number-1 in una cella dell'array Told (ricordate, l'array è numerato da 0).

Se queste date non corrispondono, scriviamo il valore dell'array Tnew nella cella dell'array Told.

if (Tnew[0] != Told[Number])
{
Told[Number] = Tnew[0];
return(true);
}
 
Kos:
Non ho trovato nessuna descrizione dei codici di risposta (Retcode) per la struttura dei risultati del controllo delle richieste di commercio MqlTradeCheckResult nella documentazione. Saranno disponibili?


In MetaTrader 5\MQL5\Include\ErrorDescription.mqh
File:
 
Valmars:
Nel file MetaTrader 5\MQL5\Include\ErrorDescription.mqh
Valery, grazie. Ma questo non è quello che stavo cercando:)
 

Ho una domanda. La questione della grafica senza buchi non viene considerata? https://www.mql5.com/ru/forum/100491

Molto difficile sincronizzare tutto, mi sembra di aver cercato di tenere conto di tutto nell'indicatore, ma questi buchi sono molto difficili da gestire

2010.07.19 02:20:12 Controllo dei fori (EURUSD,M1) Numero di fori nella storia 260 dalla data 2010.07.09 21:35:00
2010.07.19 02:20:12 Controllo dei fori (EURUSD,M1) foro GBPUSD 2010.07.19 00:20:00
2010.07.19 02:20:12 Controllo dei fori (EURUSD,M1) Foro USDJPY 2010.07.19 00:15:00
2010.07.19 02:20:12 Controllo dei fori (EURUSD,M1) Foro EURGBP 2010.07.16 22:43:00
2010.07.19 02:20:12 Controllo dei fori (EURUSD,M1) GBPUSD Foro 2010.07.16 22:43:00
2010.07.19 02:20:12 Controllo dei fori (EURUSD,M1) GBPUSD Foro 2010.07.16 22:38:00
2010.07.19 02:20:12 Controllo dei buchi (EURUSD,M1) Buco AUDUSD 2010.07.16 22:21:00

ecc.....

//+------------------------------------------------------------------+
//|                                                 Проверка дыр.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);
  }
//+------------------------------------------------------------------+

e seconda domanda: ci sono altre insidie in questo indicatore multicurrency che non ho controllato?

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