Questions des débutants MQL5 MT5 MetaTrader 5 - page 1244

 
Nikita Bushuev:

Vladimir, j'ai également généré le code avec l'assistant MQL5. J'ai essayé votre EA, il ne fonctionne pas non plus pour moi lorsque je l'exécute sur la devise GBPUSD.

Il est indiqué ce qui suit dans le journal :

Lisez ce qui est écrit dans le journal. Il y a une description de VOTRE erreur. (s'il s'agit d'un testeur, il y a un journal, s'il s'agit d'un terminal, il y a deux journaux).


Précisez également : sur quel symbole et sur quelle période vous commencez. Aujourd'hui les télépathes sont en vacances et il n'y a personne pour lire vos pensées.

 
Vladimir Karputov:

Lisez ce qui est écrit dans le carnet de bord. Il y a une description de VOTRE erreur. (s'il s'agit d'un testeur - il y a un journal, s'il s'agit d'un terminal - il y a DEUX journaux).

Le testeur se plante à cet endroit lors de la création d'un handle d'indicateur, c'est-à-dire qu'il = INVALID_HANDLE. Dans la variable symbole "EURUSD", la période est également définie. Comment cela est-il possible et que signifie l'erreur 4804 ?

ERR_INDICATEUR_CANNOT_APPLY

4804

L'indicateur ne peut pas être appliqué à un autre indicateur

m_handle=iAC(symbol,period);
bool CiAC::Create(const string symbol,const ENUM_TIMEFRAMES period)
  {
//--- check history
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- create
   m_handle=iAC(symbol,period);
//--- check result
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- idicator successfully created
   if(!Initialize(symbol,period))
     {
      //--- initialization failed
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
Документация по MQL5: Предопределенные переменные / _Symbol
Документация по MQL5: Предопределенные переменные / _Symbol
  • www.mql5.com
Предопределенные переменные / _Symbol - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Nikita Bushuev:

Le testeur se plante ici lors de la création d'un handle d'indicateur, c'est-à-dire qu'il = INVALID_HANDLE. Dans la variable symbole "EURUSD", la période est également définie. Comment cela est-il possible et que signifie l'erreur 4804 ?

ERR_INDICATEUR_CANNOT_APPLY

4804

L'indicateur ne peut pas être appliqué à un autre indicateur

Lisez le journal - il contient une description de VOTRE erreur. Plus vite vous le lirez, plus vite vous comprendrez.

Précisez également : sur quel symbole et sur quelle période vous vous lancez. Les télépathes sont en vacances aujourd'hui et il n'y a personne pour lire dans les pensées.
 
Vladimir Karputov:

Lisez le magazine - il y a une description de VOTRE erreur. Plus vite vous le lirez, plus vite vous comprendrez.

Précisez également : sur quel symbole et sur quelle période vous vous lancez. Aujourd'hui les télépathes sont en vacances et il n'y a personne pour lire dans vos pensées.

Le problème a été résolu en réinstallant la plate-forme.

 
Vladimir Pastushak:

Chers développeurs, les produits sur le marché ne peuvent être vérifiés

Code joint

CopyRates provoque un blocage, ce qui a pour conséquence que le marché écrit

test sur EURUSD,H1 (netting)

le testeur prend trop de temps

Rapport du testeur de stratégie introuvable

Et le validateur a correctement passé le seuil : Vous ne réfléchissez probablement pas trop, quand vous voulez demander 1440 éléments à chaque TICK pour tous les symboles du terminal ? Vous n'avez même pas pensé : le serveur peut facilement avoir plus de cinq mille symboles, un symbole peut avoir NO 1440 barres...


En somme, un sujet pour les débutants. Absolument.

 
Bonjour, Pourriez-vous me dire pourquoi les graphiques ne se chargent pas ? 14.08 enregistré sur la plateforme MT5 4 graphiques sur 7 sont toujours en attente de mise à jour. Bien que sur le compte de démonstration précédemment enregistré, tous les graphiques sont mis à jour en temps voulu.
 
Vladimir Karputov:

Exemple

Résultat :


Merci, Vladimir. Je comprends parfaitement la logique de votre exemple. Vous le croyez ?

 
Сергей Таболин:

Merci, Vladimir. Je comprends parfaitement la logique de votre exemple. Vous le croyez ?

Je ne suis pas Vladimir, mais je vais vous demander : qu'est-ce qui ne marche pas ? Tout est parti depuis longtemps, et je n'ai pas envie de chercher ton exemple. S'il vous plaît, reproduisez-le à nouveau.

 
Artyom Trishkin:

Je ne suis pas Vladimir, mais je dois demander : qu'est-ce qui ne marche pas ? C'est fini depuis longtemps, et je ne veux pas chercher ton exemple. S'il vous plaît, reproduisez-le à nouveau.

Voici mon exemple :

//+------------------------------------------------------------------+
//|                                                        cTest.mq5 |
//|                                     Copyright 2020, Tabolin S.N. |
//|                           https://www.mql5.com/ru/users/vip.avos |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Tabolin S.N."
#property link      "https://www.mql5.com/ru/users/vip.avos"
#property version   "1.00"
//#property indicator_separate_window
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   1
//--- plot bars
#property indicator_label1  "bars"
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  clrGold
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double   barsBuffer1[];
double   barsBuffer2[];
double   barsBuffer3[];
double   barsBuffer4[];
//+------------------------------------------------------------------+
double   newCandles_Open[5]   = {106.785, 106.724, 106.760, 106.767, 106.769};
double   newCandles_High[5]   = {106.792, 106.765, 106.780, 106.781, 106.769};
double   newCandles_Low[5]    = {106.716, 106.719, 106.746, 106.758, 106.715};
double   newCandles_Close[5]  = {106.724, 106.760, 106.766, 106.769, 106.725};

int      tick_count           = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
   
   ArraySetAsSeries(barsBuffer1  ,true);
   ArraySetAsSeries(barsBuffer2  ,true);
   ArraySetAsSeries(barsBuffer3  ,true);
   ArraySetAsSeries(barsBuffer4  ,true);
   
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0);
   
   ArrayInitialize(barsBuffer1   ,0);
   ArrayInitialize(barsBuffer2   ,0);
   ArrayInitialize(barsBuffer3   ,0);
   ArrayInitialize(barsBuffer4   ,0);
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int  OnCalculate(
   const int        rates_total,       // размер входных таймсерий
   const int        prev_calculated,   // количество обработанных баров на предыдущем вызове
   const datetime&  time[],            // массив Time
   const double&    open[],            // массив Open
   const double&    high[],            // массив High
   const double&    low[],             // массив Low
   const double&    close[],           // массив Close
   const long&      tick_volume[],     // массив Tick Volume
   const long&      volume[],          // массив Real Volume
   const int&       spread[]           // массив Spread
   )
{
   if(rates_total - prev_calculated > 1)
   {
      if(prev_calculated == 0)
      {
         Print("~~~~ Предварительный расчёт индикатора.");
         for(int i = 0; i < 5; i++)
         {
            barsBuffer1[0] = newCandles_Open[i];
            barsBuffer2[0] = newCandles_High[i];
            barsBuffer3[0] = newCandles_Low[i];
            barsBuffer4[0] = newCandles_Close[i];
         }
         Print("~~~~ Предварительный расчёт индикатора закончен.");
      }
      else return(0);
   }
   else Print("tick_count = ",++tick_count);
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
Si je change barsBuffer1[0] en barsBuffer1[i], il est dessiné. Mais alors comment ajouter une nouvelle bougie?
 
Сергей Таболин:

Voici mon exemple :

Si je change barsBuffer1[0] en barsBuffer1[i], il est dessiné. Mais alors comment ajouter une nouvelle bougie?

Toutes les matrices n'ont pas la même orientation.

Raison: