Hallo,
ich habe eine grundsatzfrage. Wenn ich mangels Dokumentaion keine Beschreibung der vom Indicator zur Verfügung gestellten Buffer/Rückgabewerte habe, kann ich dann im Zweifel IMMER einfach nach dem Datenfeld gehen.
Bsp. im Datenfeld und sind dann die Zuordnungen von 0 bis Ende fortlaufend?
Ah ok, danke, DRAW_TYPE ist in der Doku nicht verlinkt. Welche Art Schleife meinst du genau?
Würde das dann so in etwa ausshen
//Versuche solange Feld für Feld Daten zu Kopieren bis keine mehr geliefert werden int result; int buffer_pos=0; while(result!=-1 && !IsStopped()) { if (CopyBuffer(my_handle,buffer_pos,1,1,ZIELVARIABLE) < 0) {Print("ENDE > CopyBuffer error =",GetLastError()); break;} buffer_pos++; } //"Zielvariable" -> Soweit ich weiß, können keine Mehrdimensionalen Arrays hier verwendet werden, ich müsste also x-statische Variablen auf gut Glück definieren?
Kann ich den erwarten am Ende also immer zugriff auf alle im Datenfenster auch angezeigten werte zu bekommen oder kann es sein, dass mir manche verwert bleiben und die Suche danach Zeitverschwendung ist?
Ah ok, danke, DRAW_TYPE ist in der Doku nicht verlinkt. Welche Art Schleife meinst du genau?
Würde das dann so in etwa ausshen
Kann ich den erwarten am Ende also immer zugriff auf alle im Datenfenster auch angezeigten werte zu bekommen oder kann es sein, dass mir manche verwert bleiben und die Suche danach Zeitverschwendung ist?
Jo, da habe ich einen Denkfehler gehabt, das klappt natürlich nur im "eigenen" Indikator, nicht aber für "unbekannte".
Hier ist mein Gedanke zu einer Lösung für externe Indikatoren:
// Get handle to indicator indicator_shortname = ::MQLInfoString(MQL_PROGRAM_NAME); const int wnd_count = (int)ChartGetInteger(ChartID(), CHART_WINDOWS_TOTAL); for(int wndptr = NULL; (wndptr < wnd_count) && (indicator_handle == INVALID_HANDLE); wndptr++) { for(int ind_cnt = ChartIndicatorsTotal(ChartID(), wndptr) - 1; (ind_cnt >= NULL) && (indicator_handle == INVALID_HANDLE); ind_cnt--) { indicator_handle = (ChartIndicatorName(ChartID(), wndptr, ind_cnt) == indicator_shortname) ? ChartIndicatorGet(ChartID(), wndptr, indicator_shortname) : indicator_handle; } indicator_subwnd_id = (indicator_handle != INVALID_HANDLE) ? wndptr : indicator_subwnd_id; } printf("Indicator handle: %i", indicator_handle); ResetLastError(); // Get all buffers from an indicator bool err = false; int buffer_num = NULL; double tmp_value[]; while(!err) { err |= (!err) && ((CopyBuffer(indicator_handle, buffer_num, 0, 1, tmp_value) < 1) || (_LastError != ERR_SUCCESS)); printf("Indicator: %s; Buffer No: %i; Value: %f", indicator_shortname, (err) ? -1 : buffer_num, (err) ? NULL : tmp_value[0]); buffer_num++; } ResetLastError(); // Release the indicators handle IndicatorRelease(indicator_handle);
Dies alles müsste jetzt noch in einer weitere Schleife gepackt werden, um alle auf dem Chart befindlichen Indikatoren zu addressieren, statt eine Version von sich selbst auf dem aktuellen Chart zu suchen. - Das betrifft den ersten Abschnitt des Beispiels.
Allgemein sollte das allerdings eine Idee geben, wie du dich diesem Problem nähern kannst.
string StringCommentArray(double &array[]) { string str_comment = ""; int size = ArraySize(array); for(int i = 0; i < size; i++) { str_comment += StringFormat("\n array[%d] = %g", i, array[i]); } return(str_comment); }
Hey, lass dir mal die letzten zehn/zwanzig Werte über Comment ausgeben, dann siehst du was in dem Buffer drin ist. Mache Screenshots und poste sie hier, man kann wahrscheinlich die ArrowBuffers von den TradingSignalBuffern unterscheiden.
Dazu einen EA erstellen mit diesem Indikator in icustom und dann von allen Buffern die letzten zehn/zwanzig Werte mit Copybuffer auslesen. Die Funktion von oben unter OnTick kopieren und aus Comment innerhalb OnTick aufrufen:
Comment(StringCommentArray(IndicatorArray));
Der StringComment wird dann übersichtlich aus den Werten des als Parameter angegebenen Arrays zusammengestellt.
Die ArrowBuffers werden hauptsächlich aus Nullen bestehen, mit Preisen, da wo die Pfeile sind. Und die Long/Short-SignalBuffer haben möglicherweise nur Einsen und Nullen gespeichert.
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
ich habe eine grundsatzfrage. Wenn ich mangels Dokumentaion keine Beschreibung der vom Indicator zur Verfügung gestellten Buffer/Rückgabewerte habe, kann ich dann im Zweifel IMMER einfach nach dem Datenfeld gehen.
Bsp. im Datenfeld und sind dann die Zuordnungen von 0 bis Ende fortlaufend?