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

 
Сергей Таболин:

Wie ich, ein Dilettant, der die heilige Bedeutung aller Klassen nicht verstehen kann, und im Allgemeinen, warum OOP in unserem (Handels-) Geschäft benötigt wird, verstehe - Klassen sind alle geschriebenen (sowohl von MQ als auch von Gurus) Code-Bibliotheken, die entworfen wurden, um das Leben für "Nicht-Guru-Code-Schreiber" zu "erleichtern".

Das Problem ist, und das habe ich bereits gesagt, dass die Verwendung all dieser "Erleichterungen" das Schreiben von Code nicht einfacher macht. Denn Sie müssen immer alle Bestellungen, die Sie selbst abschicken, doppelt überprüfen! Denn praktisch jeder besteht darauf, dass ich auch einige "Transaktionen" prüfe. Dies gilt umso mehr, als diese "...Anteile" zufällig entstehen.

Ich gebe den Befehl, einen Nagel an dieser Stelle in einem solchen Winkel einzuschlagen. Das war's. Als nächstes erhalte ich eine Antwort - der Nagel ist eingeschlagen. Und dann bekomme ich eine Warnung, dass:

  • vielleicht hatte der Nagel die falsche Größe - das muss ich überprüfen.
  • Vielleicht ist es der falsche Winkel - das muss ichüberprüfen.
  • Vielleicht ist er an der falschen Stelle eingeschlagen - das mussüberprüft werden.

Warum brauche ich also solche Darsteller (Klassen)?

Ich übertreibe vielleicht ein wenig, aber das ändert nichts an der Sache.

Und warum? Denn alle Daten, die in Klassen verarbeitet werden, können so verändert werden, dass die Klasse nicht einmal merkt, dass sie verändert wurden.


Ich verstehe.

Ich stimme übrigens zu, dass OOP das Programmieren nicht einfacher macht.

OOP macht es einfacher, große Projekte zu verwalten, erschwert aber die Erstellung kleiner Projekte.

OOP ist für Anfänger schwieriger.

Die Verwendung von Klassen anderer Personen ist in gewisser Weise die Verwendung von Black Boxes.

 
Hallo. Könnten Sie mir bitte sagen, wo ich einen Fehler gemacht habe und warum der Indikator keine Pfeile anzeigt?
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window


double      Buy[];            // Буфер для покупок
double      Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9;
input int kijun_sen1  = 26;
input int senkou_span_b1 = 52;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//--- indicator buffers mapping
   SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int limit=rates_total-prev_calculated-1;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
      double tenkan_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
      double kijun_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
      double senkou_span_b = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
      double senkou_span_a = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
      double chikou_span = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
      if(tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if(tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn:
Hallo. Könnten Sie mir bitte sagen, wo ich einen Fehler gemacht habe und warum der Indikator keine Pfeile anzeigt?
#property indicator_buffers 2
 
MakarFX:

Ich habe die fehlende Zeile eingefügt, aber immer noch keine Pfeile!

 
jarikn:

Ich habe die fehlende Zeile eingefügt, aber immer noch keine Pfeile!

anzeigen

 
MakarFX:

anzeigen

//+------------------------------------------------------------------+
//|                                                     ishimocu.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2

//--- input parameters
double      Buy[];            // Буфер для покупок
double      Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9;
input int kijun_sen1  = 26;
input int senkou_span_b1 = 52;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//--- indicator buffers mapping
   SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  
   
 
  
    int limit=rates_total-prev_calculated-1;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
      double tenkan_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
      double kijun_sen = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
      double senkou_span_b = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
      double senkou_span_a = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
      double chikou_span = iIchimoku(NULL,0,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
      if(tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if(tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn:

Ich habe eine Zeichnung...


 
MakarFX:

Ich zeichne...


Verdammte Hölle. falsch ishimoku laufen )))) danke sehr

 
Alexey Viktorov:

Ja... Minimale Schrift und maximale Kopfschmerzen...

Was ist das genau? Vielleicht mache ich einfach etwas falsch.

 
Andrey Sokolov:

Was ist das genau? Mache ich etwas falsch?

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

OOP für Schuljungen.

Alexey Viktorov, 2019.10.04 16:01

Ich denke, dass mql nur eine sehr begrenzte Anzahl von Problemen hat, die durch OOP gelöst werden können. Die Sprache selbst, so scheint es mir, ist nichts anderes als OOP in C++ oder was auch immer. Und diese OOP wird in Form einer Standardbibliothek angeboten. Und zu diesem OOP wird vorgeschlagen, ein weiteres OOP hinzuzufügen, sonst würde ich nicht sagen. Und dann ein weiterer Schritt... Richtig gesagt Warlock, wenn auch wütend, aber wohlwollend, für meine Aufgaben OOP ist wie ein Hund Drehscheibe. Und was nützt es, eine Aufgabe zu definieren und sie dann mit OOP zu implementieren, wenn diese Aufgabe problemlos prozedural gelöst werden kann.

Nehmen Sie zum Beispiel .mqh von fxsaber`a, um Codes sowohl für MT5 als auch für MT4 zu schreiben. Vielleicht kann jemand es brauchen, aber wer? Für jemanden, der mql5 nicht beherrschen will oder kann. Oder nehmen Sie iCanvas von Nikolay ... ich habe seinen Nachnamen vergessen. Es scheint eine nützliche Bibliothek zu sein, aber es ist nicht einfach, sie zu verstehen, und es gibt keine Dokumentation, nicht einmal eine kleine Beschreibung. Das ist keine Beschwerde, sorry Nikolay, das ist eine Tatsache. Als ich also beschloss, ein grafisches Etikett zu schreiben, war es einfacher, es ohne Verweis auf die Standardbibliothek oder die Bibliothek von Nikolai zu schreiben.

Und dann können Sie den ganzen Thread lesen.
Grund der Beschwerde: