Das EOP für Schulkinder. - Seite 18

 
Alexey Viktorov:

Ja? Wird dadurch nicht ein neues, unabhängiges Objekt geschaffen?

Prüfen wir das jetzt - ich füge Zeilen wie diese ein:

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade(void) : m_async_mode(false),
   m_magic(0),
   m_deviation(10),
   m_type_filling(ORDER_FILLING_FOK),
   m_log_level(LOG_LEVEL_ERRORS)

  {
   SetMarginMode();
//--- initialize protected data
   ClearStructures();
//--- check programm mode
   if(MQL5InfoInteger(MQL5_TESTING))
      m_log_level=LOG_LEVEL_ALL;
   if(MQL5InfoInteger(MQL5_OPTIMIZATION))
      m_log_level=LOG_LEVEL_NO;
//---
   Print(__FUNCTION__,", magic ",IntegerToString(m_magic));
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CTrade::~CTrade(void)
  {
//---
   Print(__FUNCTION__,", magic ",IntegerToString(m_magic));
  }

wie auch

//+------------------------------------------------------------------+
//| Buy operation                                                    |
//+------------------------------------------------------------------+
bool CTrade::Buy(const double volume,const string symbol=NULL,double price=0.0,const double sl=0.0,const double tp=0.0,const string comment="")
  {
//---
   Print(__FUNCTION__,", magic ",IntegerToString(m_magic));


und ein Testskript:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   trade.SetExpertMagicNumber(123);
//---
   CTrade trade;
   trade.Buy(0.1);
  }
//+------------------------------------------------------------------+


Ergebnis:

2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::CTrade, magic 0
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::CTrade, magic 0
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::Buy, magic 0
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::OrderSend: instant buy 0.10 EURUSD at 1.09862 [auto trading disabled by client]
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::~CTrade, magic 0
2019.10.09 11:25:44.645 Test_ru (EURUSD,H1)     CTrade::~CTrade, magic 123


Ein Objekt wird erstellt, dann ein ZWEITES (es stellt sich heraus, es gibt keine Erholung - eine neue erstellt wird), BUY Position ist mit magischen "0" geöffnet - das heißt, das zweite Objekt "Handel" eröffnet es.

Dann sehen wir, dass die beiden Objekte in umgekehrter Reihenfolge zerstört werden: zuerst das zweite (mit der magischen "0") und dann das erste (mit der magischen "123").

 
Alexey Viktorov:

Ja? Wird dadurch nicht ein neues, unabhängiges Objekt geschaffen?

Ja, es wird eine neue Instanz der KlasseCTrade sein

undmehr noch, der CTrade-Destruktor wirdbeim Verlassen von void OnTick() aufgerufen und beim nächsten OnTick() wird der CTrade-Konstruktor erneut aufgerufen

 
Igor Makanu:

ja, es wird eine neue Instanz der KlasseCTrade erstellt

Wenn das void OnTick() verlassen wird, wird der CTrade-Destruktor aufgerufen, und das nächste OnTick() ruft wieder den CTrade-Konstruktor auf.

Ja, das habe ich sofort nach der Antwort von Artem erkannt.

Forum zum Thema Handel, automatische Handelssysteme und Strategietests

OOP für Schulkinder.

Artyom Trishkin, 2019.10.08 20:23

Es ist genau dasselbe wie bei den Variablen.

Und der Fokus:

#include <Trade\Trade.mqh>
CTrade trade;   // Объект trade в глобальной области программы

int OnInit()
{
 trade.SetExpertMagicNumber(123);
}

void OnTick()
{
 CTrade *trade_ptr=GetPointer(trade);  // Указатель на объект trade
 trade_ptr.Buy(0.1);
}

 
Alexey Viktorov:

Meiner Meinung nach gibt es bei mql nur eine sehr begrenzte Anzahl von Problemen, die durch OOP gelöst werden müssen. Die Sprache selbst scheint mir nicht mehr zu sein als ein OOP in C++ oder so. 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 eine Problemstellung und deren anschließende Realisierung mittels OOP, wenn dieses Problem ohne Probleme prozedural gelöst werden kann.

Hier zum Beispiel .mqh von fxsaber`a zu nehmen, um Codes für MT5 als auch für MT4 zu schreiben. Vielleicht braucht sie jemand, aber wer? Diejenigen, die mql5 nicht beherrschen wollen oder können. 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.

Eigentlich, Alexey, können Sie genügend Informationen über iCanvas auf der Beschreibungsseite in KB. https://www.mql5.com/ru/code/22164 finden. Sie müssen die Kommentare im Code sorgfältig lesen. Die Bedeutung aller Funktionen ergibt sich intuitiv aus ihren Namen.

   double            X(double bar);        // The X coordinate by the bar number. The bar number must be of type double, otherwise, the bar will be interpreted as time.
   double            X(datetime Time);     // The X coordinate by the time.
   double            Y(double Price);      // The Y coordinate by the price.
   double            Price(int y);         // Price by the Y coordinate
   double            Bar(int x);           // bar number by coordinate X                                                                      
   datetime          TimePos(int x);       // time by coordinate X 
   double            Close(int x);     
   double            Open(int x);    
   double            High(int x);     
   double            Low(int x);     
 
   void              Comm(string text);                 // Print comment
   void              TextPosition(int x,int y);         // Setting the XY position for comment output in pixels
   void              TextPosition(double x,double y);   // Setting the XY position for outputting comments as a percentage of the width and height of the window
   void              CurentFont(string FontName="Courier New",int size=18,int LineStep=20,color clr=clrDarkOrchid,double transp=1.0);  // Set font options for comment. LineStep - step between lines. transp - transparency from 0 to 1
   void              LineD(double x1,double y1,double x2,double y2,const uint clr); // тоже самое что и Line в CCanvas, только без глюков и с double координатами
   int               TextPosX;      // Position X for comment text
   int               TextPosY;      // Position Y for comment text
   int               StepTextLine;  // line spacing for comment
   uint              TextColor;     // Font color for comment

Aber Sie könnten Recht haben. Ich sollte ein Video aufnehmen, in dem ich einen einfachen, aber nützlichen Indikator mit iCanvas schreibe und einige Funktionen dieser Klasse visuell erkläre. Es gibt noch einige Feinheiten.

Ehrlich gesagt gefällt mir nicht, wie iCanvas im Moment geschrieben ist. Ich möchte ihn zerknüllen, in den Papierkorb werfen und in einem korrekteren Stil neu schreiben.

70 % des Codes in dieser Bibliothek dienen der Beschleunigung einiger regulärer Funktionen, die für die Handhabung von Koordinaten und den Datenzugriff erforderlich sind.

Wenn Sie also diese Klasse anwenden, werden die Grafiken schneller sein, als wenn Sie es "frontal" mit CCanvas machen. Das ist sein Hauptmerkmal und Vorteil. Und natürlich ist es wirklich einfacher, Diagramme, Zahlen und Kommentare zu erstellen.

Ich möchte noch hinzufügen, Alexey, dass der Zweck vieler Veröffentlichungen in CodeBase, einschließlich fxsaber und meiner Veröffentlichungen, ein selbstloses "einfach teilen - wer es braucht, wird es verstehen" ist. So oft ist es einfach nur lästig, Zeit für detaillierte Anleitungen aufzuwenden.

Insbesondere im Forum habe ich viele kurze und anschauliche Beispiele mit iCanvas veröffentlicht.
Hier zum Beispiel:
https://www.mql5.com/ru/code/25929

https://www.mql5.com/ru/code/25113

https://www.mql5.com/ru/code/25414

https://www.mql5.com/en/code/24798

https://www.mql5.com/ru/forum/227736/page41#comment_13259627

https://www.mql5.com/ru/forum/227736/page24#comment_12836622

https://www.mql5.com/en/forum/323629#comment_13442470

https://www.mql5.com/ru/forum/321704#comment_13131995

https://www.mql5.com/ru/forum/317257/page3#comment_12341593

https://www.mql5.com/en/forum/229521/page2#comment_10258148


Easy Canvas
Easy Canvas
  • www.mql5.com
Данная библиотека и класс iCanvas упростит написание программ с применением Canvas. Вот пример простого индикатора с применением данной библиотеки и его демонстрация. Обратите внимание, что в данном примере в теле индикатора отсутствует функция обработки событий OnChartEvent. Но она также может и присутствовать. Особенности данной библиотеки...
 
Nikolai Semko:

Eigentlich, Alexey, können Sie genügend Informationen über iCanvas auf der KB-Beschreibungsseite finden. https://www.mql5.com/ru/code/22164 Sie müssen die Kommentare im Code sorgfältig lesen. Die Bedeutung aller Funktionen ergibt sich intuitiv aus ihren Namen.

Nikolai, schenken Sie meinen Worten keine Beachtung. Es gibt so wenige Leute wie mich unter den Programmierern, wenn ich nicht der Einzige bin, dass es sich nicht lohnt, sie überhaupt zu beachten.

Um Kommentare im Code zu lernen, muss man zuerst Aglitsky lernen)).

Wenn ich einen dringenden Bedarf hätte, könnte ich mir die Zeit nehmen und alle Kommentare übersetzen, versuchen, die maschinelle Übersetzung zu verstehen und Korrekturen vorzunehmen. Aber das ist nicht nötig.

 
Alexey Viktorov:

Nehmen Sie zum Beispiel .mqh von fxsaber`a, um Codes sowohl für MT5 als auch für MT4 zu schreiben. Vielleicht braucht es jemand, aber schau mal, wer... Diejenigen, die mql5 nicht beherrschen wollen oder können.

Ich glaube, ich kenne MQL5 ziemlich gut, aber ich brauche eine Handelsbibliothek. Ich spreche nicht von MT4, sondern von einer Handelsbibliothek für MT5, mit der man bequem und schnell arbeiten kann. Und diese Bibliothek hat keine Bugs beim realen Handel.

Da eine solche Bibliothek nicht öffentlich verfügbar war (und ich nicht weiß, ob sie überhaupt existiert), musste ich eine eigene entwickeln. Zu diesem Zweck musste ich entscheiden, welche Art von Werkzeug in Form einer Reihevon Handelsfunktionen ich erfinden wollte. Ich habe mir das MT4-Set ausgeliehen, da es ein ziemlich gutes ist. Dadurch war es möglich, die Dokumentation für die Bibliothek nicht zu schreiben und sie zu studieren. Und andere Leckereien.

Die Kenntnis von MQL5 ist also bei den Nutzern manchmal sehr ausgeprägt.

Grund der Beschwerde: