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?
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?
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_buffers4//--- 4 Parzellen werden verwendet#property indicator_plots4//+----------------------------------------------+//| Zeichnungsparameter des Bullenindikators |//+----------------------------------------------+//--- Zeichnen des Indikators 1 als Linie#property indicator_type1DRAW_LINE//--- blaue Farbe wird für die Indikatorlinie verwendet#property indicator_color1clrBlue//--- der Indikator 1 ist ein Punkt-Strich-Zeichen#property indicator_style1STYLE_DASHDOTDOT//--- Indikator 1 Zeilenbreite ist gleich 2#property indicator_width12//---- Anzeige des Indikatoretiketts#property indicator_label1"Upper VolatilityPivot"//+----------------------------------------------+//| Parameter zum Zeichnen eines bärischen Indikators |//+----------------------------------------------+//--- Zeichnen des Indikators 2 als Linie#property indicator_type2DRAW_LINE//--- Die Farbe HotPink wird für die Indikatorlinie verwendet#property indicator_color2clrHotPink//--- der Indikator 2 ist ein Punkt-Strich-Zeichen#property indicator_style2STYLE_DASHDOTDOT//--- Indikator 2 Linienbreite ist gleich 2#property indicator_width22//---- Anzeige des Indikatoretiketts#property indicator_label2"Lower VolatilityPivot"//+----------------------------------------------+//| Zeichnungsparameter des Bullenindikators |//+----------------------------------------------+//--- Zeichnen des Indikators 3 als Beschriftung#property indicator_type3DRAW_ARROW//--- DeepSkyBlue Farbe wird für den Indikator verwendet#property indicator_color3clrDeepSkyBlue//--- Indikator 3 Breite ist gleich 4#property indicator_width34//--- 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_type4DRAW_ARROW//--- rote Farbe wird für den Indikator verwendet#property indicator_color4clrRed//--- Indikator 4 Breite ist gleich 4#property indicator_width44//--- 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 |//+----------------------------------------------+inputuint atr_range=100;
inputuint ima_range=10;
inputdouble atr_factor=3;
input Mode_ Mode=Mode_ATR;
inputuint DeltaPrice=200;
inputint Shift=0; // Horizontale Verschiebung des Indikators in Balken//+----------------------------------------------+//--- Deklaration von dynamischen Arrays, die//--- werden als Indikatorpuffer verwendetdouble ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---double dDeltaPrice;
//--- Deklaration von Integer-Variablen für die Griffe der Indikatorenint ATR_Handle;
//--- Deklaration von Integer-Variablen für den Beginn der Datenberechnungint min_rates_total;
//+------------------------------------------------------------------+//| CMoving_Average Klassenbeschreibung|//+------------------------------------------------------------------+#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |//+------------------------------------------------------------------+ intOnInit()
{
//--- Abrufen des Handles des ATR-Indikatorsif(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 festlegenSetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA);
//---- Verschiebung des Indikators 1 in horizontaler Richtung durch ShiftPlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- Verschiebung des Beginns der Zeichnung des Indikators 1PlotIndexSetInteger(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 werdenPlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- dynamisches Array ExtMapBufferDown[] als Indikatorpuffer festlegenSetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- verschiebt den Indikator 2 horizontal mit ShiftPlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- Verschiebung des Ausgangspunkts für die Berechnung der Zeichnung des Indikators 2PlotIndexSetInteger(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 werdenPlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Das dynamische Array ExtMapBufferUp1[] als Indikatorpuffer festlegenSetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- Verschiebung des Indikators 1 in horizontaler Richtung durch ShiftPlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- Verschiebung des Beginns der Zeichnung des Indikators 3PlotIndexSetInteger(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 werdenPlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- AnzeigesymbolPlotIndexSetInteger(2,PLOT_ARROW,118);
//--- Das dynamische Array ExtMapBufferDown1[] als Indikatorpuffer festlegenSetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA);
//---- verschiebt den Indikator 2 horizontal mit ShiftPlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- Verschiebung des Beginns der Zeichnung des Indikators 4PlotIndexSetInteger(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 werdenPlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- AnzeigesymbolPlotIndexSetInteger(3,PLOT_ARROW,118);
//--- Erstellung des Namens, der in einem separaten Unterfenster und in einer Pop-up-Hilfe angezeigt werden sollIndicatorSetString(INDICATOR_SHORTNAME,"VolatilityPivot");
//--- Bestimmung der Genauigkeit der IndikatorwerteIndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- Initialisierung Endereturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Benutzerdefinierte Indikator-Iterationsfunktion|//+------------------------------------------------------------------+intOnCalculate(constint rates_total, // Anzahl der Balken in der Historie zum aktuellen Tickconstint prev_calculated,// Betrag der Historie in Balken zum vorherigen Tickconstdatetime &time[],
constdouble &open[],
constdouble& high[], // Preis-Array mit Höchstpreisen für die Berechnung des Indikatorsconstdouble& low[], // Preis-Array mit Mindestpreisen für die Berechnung des Indikatorsconstdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Prüfung, ob die Anzahl der Balken für die Berechnung ausreichtif((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- Deklarationen von lokalen Variablen double DeltaStop,Stop;
staticdouble 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 Balkenif(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 Indikatorsfor(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 Indikatorsfor(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);
}
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Suchen Sie die Datei in dem Ordner
C:\Benutzer\XXX\AppData\Roaming\MetaQuotes\Terminal\ZXVVDASDADDEDADS23132\MQL5\Files
Exportieren von Indikatorwerten:
Autor: NFTrader
Exportieren von Indikatorwerten:
Autor: NFTrader
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?
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
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).
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
Dieser Artikel ist sehr nützlich.
Der Autor ist Stier.