Skripte: Export Indicator's Values - Seite 2

[Gelöscht]  
Funktioniert nicht.
 
Ich kann die Werte des gleitenden 50-Perioden-Exponentialdurchschnitts nicht exportieren. Kann mir jemand helfen?
 

Suchen Sie die Datei in dem Ordner

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

 
Automated-Trading:

Exportieren von Indikatorwerten:

Autor: NFTrader

Das Skript ist sehr schön, aber ich würde mir mehr wünschen, wenn die Daten direkt über einen RTD-Server an Excel gehen könnten, um die RDTR-Funktion von Excel zu nutzen. Haben Sie so etwas in Planung?
 
Automated-Trading:

Exportieren von Indikatorwerten:

Autor: NFTrader

 
Jose Luis Perez Navarro:
Das Skript ist sehr gut, aber ich würde mir mehr wünschen, wenn die Daten direkt über einen RTD-Server an Excel gehen könnten, um die RDTR-Funktion von Excel zu nutzen. Haben Sie so etwas im Sinn?
xm.cm real14
 

Ja, es funktioniert. Sie müssen sich den Pfad ...MQL5\Files ansehen, dort befindet sich die CSV-Datei.

Ich habe den Code unten geändert, um Werte von OBV (reales Volumen) zu speichern


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

Hallo!

Vielen Dank für den Auftrag. Leider wird keine Datei erstellt, wenn ich das Skript ausführe. Ich habe das Skript aktualisiert, um in C:/temp/ zu schreiben. Wenn ich das Skript im Debug-Modus ausführe, kann ich sehen, dass der Dateiname korrekt ist und ich keine Fehlermeldung erhalte, aber es gibt keine Datei.

Hat jemand einen Hinweis?


Wenn Sie das Handle überprüfen, wird es wahrscheinlich -1 zurückgeben (ungültiges Handle).


Print ( "fileHandle Value=", fileHandle);


Aus irgendeinem Grund mag MT5 es nicht, wenn Sie Dateien an anderen Orten als den Standardorten speichern. Lassen Sie einfach als Original-Code und es wird in ...MQL5\Files Pfad schreiben

 

Herzlichen Glückwunsch zum Skript, ich exportiere die Werte des Volatilitypivot-Flags in csv, aber das Skript exportiert nur die hohen Werte korrekt, in den Zeilen, die die niedrigen Werte erscheinen sollten, erscheint ein Fehler.

Kann mir bitte jemand helfen?

VolatilityPivot-Skript

#property indicator_chart_window
//--- 4 Puffer werden für die Berechnung und das Zeichnen des Indikators verwendet
#property indicator_buffers 4
//--- 4 Parzellen werden verwendet
#property indicator_plots   4
//+----------------------------------------------+
//| Zeichnungsparameter des Bullenindikators |
//+----------------------------------------------+
//--- Zeichnen des Indikators 1 als Linie
#property indicator_type1   DRAW_LINE
//--- blaue Farbe wird für die Indikatorlinie verwendet
#property indicator_color1  clrBlue
//--- der Indikator 1 ist ein Punkt-Strich-Zeichen
#property indicator_style1  STYLE_DASHDOTDOT
//--- Indikator 1 Zeilenbreite ist gleich 2
#property indicator_width1  2
//---- Anzeige des Indikatoretiketts
#property indicator_label1  "Upper VolatilityPivot"
//+----------------------------------------------+
//| Parameter zum Zeichnen eines bärischen Indikators |
//+----------------------------------------------+
//--- Zeichnen des Indikators 2 als Linie
#property indicator_type2   DRAW_LINE
//--- Die Farbe HotPink wird für die Indikatorlinie verwendet
#property indicator_color2  clrHotPink
//--- der Indikator 2 ist ein Punkt-Strich-Zeichen
#property indicator_style2  STYLE_DASHDOTDOT
//--- Indikator 2 Linienbreite ist gleich 2
#property indicator_width2  2
//---- Anzeige des Indikatoretiketts
#property indicator_label2  "Lower VolatilityPivot"
//+----------------------------------------------+
//| Zeichnungsparameter des Bullenindikators |
//+----------------------------------------------+
//--- Zeichnen des Indikators 3 als Beschriftung
#property indicator_type3   DRAW_ARROW
//--- DeepSkyBlue Farbe wird für den Indikator verwendet
#property indicator_color3  clrDeepSkyBlue
//--- Indikator 3 Breite ist gleich 4
#property indicator_width3  4
//--- Anzeige der Beschriftung des Indikators
#property indicator_label3  "Buy VolatilityPivot"
//+----------------------------------------------+
//| Parameter zum Zeichnen eines bärischen Indikators |
//+----------------------------------------------+
//--- Zeichnen des Indikators 4 als Beschriftung
#property indicator_type4   DRAW_ARROW
//--- rote Farbe wird für den Indikator verwendet
#property indicator_color4  clrRed
//--- Indikator 4 Breite ist gleich 4
#property indicator_width4  4
//--- Anzeige der Beschriftung des Indikators
#property indicator_label4  "Sell VolatilityPivot"
//+----------------------------------------------+
//| Deklaration von Konstanten |
//+----------------------------------------------+
#define  RESET 0  // Eine Konstante für die Rückgabe des Befehls zur Neuberechnung des Indikators an das Terminal
//+----------------------------------------------+
//| Deklaration der Aufzählung |
//+----------------------------------------------+
enum Mode_
  {
   Mode_ATR=0,   //ATR
   Mode_Price    //Preisabweichung
  };
//+----------------------------------------------+
//| Indikator-Eingabeparameter |
//+----------------------------------------------+
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;          // Horizontale Verschiebung des Indikators in Balken
//+----------------------------------------------+
//--- Deklaration von dynamischen Arrays, die
//--- werden als Indikatorpuffer verwendet
double ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---
double dDeltaPrice;
//--- Deklaration von Integer-Variablen für die Griffe der Indikatoren
int ATR_Handle;
//--- Deklaration von Integer-Variablen für den Beginn der Datenberechnung
int min_rates_total;
//+------------------------------------------------------------------+
//| CMoving_Average Klassenbeschreibung|
//+------------------------------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+ 
int OnInit()
  {
//--- Abrufen des Handles des ATR-Indikators
   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;
     }
//--- dynamisches Array ExtMapBufferUp[] als Indikatorpuffer festlegen
   SetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA);
//---- Verschiebung des Indikators 1 in horizontaler Richtung durch Shift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- Verschiebung des Beginns der Zeichnung des Indikators 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- Indizierung von Pufferelementen als Zeitreihen 
   ArraySetAsSeries(ExtMapBufferUp,true);
//--- Einstellung der Indikatorwerte, die in einem Diagramm nicht sichtbar sein werden
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- dynamisches Array ExtMapBufferDown[] als Indikatorpuffer festlegen
   SetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- verschiebt den Indikator 2 horizontal mit Shift
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- Verschiebung des Ausgangspunkts für die Berechnung der Zeichnung des Indikators 2
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- Indizierung von Pufferelementen als Zeitreihen 
   ArraySetAsSeries(ExtMapBufferDown,true);
//--- Einstellung der Indikatorwerte, die in einem Diagramm nicht sichtbar sein werden
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Das dynamische Array ExtMapBufferUp1[] als Indikatorpuffer festlegen
   SetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- Verschiebung des Indikators 1 in horizontaler Richtung durch Shift
   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- Verschiebung des Beginns der Zeichnung des Indikators 3
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//--- Indizierung von Pufferelementen als Zeitreihen 
   ArraySetAsSeries(ExtMapBufferUp1,true);
//--- Einstellung der Indikatorwerte, die in einem Diagramm nicht sichtbar sein werden
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Anzeigesymbol
   PlotIndexSetInteger(2,PLOT_ARROW,118);
//--- Das dynamische Array ExtMapBufferDown1[] als Indikatorpuffer festlegen
   SetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA);
//---- verschiebt den Indikator 2 horizontal mit Shift
   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- Verschiebung des Beginns der Zeichnung des Indikators 4
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//--- Indizierung von Pufferelementen als Zeitreihen 
   ArraySetAsSeries(ExtMapBufferDown1,true);
//--- Einstellung der Indikatorwerte, die in einem Diagramm nicht sichtbar sein werden
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Anzeigesymbol
   PlotIndexSetInteger(3,PLOT_ARROW,118);
//--- Erstellung des Namens, der in einem separaten Unterfenster und in einer Pop-up-Hilfe angezeigt werden soll
   IndicatorSetString(INDICATOR_SHORTNAME,"VolatilityPivot");
//--- Bestimmung der Genauigkeit der Indikatorwerte
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- Initialisierung Ende
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,    // Anzahl der Balken in der Historie zum aktuellen Tick
                const int prev_calculated,// Betrag der Historie in Balken zum vorherigen Tick
                const datetime &time[],
                const double &open[],
                const double& high[],     // Preis-Array mit Höchstpreisen für die Berechnung des Indikators
                const double& low[],      // Preis-Array mit Mindestpreisen für die Berechnung des Indikators
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- Prüfung, ob die Anzahl der Balken für die Berechnung ausreicht
   if((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- Deklarationen von lokalen Variablen 
   double DeltaStop,Stop;
   static double PrevStop;
   int limit,bar;
//--- Indizierung von Elementen in Arrays wie in Zeitreihen 
   ArraySetAsSeries(close,true);
//--- Berechnung des "Grenzwert"-Startindexes für die Schleife zur Neuberechnung der Balken
   if(prev_calculated>rates_total || prev_calculated<=0) // Prüfung auf den ersten Berechnungsbeginn eines Indikators
     {
      limit=rates_total-min_rates_total-1;               // Startindex für die Berechnung aller Balken
      PrevStop=close[limit+1];
     }
   else limit=rates_total-prev_calculated;               // Startindex für die Berechnung der neuen Balken
//---
   if(Mode==Mode_Price)
     {
      //--- Hauptschleife zur Berechnung des Indikators
      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)
     {
      //--- Deklarationen von lokalen Variablen 
      double ATR[];
      int to_copy,maxbar;
      //--- Deklaration der Variablen der Klasse CMoving_Average aus der Datei SmoothAlgorithms.mqh 
      static CMoving_Average EMA;
      //--- Indizierung von Elementen in Arrays wie in Zeitreihen 
      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;
      //--- Hauptschleife zur Berechnung des Indikators
      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);
  }

csv-Fehler

 

Dieser Artikel ist sehr nützlich.

Der Autor ist Stier.