Script: Export Indicator's Values - pagina 2

[Eliminato]  
Non funziona.
 
Non riesco ad esportare i valori della media mobile esponenziale a 50 periodi, qualcuno potrebbe aiutarmi?
 

Cercare il file nella cartella

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

 
Lo script è molto bello, ma mi piacerebbe di più se i dati potessero andare a excel direttamente, tramite un server RTD, per usare la funzione RDTR di excel. Avete in programma qualcosa del genere?
 
 
Jose Luis Perez Navarro:
Lo script è molto buono, ma mi piacerebbe di più se i dati potessero andare a excel direttamente, attraverso un server RTD, per utilizzare la funzione RDTR di excel. Avete in mente qualcosa del genere?
xm.cm reale14
 

Sì, funziona. Dovete guardare nel percorso ...MQL5\Files, lì c'è il file CSV.

Ho modificato per salvare i valori di OBV (volume reale) basta cambiare il codice qui sotto


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

Ciao,

Grazie per il lavoro. Purtroppo, quando eseguo lo script, non viene creato alcun file. Ho aggiornato lo script per scrivere in C:/temp/. Quando eseguo in debug vedo che il nome del file è corretto e non ottengo alcun errore, ma non c'è alcun file.

Qualche indizio?


Se si controlla l'handle, probabilmente restituisce -1 (handle non valido).


Print ( "fileHandle Value=", fileHandle);


Per qualche motivo a MT5 non piace che si salvino i file in luoghi diversi da quelli predefiniti. Basta lasciare il codice originale e scriverà nel percorso ...MQL5\Files

 

Complimenti per lo script, sto esportando i valori della bandiera volatilitypivot in csv, ma lo script esporta correttamente solo i valori alti, nelle righe in cui dovrebbero comparire i valori bassi compare un errore.

Qualcuno può aiutarmi per favore?

Script VolatilityPivot

#property indicator_chart_window
//--- 4 buffer sono utilizzati per il calcolo e il disegno dell'indicatore
#property indicator_buffers 4
//--- Vengono utilizzate 4 trame
#property indicator_plots   4
//+----------------------------------------------+
//| Parametri di disegno dell'indicatore rialzista
//+----------------------------------------------+
//--- disegnare l'indicatore 1 come una linea
#property indicator_type1   DRAW_LINE
//--- il colore blu è utilizzato per la linea dell'indicatore
#property indicator_color1  clrBlue
//--- la riga dell'indicatore 1 è un trattino
#property indicator_style1  STYLE_DASHDOTDOT
//--- la larghezza della linea dell'indicatore 1 è uguale a 2
#property indicator_width1  2
//---- visualizzazione dell'etichetta dell'indicatore
#property indicator_label1  "Upper VolatilityPivot"
//+----------------------------------------------+
//| Parametri di disegno di un indicatore ribassista |
//+----------------------------------------------+
//--- disegnare l'indicatore 2 come una linea
#property indicator_type2   DRAW_LINE
//--- Il colore HotPink viene utilizzato per la linea dell'indicatore
#property indicator_color2  clrHotPink
//--- la linea dell'indicatore 2 è una linea di trattini
#property indicator_style2  STYLE_DASHDOTDOT
//--- la larghezza della linea dell'indicatore 2 è uguale a 2
#property indicator_width2  2
//---- visualizzazione dell'etichetta dell'indicatore
#property indicator_label2  "Lower VolatilityPivot"
//+----------------------------------------------+
//| Parametri di disegno dell'indicatore rialzista
//+----------------------------------------------+
//--- disegnare l'indicatore 3 come etichetta
#property indicator_type3   DRAW_ARROW
//--- Il colore DeepSkyBlue è utilizzato per l'indicatore
#property indicator_color3  clrDeepSkyBlue
//--- la larghezza dell'indicatore 3 è uguale a 4
#property indicator_width3  4
//--- visualizzazione dell'etichetta dell'indicatore
#property indicator_label3  "Buy VolatilityPivot"
//+----------------------------------------------+
//| Parametri di disegno di un indicatore ribassista |
//+----------------------------------------------+
//--- disegnare l'indicatore 4 come etichetta
#property indicator_type4   DRAW_ARROW
//--- Il colore rosso è utilizzato per l'indicatore
#property indicator_color4  clrRed
//--- la larghezza dell'indicatore 4 è uguale a 4
#property indicator_width4  4
//--- visualizzazione dell'etichetta dell'indicatore
#property indicator_label4  "Sell VolatilityPivot"
//+----------------------------------------------+
//| dichiarazione delle costanti |
//+----------------------------------------------+
#define  RESET 0  // Una costante per restituire il comando di ricalcolo dell'indicatore al terminale
//+----------------------------------------------+
//| Dichiarazione di enumerazione |
//+----------------------------------------------+
enum Mode_
  {
   Mode_ATR=0,   //ATR
   Mode_Price    // Deviazione del prezzo
  };
//+----------------------------------------------+
//| Parametri di ingresso dell'indicatore |
//+----------------------------------------------+
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;          // Spostamento orizzontale dell'indicatore in barre
//+----------------------------------------------+
//--- dichiarazione di array dinamici che
//--- saranno utilizzati come buffer di indicatori
double ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---
double dDeltaPrice;
//--- dichiarazione delle variabili intere per le maniglie degli indicatori
int ATR_Handle;
//--- dichiarazione di variabili intere per l'inizio del calcolo dei dati
int min_rates_total;
//+------------------------------------------------------------------+
//| Descrizione della classe CMoving_Average|
//+------------------------------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'indicatore personalizzata |
//+------------------------------------------------------------------+ 
int OnInit()
  {
//--- Ottenere l'handle dell'indicatore 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;
     }
//--- impostare l'array dinamico ExtMapBufferUp[] come buffer indicatore
   SetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA);
//---- spostando l'indicatore 1 orizzontalmente di Shift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- spostamento dell'inizio del disegno dell'indicatore 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- indicizzazione degli elementi del buffer come serie temporali 
   ArraySetAsSeries(ExtMapBufferUp,true);
//--- impostazione dei valori degli indicatori che non saranno visibili sul grafico
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- impostare l'array dinamico ExtMapBufferDown[] come buffer indicatore
   SetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- spostando l'indicatore 2 in orizzontale con Maiusc.
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- spostamento del punto di partenza del calcolo del disegno dell'indicatore 2
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- indicizzazione degli elementi del buffer come serie temporali 
   ArraySetAsSeries(ExtMapBufferDown,true);
//--- impostazione dei valori degli indicatori che non saranno visibili sul grafico
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Impostare l'array dinamico ExtMapBufferUp1[] come buffer indicatore
   SetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- spostando l'indicatore 1 orizzontalmente di Shift
   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- spostamento dell'inizio del disegno dell'indicatore 3
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//--- indicizzazione degli elementi del buffer come serie temporali 
   ArraySetAsSeries(ExtMapBufferUp1,true);
//--- impostazione dei valori degli indicatori che non saranno visibili sul grafico
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- simbolo indicatore
   PlotIndexSetInteger(2,PLOT_ARROW,118);
//--- Impostare l'array dinamico ExtMapBufferDown1[] come buffer indicatore
   SetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA);
//---- spostando l'indicatore 2 in orizzontale con Maiusc.
   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- spostamento dell'inizio del disegno dell'indicatore 4
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//--- indicizzazione degli elementi del buffer come serie temporali 
   ArraySetAsSeries(ExtMapBufferDown1,true);
//--- impostazione dei valori degli indicatori che non saranno visibili sul grafico
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- simbolo indicatore
   PlotIndexSetInteger(3,PLOT_ARROW,118);
//--- creazione del nome da visualizzare in una sottofinestra separata e in un pop up di aiuto
   IndicatorSetString(INDICATOR_SHORTNAME,"VolatilityPivot");
//--- determinare l'accuratezza dei valori dell'indicatore
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- inizializzazione fine
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Funzione di iterazione dell'indicatore personalizzata|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,    // numero di barre nella storia al tick corrente
                const int prev_calculated,// quantità di storia in barre al tick precedente
                const datetime &time[],
                const double &open[],
                const double& high[],     // array dei prezzi massimi per il calcolo dell'indicatore
                const double& low[],      // array dei prezzi minimi per il calcolo dell'indicatore
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- verifica se il numero di barre è sufficiente per il calcolo
   if((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- dichiarazioni di variabili locali 
   double DeltaStop,Stop;
   static double PrevStop;
   int limit,bar;
//--- indicizzazione degli elementi negli array come nelle serie temporali 
   ArraySetAsSeries(close,true);
//--- calcolo dell'indice iniziale "limite" per il ciclo di ricalcolo delle barre
   if(prev_calculated>rates_total || prev_calculated<=0) // verifica del primo avvio del calcolo di un indicatore
     {
      limit=rates_total-min_rates_total-1;               // indice di partenza per il calcolo di tutte le barre
      PrevStop=close[limit+1];
     }
   else limit=rates_total-prev_calculated;               // indice di partenza per il calcolo delle nuove barre
//---
   if(Mode==Mode_Price)
     {
      //--- ciclo di calcolo dell'indicatore principale
      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)
     {
      //--- dichiarazioni di variabili locali 
      double ATR[];
      int to_copy,maxbar;
      //--- dichiarazione delle variabili della classe CMoving_Average dal file SmoothAlgorithms.mqh 
      static CMoving_Average EMA;
      //--- indicizzazione degli elementi negli array come nelle serie temporali 
      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;
      //--- ciclo di calcolo dell'indicatore principale
      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);
  }

errore csv

 

Questo è molto utile.

L'autore è un toro.