Scripts: Export Indicator's Values - page 2

[Supprimé]  
Ne fonctionne pas.
 
Je n'arrive pas à exporter les valeurs de la moyenne mobile exponentielle à 50 périodes.
 

Rechercher le fichier dans le dossier

C:\Users\XXX\AppData\Roaming\MetaQuotes\Terminal\ZXVVDASDADDEDADS23132\MQL5\Files

 
Le script est très bien, mais j'aimerais que les données puissent être envoyées directement à Excel, via un serveur RTD, afin d'utiliser la fonction RDTR d'Excel. Avez-vous prévu quelque chose de ce genre ?
 
 
Jose Luis Perez Navarro:
Le script est très bon, mais j'aimerais que les données puissent être envoyées directement à Excel, via un serveur RTD, afin d'utiliser la fonction RDTR d'Excel. Avez-vous quelque chose de ce genre en tête ?
xm.cm real14
 

Oui, cela fonctionne. Vous devez regarder dans le chemin ...MQL5\Files, c'est là que se trouve le fichier CSV.

J'ai modifié pour sauvegarder les valeurs de OBV (volume réel) il suffit de changer le code ci-dessous


Indicator_Directory_And_Name="Examples\\OBV";
IndicatorPeriod=VOLUME_REAL;
 
Ecirba:

Bonjour,

Malheureusement, lorsque j'exécute le script, aucun fichier n'est créé. J'ai mis à jour le script pour qu'il écrive dans C:/temp/. Lorsque j'exécute le script en mode débogage, je vois que le nom du fichier est correct et que je n'obtiens aucune erreur, mais il n'y a pas de fichier.

Un indice ?


Si vous vérifiez le handle, il retournera probablement -1 (invalid handle).


Print ( "fileHandle Value=", fileHandle);


Pour une raison quelconque, MT5 n'aime pas que vous sauvegardiez les fichiers à des endroits différents de ceux par défaut. Il suffit de laisser le code original et il écrira dans ...MQL5\Files path

 

Félicitations pour le script, je suis en train d'exporter les valeurs du flag volatilitypivot en csv, mais le script n'exporte correctement que les valeurs hautes, dans les lignes où devraient apparaître les valeurs basses une erreur apparaît.

Quelqu'un peut-il m'aider ?

Script VolatilityPivot

#property indicator_chart_window
//--- 4 tampons sont utilisés pour le calcul et l'affichage de l'indicateur
#property indicator_buffers 4
//--- 4 parcelles sont utilisées
#property indicator_plots   4
//+----------------------------------------------+
//| Paramètres de dessin de l'indicateur haussier
//+----------------------------------------------+
//--- dessiner l'indicateur 1 comme une ligne
#property indicator_type1   DRAW_LINE
//--- la couleur bleue est utilisée pour la ligne d'indicateur
#property indicator_color1  clrBlue
//--- la ligne de l'indicateur 1 est une ligne en pointillés
#property indicator_style1  STYLE_DASHDOTDOT
//--- l'indicateur 1 largeur de ligne est égal à 2
#property indicator_width1  2
//---- affichage de l'étiquette de l'indicateur
#property indicator_label1  "Upper VolatilityPivot"
//+----------------------------------------------+
//| Paramètres de dessin d'un indicateur baissier
//+----------------------------------------------+
//--- dessiner l'indicateur 2 comme une ligne
#property indicator_type2   DRAW_LINE
//--- La couleur HotPink est utilisée pour la ligne d'indicateur
#property indicator_color2  clrHotPink
//--- la ligne de l'indicateur 2 est une ligne en pointillés
#property indicator_style2  STYLE_DASHDOTDOT
//--- la largeur de ligne de l'indicateur 2 est égale à 2
#property indicator_width2  2
//---- affichage de l'étiquette de l'indicateur
#property indicator_label2  "Lower VolatilityPivot"
//+----------------------------------------------+
//| Paramètres de dessin de l'indicateur haussier
//+----------------------------------------------+
//--- dessiner l'indicateur 3 en tant qu'étiquette
#property indicator_type3   DRAW_ARROW
//--- La couleur DeepSkyBlue est utilisée pour l'indicateur
#property indicator_color3  clrDeepSkyBlue
//--- la largeur de l'indicateur 3 est égale à 4
#property indicator_width3  4
//--- affichage de l'étiquette de l'indicateur
#property indicator_label3  "Buy VolatilityPivot"
//+----------------------------------------------+
//| Paramètres de dessin d'un indicateur baissier
//+----------------------------------------------+
//--- dessiner l'indicateur 4 comme une étiquette
#property indicator_type4   DRAW_ARROW
//--- la couleur rouge est utilisée pour l'indicateur
#property indicator_color4  clrRed
//--- la largeur de l'indicateur 4 est égale à 4
#property indicator_width4  4
//--- affichage de l'étiquette de l'indicateur
#property indicator_label4  "Sell VolatilityPivot"
//+----------------------------------------------+
//| déclaration des constantes |
//+----------------------------------------------+
#define  RESET 0  // Une constante pour renvoyer la commande de recalcul de l'indicateur au terminal
//+----------------------------------------------+
//| Déclaration de l'énumération |
//+----------------------------------------------+
enum Mode_
  {
   Mode_ATR=0,   //ATR
   Mode_Price    /Déviation de prix
  };
//+----------------------------------------------+
//| Paramètres d'entrée de l'indicateur
//+----------------------------------------------+
input uint   atr_range=100;
input uint   ima_range=10;
input double atr_factor=3;
input Mode_  Mode=Mode_ATR;
input  uint  DeltaPrice=200;
input int    Shift=0;          // Décalage horizontal de l'indicateur en barres
//+----------------------------------------------+
//--- déclaration de tableaux dynamiques qui
//--- seront utilisés comme tampons d'indicateurs
double ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---
double dDeltaPrice;
//--- déclaration de variables entières pour les poignées d'indicateurs
int ATR_Handle;
//--- déclaration de variables entières pour le début du calcul des données
int min_rates_total;
//+------------------------------------------------------------------+
//| Description de la classe CMoving_Average|
//+------------------------------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé
//+------------------------------------------------------------------+ 
int OnInit()
  {
//--- Obtenir la poignée de l'indicateur ATR
   if(Mode==Mode_ATR)
     {
      min_rates_total=int(atr_range+ima_range)+1;
      ATR_Handle=iATR(NULL,0,atr_range);
      if(ATR_Handle==INVALID_HANDLE)
        {
         Print(" Failed to get handle of the ATR indicator");
         return(INIT_FAILED);
        }
     }
   else
     {
      min_rates_total=3;
      dDeltaPrice=DeltaPrice*_Point;
     }
//--- définir le tableau dynamique ExtMapBufferUp[] comme tampon indicateur
   SetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA);
//---- décalage horizontal de l'indicateur 1 par Shift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- Décalage du début de l'affichage de l'indicateur 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexation des éléments de la mémoire tampon en tant que séries chronologiques 
   ArraySetAsSeries(ExtMapBufferUp,true);
//--- définir les valeurs des indicateurs qui ne seront pas visibles sur un graphique
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- définir le tableau dynamique ExtMapBufferDown[] comme tampon indicateur
   SetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- décalage horizontal de l'indicateur 2 par Shift
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- déplacement du point de départ du calcul du dessin de l'indicateur 2
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexation des éléments de la mémoire tampon en tant que séries chronologiques 
   ArraySetAsSeries(ExtMapBufferDown,true);
//--- définir les valeurs des indicateurs qui ne seront pas visibles sur un graphique
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Définir le tableau dynamique ExtMapBufferUp1[] comme tampon indicateur
   SetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- décalage horizontal de l'indicateur 1 par Shift
   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- Décalage du début de l'affichage de l'indicateur 3
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexation des éléments de la mémoire tampon en tant que séries chronologiques 
   ArraySetAsSeries(ExtMapBufferUp1,true);
//--- définir les valeurs des indicateurs qui ne seront pas visibles sur un graphique
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- symbole de l'indicateur
   PlotIndexSetInteger(2,PLOT_ARROW,118);
//--- Définir le tableau dynamique ExtMapBufferDown1[] comme tampon indicateur
   SetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA);
//---- décalage horizontal de l'indicateur 2 par Shift
   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- Décalage du début de l'affichage de l'indicateur 4
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//--- indexation des éléments de la mémoire tampon en tant que séries chronologiques 
   ArraySetAsSeries(ExtMapBufferDown1,true);
//--- définir les valeurs des indicateurs qui ne seront pas visibles sur un graphique
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- symbole de l'indicateur
   PlotIndexSetInteger(3,PLOT_ARROW,118);
//--- création du nom à afficher dans une sous-fenêtre séparée et dans une aide contextuelle
   IndicatorSetString(INDICATOR_SHORTNAME,"VolatilityPivot");
//--- déterminer la précision des valeurs de l'indicateur
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- fin de l'initialisation
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisée|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,    // nombre de barres dans l'historique à l'instant présent
                const int prev_calculated,// quantité d'historique en barres au tic-tac précédent
                const datetime &time[],
                const double &open[],
                const double& high[],     // tableau des prix maximums pour le calcul de l'indicateur
                const double& low[],      // tableau des prix minimums pour le calcul de l'indicateur
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- vérifier si le nombre de barres est suffisant pour le calcul
   if((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- déclarations de variables locales 
   double DeltaStop,Stop;
   static double PrevStop;
   int limit,bar;
//--- indexation des éléments dans les tableaux comme dans les séries chronologiques 
   ArraySetAsSeries(close,true);
//--- calcul de l'indice de départ "limite" pour la boucle de recalcul des barres
   if(prev_calculated>rates_total || prev_calculated<=0) // vérification du premier démarrage du calcul d'un indicateur
     {
      limit=rates_total-min_rates_total-1;               // indice de départ pour le calcul de toutes les barres
      PrevStop=close[limit+1];
     }
   else limit=rates_total-prev_calculated;               // indice de départ pour le calcul des nouvelles barres
//---
   if(Mode==Mode_Price)
     {
      //--- boucle principale de calcul de l'indicateur
      for(bar=limit; bar>=0; bar--)
        {
         ExtMapBufferUp1[bar]=EMPTY_VALUE;
         ExtMapBufferDown1[bar]=EMPTY_VALUE;
         DeltaStop=dDeltaPrice;
         //---
         if(close[bar]==PrevStop) Stop=PrevStop;
         else
           {
            if(close[bar+1]<PrevStop && close[bar]<PrevStop) Stop=MathMin(PrevStop,close[bar]+DeltaStop);
            else
              {
               if(close[bar+1]>PrevStop && close[bar]>PrevStop) Stop=MathMax(PrevStop,close[bar]-DeltaStop);
               else
                 {
                  if(close[bar]>PrevStop) Stop=close[bar]-DeltaStop;
                  else Stop=close[bar]+DeltaStop;
                 }
              }
           }
         //---
         if(close[bar]>Stop) ExtMapBufferUp[bar]=Stop; else ExtMapBufferUp[bar]=EMPTY_VALUE;
         if(close[bar]<Stop) ExtMapBufferDown[bar]=Stop; else ExtMapBufferDown[bar]=EMPTY_VALUE;
         if(ExtMapBufferUp[bar+1]==EMPTY_VALUE && ExtMapBufferUp[bar]!=EMPTY_VALUE) ExtMapBufferUp1[bar]=ExtMapBufferUp[bar];
         if(ExtMapBufferDown[bar+1]==EMPTY_VALUE && ExtMapBufferDown[bar]!=EMPTY_VALUE) ExtMapBufferDown1[bar]=ExtMapBufferDown[bar];
         if(bar) PrevStop=Stop;
        }
     }
//---
   if(Mode==Mode_ATR)
     {
      //--- déclarations de variables locales 
      double ATR[];
      int to_copy,maxbar;
      //--- déclaration des variables de classe CMoving_Average du fichier SmoothAlgorithms.mqh 
      static CMoving_Average EMA;
      //--- indexation des éléments dans les tableaux comme dans les séries chronologiques 
      ArraySetAsSeries(ATR,true);
      to_copy=limit+1;
      if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
      maxbar=rates_total-min_rates_total-1;
      //--- boucle principale de calcul de l'indicateur
      for(bar=limit; bar>=0; bar--)
        {
         ExtMapBufferUp1[bar]=EMPTY_VALUE;
         ExtMapBufferDown1[bar]=EMPTY_VALUE;
         DeltaStop=atr_factor*EMA.EMASeries(maxbar,prev_calculated,rates_total,ima_range,ATR[bar],bar,true);
         //---
         if(close[bar]==PrevStop) Stop=PrevStop;
         else
           {
            if(close[bar+1]<PrevStop && close[bar]<PrevStop) Stop=MathMin(PrevStop,close[bar]+DeltaStop);
            else
              {
               if(close[bar+1]>PrevStop && close[bar]>PrevStop) Stop=MathMax(PrevStop,close[bar]-DeltaStop);
               else
                 {
                  if(close[bar]>PrevStop) Stop=close[bar]-DeltaStop;
                  else Stop=close[bar]+DeltaStop;
                 }
              }
           }
         //---
         if(close[bar]>Stop) ExtMapBufferUp[bar]=Stop; else ExtMapBufferUp[bar]=EMPTY_VALUE;
         if(close[bar]<Stop) ExtMapBufferDown[bar]=Stop; else ExtMapBufferDown[bar]=EMPTY_VALUE;
         //---
         if(ExtMapBufferUp[bar+1]==EMPTY_VALUE && ExtMapBufferUp[bar]!=EMPTY_VALUE) ExtMapBufferUp1[bar]=ExtMapBufferUp[bar];
         if(ExtMapBufferDown[bar+1]==EMPTY_VALUE && ExtMapBufferDown[bar]!=EMPTY_VALUE) ExtMapBufferDown1[bar]=ExtMapBufferDown[bar];
         //---
         if(bar) PrevStop=Stop;
        }
     }
//--- 
   return(rates_total);
  }

erreur csv

 

Celui-ci est très utile.

L'auteur est un taureau.