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

 

Dans mql4 j'ai utilisé iCustom pour faire des indicateurs qui utilisent les indicateurs prêts à l'emploi de quelqu'un d'autre, même si je ne connais rien à la programmation... J'en ai assez de l'intuition. J'utilise mql5 mais rien ne fonctionne, quels que soient mes efforts pour comprendre. Je veux vous demander de l'aide.

J'ai cet indicateur dans ex5. Je l'ai mis dans mon dossier de téléchargement. Je veux prendre ses deux lignes et les dessiner sur le graphique dans d'autres périodes, c'est à dire le rendre multitime frame avec iCustom.

Comme je ne peux pas écrire un indicateur à partir de zéro, j'ai pris le code d'un indicateur simple Bears Power. Je n'ai rien changé à cet endroit, sauf le changement de indicator_chart_window et DRAW_LINE et la ligne, qui, à mon avis, devrait sortir les données du premier tampon avec les paramètres par défaut du TF actuel :

ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics");

Tout se compile, rien ne se dessine. De quoi d'autre a-t-il besoin ? :(

#property copyright   "2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Bears Power"
//--- indicator settings
#property indicator_chart_window                      //---------------------------------
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_LINE                 //---------------------------------------
#property indicator_color1  Silver
#property indicator_width1  2
//--- input parameters
input int InpBearsPeriod=13; // Period
//--- indicator buffers
double    ExtBearsBuffer[];
double    ExtTempBuffer[];
//--- handle of EMA 
int       ExtEmaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBearsBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtTempBuffer,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpBearsPeriod-1);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Bears("+(string)InpBearsPeriod+")");
//--- get MA handle
   ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//--- check for bars count
   if(rates_total<InpBearsPeriod)
      return(0);// not enough bars for calculation   
//--- not all data may be calculated
   int calculated=BarsCalculated(ExtEmaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtEmaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//---- get ma buffers
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)
     {
      Print("getting ExtEmaHandle is failed! Error",GetLastError());
      return(0);
     }
//--- first calculation or number of bars was changed
   if(prev_calculated<InpBearsPeriod)
      limit=InpBearsPeriod;
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
     {
      ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics"); \\--------------------------------------------
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Технический индикатор RSI ANALYTICS
Технический индикатор RSI ANALYTICS
  • avis : 5
  • 2013.11.01
  • STRAT ANALYTICS
  • www.mql5.com
Зачем нам RSI в отдельном окне, если его можно построить в основном окне графика, что гораздо более понятно? RSI ANALYTICS - это индикатор, следящий за рынком, созданный на основе той же идеи, что и традиционный RSI (индекс относительной силы). При этом он строится не в отдельном подокне, а в том же окне, что и график цены финансового...
 
Nilog:

Dans mql4 j'ai utilisé iCustom pour faire des indicateurs qui utilisent les indicateurs prêts à l'emploi de quelqu'un d'autre, même si je ne connais rien à la programmation... J'en ai assez de l'intuition. J'utilise mql5 mais rien ne fonctionne, quels que soient mes efforts pour comprendre. Aidez-moi, je vous en prie.

J'ai cet indicateur dans ex5. Je l'ai mis dans mon dossier de téléchargement. Je veux prendre ses deux lignes et les dessiner sur le graphique dans d'autres périodes, c'est à dire le rendre multitime frame avec iCustom.

Comme je ne peux pas écrire un indicateur à partir de zéro, j'ai pris le code d'un indicateur simple Bears Power. Je n'ai rien changé à cet endroit, sauf le changement de indicator_chart_window et DRAW_LINE et la ligne, qui, à mon avis, devrait sortir les données du premier tampon avec les paramètres par défaut du TF actuel :

Tout se compile, rien ne se dessine. De quoi d'autre a-t-il besoin ? :(

Dans mql5, le travail avec les indicateurs personnalisés et standard est organisé différemment de celui de mql4. Si dans mql4 vous ne pouvez obtenir qu'une seule valeur d'indicateur à travers iCustom, dans mql5 vous pouvez obtenir des valeurs d'indicateur pour toute la profondeur de l'historique dans le tableau. La deuxième différence majeure est le sens de l'indexation dans les tampons indicateurs.

Il est fastidieux de passer en revue tout le code et de le vérifier par rapport à l'original, aussi je ne soulignerai que les principaux :

Le fichier doit être situé dans le dossier Indicateurs ou dans un sous-dossier situé dans le même Indicateurs.

Voici la ligne pour obtenir la poignée de l'indicateur MA

ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);

et ceci est la chaîne pour obtenir la valeur de l'indicateur MA

if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)

dans ce cas, vers un tampon ou un tableau supplémentaire.

Il s'avère que pour obtenir les données de l'indicateur personnalisé

ExtBearsHandle=iCustom(NULL,0,"RSI Analytics");
CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer)

Ensuite, vous pouvez traiter les valeurs de l'indicateur à partir de ce tampon supplémentaire d'une manière ou d'une autre, ou vous pouvez les placer dans le tampon de l'indicateur sans oublier la direction de l'indexation.

 
Alexey Viktorov:


Merci ! J'ai écrit quelque chose comme je l'avais compris, et maintenant une seule erreur apparaît lors de la compilation. Sur la ligne

CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer);

erreurto_copy - identifiant non déclaré.

Dans quelle section et comment la déclarer ?

 
Nilog:

Merci ! J'ai écrit quelque chose comme je l'avais compris, et maintenant une seule erreur apparaît lors de la compilation. Sur la ligne

erreurto_copy - identifiant non déclaré.

Dans quelle section et comment la déclarer ?

Vous devez comparer mes conseils avec votre code et avec le code source que vous avez déjà corrigé. Cette variable est déclarée dans ces codes. Et en plus de mes remarques, vous devriez essayer de comprendre la logique des indicateurs de construction en général, et ne pas vous contenter de changer une merde pour une merde.

 
Dans MetaTrader 5, un EA peut-il fonctionner différemment sur une devise et, par exemple, sur l'indice RTS ?
 
lil_lil:
Dans MetaTrader 5, la performance d'un EA sur une paire de devises peut-elle être radicalement différente de la performance, par exemple, sur l'indice RTS ?

Le conseiller fonctionnera comme il est écrit. Et pas autrement.

Quant aux nuances à prendre en compte : le RTS est une bourse, d'où des positions comptables de type NETTING. Si l'EA n'est pas conçu à l'origine pour travailler sur le filet, le résultat est imprévisible.

 
Vladimir Karputov:

Le conseiller fonctionnera comme il est écrit. Et pas autrement.

Quant aux nuances à prendre en compte : le RTS est une bourse, d'où des positions comptables de type NETTING. Si l'EA n'est pas conçu à l'origine pour travailler sur du filet, le résultat est imprévisible.

Si votre EA n'est pas prévupour fonctionner sur le net, le résultat est imprévisible.

Il n'y a pas de positions multidirectionnelles dans la stratégie.

 
lil_lil:

Merci, mais comment savoir avec certitude, à partir du code, s'il est conçupour fonctionner sur un filet ou non?

Il n'y a pas de positions opposées dans la stratégie.

Et, si c'est le cas (toujours UNE position dans le travail), alors il n'y a pas de différence - qu'il s'agisse de compensation ou de couverture.

 
Vladimir Karputov:

Si c'est le cas (il y a toujours UNE position en cours), cela ne fait aucune différence qu'il s'agisse de compensation ou de couverture.

Sur un signal inverse en devises (Forex), les positions sont fermées, mais pas sur le marché. Où chercher, que chercher ?

 
lil_lil:

Lors d'un signal inverse sur les devises, les positions sont fermées, mais pas sur le marché. Où chercher, que chercher ?

Chercher l'endroit d'où vient l'ordre de fermer la position.

Raison: