Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 827

 

Hallo.

Nehmen wir an, ich habe 2 Indikatoren, der erste hat 4 Puffer, der zweite hat 2. Ich lege sie in ein Diagramm und öffne das Datenfenster (CTRL+D). Die Liste enthält 6 Puffer von 0 bis 5. Wie kann ich den Wert von Puffer 5 aus dieser Liste in MQL lesen? Es ist nicht sinnvoll, iCustom mit dem gewünschten Indikator zu verwenden. Es ist bequemer, diese Liste zu verwenden. Ich weiß, dass sie es tun, aber wie?

 

Wenn man die Beispiele in der Hilfe studiert, wird die Objekterstellung immer mit einer Prüfung durchgeführt:

//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим кнопку 
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать кнопку! Код ошибки = ",GetLastError()); 
      return(false); 
     } 


Warum wird dies bei Objekten gemacht? Wie groß ist die Wahrscheinlichkeit, dass ein Objekt nicht erstellt wird?


Im Allgemeinen bin ich daran interessiert, wo ich über die Regeln des guten Benehmens in der mql-Programmierung lesen kann, zu wissen, in welchen Büschen die Harke liegt, beraten.

 
psyman:

Wenn man die Beispiele in der Hilfe studiert, wird die Objekterstellung immer mit einer Prüfung durchgeführt:


Warum wird dies bei Objekten gemacht? Wie hoch ist die Wahrscheinlichkeit, dass ein Objekt nicht erstellt werden kann?


Im Allgemeinen bin ich daran interessiert, wo ich über gute Manieren in mql Programmierung lesen kann, um zu wissen, wo die Fallstricke liegen, beraten mich.

Zum Beispiel existiert bereits ein Objekt mit diesem Namen.
Die Regeln der guten Form - sie sind für jede Sprache dieselben. Daten empfangen - prüfen, was man hat, ein Objekt erstellen, prüfen, was man erstellt hat und ob man es erstellt hat... Und so weiter.
 
Wie füllt man ein 4-dimensionales Array mit Werten des Formats int Mas[1][2][2][2], wie weist man jeder Zelle des Arrays einen Wert zu, haben wir eine solche Notation im Sinn, zum Beispiel ein 2-dimensionales Array int Arr[1][2]={3,4};, wie füllt man ein 4-dimensionales?
 
Artyom Trishkin:
Zum Beispiel existiert bereits ein Objekt mit diesem Namen.
Und die Regeln der Etikette - sie sind für jede Sprache gleich. Sie empfangen Daten - prüfen Sie, was Sie empfangen haben, Sie erstellen ein Objekt, prüfen Sie, was Sie erstellt haben und ob Sie es erstellt haben... Und so weiter.


Wenn ich eine Schaltfläche innerhalb einer Funktion erstelle, werde ich beschimpft

 return(false);


return' - 'void' Funktion gibt einen Wert zurück 112 16


Was sollte ich in diesem Fall tun?

 
Seric29:
Wie füllt man ein 4-dimensionales Array mit Werten des Formats int Mas[1][2][2][2], wie weist man jeder Zelle des Arrays einen Wert zu, in diesem Fall gibt es ein 2-dimensionales Array int Arr[1][2]={3,4}; wie füllt man ein 4-dimensionales?

Mehrdimensionale Arrays werden in der Regel in Schleifen mit den richtigen Werten gefüllt - das macht es schwieriger, einen Fehler zu machen, für ein vierdimensionales Array sollte es ungefähr so aussehen, aber ich könnte mich irren:

int A[2,2,4,3] = {
                     {/*----------- 3-e измерение = 4 ---------------------------*/ 
/*2-e измерение=2 */ {  {0,1,2/*4-e измерение = 3 */}, {0,1,2}, {0,1,2}, {0,1,2} },
                        { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }   
               
                     },
 // 1-е измерение = 2           
                     {  { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} },
                     {   {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }}
                  }; 

psyman:

Wenn ich eine Schaltfläche innerhalb einer Funktion erstelle, werde ich beschimpft

Die Funktion 'return' - 'void' gibt einen Wert zurück 112 16

Was sollte ich in diesem Fall tun?

Lesen Sie die Hilfeunter https://www.mql5.com/ru/docs/basis/function

Wenn Sie mehr Hilfe brauchen, sollten Sie ein beliebiges C++-Buch lesen. Das erste Kapitel sollte die Funktionen

 
psyman:


Wenn ich eine Schaltfläche innerhalb einer Funktion erstelle, erhalte ich eine Beschimpfung


return' - 'void' Funktion gibt einen Wert zurück breakeven_fish.mq5 112 16


Was ist in diesem Fall zu tun?

Wenn Sie einen bool-Wert aus einer Funktion zurückgeben, brauchen Sie den Funktionstyp nicht void zu machen, aber raten Sie mal, was es ist.
 

Genossinnen und Genossen - achten Sie auf den Indikator für Korrektheit. Es gibt eine Formel Wert = (Open[0]-SMA(P,n))/SMA(P,n))*100%.

Ich habe es in das Diagramm eingefügt - es berechnet und stellt alles dar. Ich fange an, einen Balken auf dem Taschenrechner zu überprüfen - sein Wert stimmt nicht mit dem gezeichneten überein...

Hier ein Beispiel - ich berechne 1,0178 für Open und 1,0182 für MA(13) mit der Formel ((1,0178-1,0182)/1,0182) * 100% - das Ergebnis auf dem Taschenrechner ist -0,0393. Und der MT4-Chart zeigt -0,0929. Ist es ein Fehler im Code oder berechnet der Rechner dort einige Werte nicht korrekt? Bitte um Hilfe. Ich füge den Indikator bei.

#property indicator_separate_window 
#property indicator_buffers 1       // Количество буферов
#property indicator_color1  Blue    // Цвет линии 0 буфера

#property  indicator_level1  1
#property  indicator_level2  -1
//--------------------------------------------------------------- 2 --
//---- indicator parameters 

extern int History    =5000;      // Колич.баров в расчётной истории
extern int Period_SMA =13; 
 

double
   Line_0[];                        // Инд. массив  ravi 
    
//--------------------------------------------------------------- 4 --

int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Line_0);        // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   
   IndicatorShortName("KRI");
//--------------------------------------------------------------- 5 --
   
   return(0);                          // Выход из спец. функции init()
  }

//--------------------------------------------------------------- 8 --
int start()                         // Специальная функция start()
  {
//--------------------------------------------------------------- 9 --
  
   double
   SMA;                   //  МА для расчета значений индикатора 
                                 // формyла (PRICE-SMA/SMA)*100); 
                             
   int
   i,                            // Индекс бара
   n,                            // Формальн. параметр(индекс бара)
   Counted_bars;                 // Количество просчитанных баров 

//-------------------------------------------------------------- 10 --
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
//-------------------------------------------------------------- 11 --
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      //-------------------------------------------------------- 12 --
        
      SMA=iMA(NULL,0,Period_SMA,0,MODE_SMA,PRICE_CLOSE,i); // Значение  SМА
     
      
      Line_0[i] =0; 
      if (SMA>0) Line_0[i] = ((Open[0]-SMA)/SMA)*100;    //  Индик. массив линии KPI
     
      //-------------------------------------------------------- 13 --
      i--;                          // Расчёт индекса следующего бара
      //-------------------------------------------------------- 14 --
     }
   return(0);                          // Выход из спец. ф-ии start()
  }
//-------------------------------------------------------------- 15 --
Dateien:
KRI.mq4  7 kb
 
Artyom Trishkin:
Wenn Sie einen Wert vom Typ bool aus einer Funktion zurückgeben, sollte der Funktionstyp nicht void sein, aber raten Sie mal, welcher es ist.

Was ist, wenn Sie Daten aus einer Funktion zurückgeben möchten?


Ist es möglich, eine Schleife durch die Positionen nur für ein bestimmtes Symbol ohne PositionsTotal jedes Mal zu verwenden?


Bisher ist das Einzige, was mir eingefallen ist, die Tickets in ein Array zu schreiben und mit ihnen separat zu arbeiten, aber vielleicht gibt es eine einfachere Möglichkeit?

 
psyman:

Was ist, wenn Sie Daten aus einer Funktion zurückgeben möchten?


Ist es möglich, eine Schleife durch die Positionen nur für ein bestimmtes Symbol ohne PositionsTotal jedes Mal zu verwenden?


Bisher ist das Einzige, was mir eingefallen ist, die Tickets in ein Array zu schreiben und mit ihnen separat zu arbeiten, aber vielleicht gibt es eine einfachere Möglichkeit?

Es ist nicht klar, was am Ende gebraucht wird - einige unzusammenhängende Gedanken.