[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

 
Ist win_idx der richtige Begriff?
 
alsu:
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);
}
//+------------------------------------------------------------------+

 
MK07:

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:

int start()
  {
   int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   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)
           { 
             int win_idx=WindowFind("MACD_max-min");
             // находим номер подокна нашего индикатора
      
             if(win_idx<0)
              {
               // если номер подокна равен -1, то возникла ошибка
                 Print("Окно не найдено");
                 return(0);
              }  
              
             double   top=WindowPriceMax(win_idx); 
              //находим максимальное значение вертикальной шкалы указанного подокна текущего графика
             topBuffer[i]=top;
             Comment( "\n"," top = ",top); 

             ObjectCreate("max",OBJ_HLINE,win_idx,0,0);
             // рисуем горизонтальную линию в подокне нашего индикатора
             ObjectSet("max", OBJPROP_PRICE1, top);  
             ObjectSet("max",OBJPROP_COLOR,Yellow);
             ObjectSet("max",OBJPROP_WIDTH,0);
 
             WindowRedraw();      
             // перерисовываем окно, чтобы увидить линиию   
      
             initFinished=true;
            // рисование закончено  
        
           } 
        
            
                
        
      }  
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
//Пробуйте с учетом мнения alsu. 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
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);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}return(0);}
//+------------------------------------------------------------------+
 
Guten Tag bitte helfen. Ich bin ein Neuling und installiert MetaFX und Expert Advisor auf der Demo alles funktioniert und will nicht auf das Original zu arbeiten will nicht nur stehen
 

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!

 
Roll:

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.
Beispiel:
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):

extern string sym1="GBPUSD";
extern string sym2="GBPJPY";
extern string sym3="EURUSD";
extern string sym4="EURJPY";
extern string sym5="AUDUSD";
extern string sym6="AUDJPY";
extern string sym7="NZDUSD";
extern string sym8="USDCAD";

string sym[8];
//+------------------------------------------------------------------+
int init(){sym[1]=sym1;sym[2]=sym2;sym[3]=sym3;sym[4]=sym4;
   sym[5]=sym5;sym[6]=sym6;sym[7]=sym7;sym[8]=sym8;return(0);}

int start(){Alert("символ  ",sym[1]);return(0);}
 
Roll:

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.

 
r772ra:

Entschuldigung für die Störung.

topBuffer[i] hinter der Schleife und Zeichnung, versuchen Sie es auf diese Weise:

Ihre Option funktioniert nicht, aber ein GROSSES DANKESCHÖN für Ihre Aufmerksamkeit, Ihre harte Arbeit und Ihr Verständnis für die Probleme anderer Menschen.