Erreurs, bugs, questions - page 670

 

Est-il prévu de remanier la grille de Gann ? Il est absolument impossible de l'utiliser : ni manuellement, ni par extrémums, comme dans MT4, je ne peux l'étirer ou le fixer correctement - en passant de TF à TF, la taille des cellules change, il n'y a pas de liaison fixe ! Ou peut-être que je ne comprends pas quelque chose...

M1M5

 

Seuls les métaux sur Alpari n'affichent pas les barres et les OHLC, tous les autres sont corrects. Les devis sont envoyés, les commandes sont passées. J'ai déplacé le terminal dans un nouveau dossier, ça n'aide pas. Où peut se trouver l'erreur ? W7 64

 
BoraBo:

Seuls les métaux sur Alpari n'affichent pas les barres et les OHLC, tous les autres sont corrects. Les devis sont envoyés, les commandes sont passées. J'ai déplacé le terminal dans un nouveau dossier, ça n'aide pas. Où peut se trouver l'erreur ? W7 64

J'ai le même problème. J'ai eu l'impression que quelque chose n'allait pas sur le serveur. Contactez le support technique d'Alpari.

 
void OnStart()
  {
//---
symbol2csv(Symbol(),Period());
  }
//+------------------------------------------------------------------+
int symbol2csv(string smb,ENUM_TIMEFRAMES tf)
  {
   ResetLastError();
   int filehandle=FileOpen(smb+"_"+tf2str(tf)+".csv",FILE_WRITE|FILE_CSV,",");
   if(filehandle!=INVALID_HANDLE)
     {
      MqlRates rates[];
      int i=0,copyed=CopyRates(smb,tf,From,To,rates);
      ArraySetAsSeries(rates,false);
      FileWrite(filehandle,"\"Date\" \"Time\" \"Open\" \"High\" \"Low\" \"Close\" \"Volume\""); // writing header
      for(i=0;i<copyed;i++)
        {
         FileWrite(filehandle,TimeToString(rates[i].time,TIME_DATE),TimeToString(rates[i].time,TIME_MINUTES),DoubleToString(rates[i].open,_Digits),DoubleToString(rates[i].high,_Digits),DoubleToString(rates[i].low,_Digits),DoubleToString(rates[i].close,_Digits),rates[i].real_volume);
        }
      FileClose(filehandle);
      Print(smb+" exported "+IntegerToString(copyed));
      return copyed;
     }
   else Print("FileOpen failure. Error is ",GetLastError());
   return -1;
  }
Pourquoi la colonne Volume du fichier contient-elle toujours 0 ? Et comment enregistrer le volume ?
 
Graff:
Pourquoi la colonne Volume du fichier contient-elle toujours 0 ? Et comment faire pour que le volume soit écrit ?

real_volume pour les instruments de forex ?

Essayez simplement tick_volume pour commencer.

 

Quelle est l'erreur que je n'arrive pas à comprendre ?

Voici le code, réduit au minimum :

//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

//---------- MQL5 --------------
int ecx = 0;//-- Кол-во тестируемых пар --
string g_s_SymbolsTrade[] = {"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD","CADCHF","CHFJPY","EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD","EURUSD",
"GBPCHF","GBPJPY","GBPUSD","NZDUSD","USDCAD","USDCHF","USDJPY"};

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   //-- Сколько всего валютных пар --
   ecx = ArraySize(g_s_SymbolsTrade);
   //-- Установить таймер на каждую секунду --
   if (EventSetTimer(1) == false) return(-1);//int 08
   
   return(0);//ret;
}
//----------------------------------------------------------------------------//
void OnDeinit(const int reason)
{
   EventKillTimer();//timer off
}
//+------------------------------------------------------------------+
//| 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[])
{
    
//--- return value of prev_calculated for next call
   return(rates_total);//ret;
}

//+------------------------------------------------------------------+
////////////////////////////////////////////////////////////////////////////////
//                           Expert Timer function                            //
////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
void OnTimer()//int 08
{
static bool b_Flag = false;
string db_SymbolName;
MqlRates rates[];
int edx;

   if (b_Flag == true) return;//ret -- реентерабельность --
   b_Flag = true;//cli
   //---------------------------------------------
   for (int ebx = 0; ebx < ecx; ebx++){
      db_SymbolName = g_s_SymbolsTrade[ebx];
      edx=CopyRates(db_SymbolName,_Period,0,1,rates);
      if (edx != 1){//cmp edx,1 | jne
         b_Flag = false;//sti
         return;//jne ret;
      }   
   }//loop ecx       
   Print ("Загрузка завершена.");
   //---------------------------------------------
   b_Flag = false;//sti
}

Lorsque je l'exécute, parfois immédiatement ou après avoir basculé une période de graphiques, le terminal commence soudainement à ralentir et tout le journal est encombré de ceci :


Quelle est la raison, est-ce mon erreur ou une erreur dans la fonction CopyRates ?

 
pusheax:

Quelle est la raison, est-ce ma faute ou un bug dans la fonction CopyRates?

Tous les deux.

Essayez de cette façon :

void OnTimer()//int 08
{
static bool b_Flag = false;
if (b_Flag == true) return;//ret -- реентерабельность --
string db_SymbolName;
MqlRates rates[ ecx];    // поправка здесь.
int edx;


   b_Flag = true;//cli
   //---------------------------------------------
   for (int ebx = 0; ebx < ecx; ebx++){
      db_SymbolName = g_s_SymbolsTrade[ebx];
      edx=CopyRates(db_SymbolName,_Period,0,1,rates);
      if (edx != 1){//cmp edx,1 | jne
         b_Flag = false;//sti
         return;//jne ret;
      }   
   }//loop ecx       
   Print ("Загрузка завершена.");
   //---------------------------------------------
   b_Flag = false;//sti
}
 
MetaDriver:

Tous les deux.

Essayez comme ça :


Non, malheureusement, ça n'a pas aidé.

Je l'ai écrit de la manière suivante : MqlRates rates[100] ;

Sinon, la manière suivante : MqlRates rates[ecx] ; - produit une erreur lors de la compilation.

J'ai également aimé l'idée de le déplacer vers le haut :

if (b_Flag == true) return;//ret -- réentraînement --.

mais malheureusement le résultat est le même.

D'autres idées ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 
papaklass:

Si le nombre de barres du terminal dans les paramètres du graphique est illimité. Réduire le nombre de barres.

Il semble n'avoir qu'une seule barre copiée.
 
papaklass:

Ainsi sur 25 instruments. J'avais la même chose sur le 12 jusqu'à ce que je réduise le nombre de barres.

Alors, ça veut dire servir. Le terminal ne doit pas exhumer tout l' historique du disque symbole par symbole lors de la lecture de 1 bar.

Même s'il est défini comme illimité, la mise en cache doit être effectuée de manière intelligente.

--

De bons conseils en général. J'ai réfléchi - il dit "quand on change de période". Le terminal stocke donc tout en minutes, il commence à calculer les périodes manquantes, et se retrouve coincé avec une mémoire insuffisante pour les tampons.

En bref, les deux sont à blâmer. Push n'a pas acheté de mémoire, et veut beaucoup, beaucoup de paires de devises sans limite (ou à peu près sans limite).

Et MQ - ne le traite pas comme une erreur d'indicateur (comme "Erreur XXXX : ferme ta lèvre, camarade"), mais seulement comme une erreur propre.