[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 131
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
hat win_idx das richtig verstanden?
win_ind erweist sich als richtig.
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); zeichnet im richtigen Fenster,
ObjectSet("max",OBJPROP_COLOR,Yellow); zeichnet in der richtigen Farbe,
ObjectSet("max",OBJPROP_WIDTH,0); zeichnet die richtige Linie,
definiert aber nicht den obersten Parameter in
double top=WindowPriceMax(win_idx);
und topBuffer[] ist leer.
Der Code
#property indicator_separate_window
#Eigenschaft indicator_buffers 3
#Eigenschaft indicator_color1 Lime
#Eigenschaft indicator_color2 Rot
//--- Puffer
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double topBuffer[];
bool initFinished=false; // Fügen Sie eine Variable hinzu, die den Status der Initialisierung speichert.
// false - die Initialisierung ist noch nicht erfolgt.
// wahr - wurde initialisiert
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int init()
{
//---- Indikatoren
SetIndexStyle(0,DRAW_LINE);
SetIndexPuffer(0,ExtMapPuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexPuffer(1,ExtMapPuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexPuffer(2,topPuffer);
IndicatorDigits(5);
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
Grenze;
if(gezählte_Balken>0)
gezählte_Balken--;
limit=Balken-gezählt_Balken;
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
if(initFinished==false)
{
IndikatorKurzname("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// Ermitteln der Nummer des Teilfensters unseres Indikators
if(win_idx<0)
{
// Wenn die Nummer des Unterfensters -1 ist, liegt ein Fehler vor.
Print("Fenster nicht gefunden");
zurück(0);
}
double top=WindowPriceMax(win_idx);
//Ermittelt den maximalen Wert der vertikalen Skala des angegebenen Unterfensters des aktuellen Diagramms
ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// Zeichnen einer horizontalen Linie in einem Unterfenster unseres Indikators
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
WindowRedraw();
// Das Fenster neu zeichnen, um die Linie zu sehen
initFinished=true;
// Zeichnung ist beendet
}
topPuffer[i]=top;
}
//----
zurück(0);
}
//+------------------------------------------------------------------+
win_ind erweist sich als richtig.
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); zeichnet im richtigen Fenster,
ObjectSet("max",OBJPROP_COLOR,Yellow); zeichnet in der richtigen Farbe,
ObjectSet("max",OBJPROP_WIDTH,0); zeichnet die richtige Linie,
definiert aber nicht den obersten Parameter in
double top=WindowPriceMax(win_idx);
und topBuffer[] ist leer.
Code
#property indicator_separate_window
#Eigenschaft indicator_buffers 3
#Eigenschaft indicator_color1 Lime
#Eigenschaft indicator_color2 Rot
//--- Puffer
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double topBuffer[];
bool initFinished=false; // Fügen Sie eine Variable hinzu, die den Status der Initialisierung speichert.
// false - die Initialisierung ist noch nicht erfolgt.
// wahr - wurde initialisiert
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int init()
{
//---- Indikatoren
SetIndexStyle(0,DRAW_LINE);
SetIndexPuffer(0,ExtMapPuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexPuffer(1,ExtMapPuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexPuffer(2,topPuffer);
IndicatorDigits(5);
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
Grenze;
if(gezählte_Balken>0)
gezählte_Balken--;
limit=Balken-gezählt_Balken;
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
if(initFinished==false)
{
IndikatorKurzname("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// Ermittlung der Nummer des Teilfensters unseres Indikators
if(win_idx<0)
{
// Wenn die Nummer des Unterfensters -1 ist, liegt ein Fehler vor.
Print("Fenster nicht gefunden");
zurück(0);
}
double top=WindowPriceMax(win_idx);
//Ermittelt den maximalen Wert der vertikalen Skala des angegebenen Unterfensters des aktuellen Diagramms
ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// Zeichnen einer horizontalen Linie in einem Unterfenster unseres Indikators
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
WindowRedraw();
// Das Fenster neu zeichnen, um die Linie zu sehen
initFinished=true;
// Zeichnung ist beendet
}
topPuffer[i]=top;
}
//----
zurück(0);
}
//+------------------------------------------------------------------+
Entschuldigung für die Einmischung.
topBuffer[i] hinter der Schleife und Zeichnung, versuchen Sie dies:
Hallo!
Bitte weisen Sie mir die richtige Richtung:
Ich erhalte N externe Variablen desselben Typs. Wie wählt man den Maximalwert aus, ohne den Code zu überladen - MathMax gibt den Maximalwert von zwei Werten zurück, aber wenn es, sagen wir, 20 ?
Oder wie kann man ein Array aus diesen Daten erstellen, das dann ArrayMaximum anwendet?
extern int A = 10;
extern int .......;
extern int N = 1253;
Vielen Dank im Voraus!
https://docs.mql4.com/ru/array/ArrayMaximum
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)Suche nach dem Element mit dem maximalen Wert. Die Funktion gibt die Position des maximalen Elements im Array zurück.
Parameter:
array[] - Numerisches Array, das durchsucht wird.
count - Anzahl der zu durchsuchenden Elemente.
Start - Der Startindex für die Suche.
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array);
Print("Maximalwert = ", num_array[maxValueIdx]);
Aber in Form von
int Max [N] = {A,.....,N};
wird das Array nicht erstellt.
Dabei sind: A,......N die angegebenen Variablen desselben Typs. Anzahl der Variablen = N
Beispiel für die Erstellung eines String-Arrays aus externen Variablen (Skript):
Beispiel für die Erstellung eines String-Arrays aus externen Variablen (Skript):
Ich danke Ihnen!
Es funktionierte, allerdings mit einer Korrektur: statt
int init(){sym[1]=sym1;............
Folgendes tun
int init(){sym[0]=sym1;.......
und dann werden alle Elemente gezählt.
Entschuldigung für die Störung.
topBuffer[i] hinter der Schleife und Zeichnung, versuchen Sie es auf diese Weise: