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

 
Alexey Viktorov:

Einer von ihnen bin ich. Und ich habe nie C# oder C++ studiert, und ich habe nie gewusst, was OOP ist.

Bitte verstehen Sie die einfache Wahrheit, dass mql5 sich von mql5 nur in der OrderSend()-Funktion und vielleicht ein paar weiteren Funktionen, an die ich mich nicht erinnere, unterscheidet. Ein weiterer wichtiger Unterschied ist die Richtung der Indizierung von Indikatorpuffern. Das Problem kann jedoch sehr schnell gelöst werden, aber man sollte sich an die neuen Funktionen gewöhnen. Und der Erhalt von Indikatorwerten bleibt derselbe. Ich habe das Buch von Kovalev nicht gelesen, ich weiß nicht, was darin steht, aber ich bezweifle, dass eine Lösung aus diesem Buch nicht mit dem aktualisierten MetaEditor mql4 geschrieben werden kann.

Cool. )))) Bei mir hat es nicht funktioniert, ich war mit prozeduralem Fortran und Basic überfordert. Es ist ein gutes Tutorial, gut strukturiert, klar genug und kann wirklich als Grundlage genommen werden, wenn die Ersteller natürlich Schüler brauchen. Leider gibt es keine anderen. Ich habe nicht genug von PLO, also muss ich Artikel lesen. Ich habe viele der Tutorials auf dem aktualisierten MT4-Terminal ausprobiert. Es gibt eine Reihe von Anmerkungen zu Datentypen, die nicht angegeben sind. Der Compiler hat auch bei der strengen Prüfung keine Fehler festgestellt.

 
Valeriy Yastremskiy:

Cool. )))) Mit prozeduralem Fortran und Basic habe ich das allerdings nicht hinbekommen. Gutes Tutorial, gut strukturiert, klar genug und könnte wirklich als Grundlage genommen werden, wenn die Schöpfer Studenten natürlich brauchen. Leider gibt es keine anderen. Ich habe nicht genug von PLO, also muss ich Artikel lesen. Ich habe viele der Tutorials auf dem aktualisierten MT4-Terminal ausprobiert. Es gibt eine Reihe von Anmerkungen zu Datentypen, die nicht angegeben sind. Der Compiler hat auch bei der strengen Prüfung keine Fehler festgestellt.

Hier sind meine Gedanken zu OOP. Und es würde nicht schaden, den ganzen Thread von Anfang an zu lesen.

ООП для школьников.
ООП для школьников.
  • 2019.10.04
  • www.mql5.com
======================================================================================================================== В этой теме будет нескольк...
 

Grüße. Bitte beachten Sie, dass nach der Auswahl einer Bestellung nicht klar ist, aus welchem Grund sich das Ticket ändert. Code:

      for(int i=OrdersTotal()-1; i>=0; i--){
         if(OrderSelect(i ,SELECT_BY_POS, MODE_TRADES)){
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP){
               Print("111  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
               temp=OrderTicket();
               if( OrderOpenPrice()>start_bid
               +((MathCeil( (Bid-start_bid)/(bs_distance*Point) )+bs_orders+Orders("bs")+1)*bs_distance*Point) ){
                  Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice()); 
                  if(!OrderDelete(OrderTicket(), clrBlack)){
                     Print("333 OrderDelete bs Bid ", Bid, "  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
                  }
               }
            }
         } 
      }

Es gibt zwei Aufträge auf dem Markt,BUYSTOP Ticket 10 undBUY Ticket 9 .

Protokoll:


 
Alexey Viktorov:

Hier sind meine Gedanken zu OOP. Und es würde nicht schaden, den ganzen Thread von Anfang an zu lesen.

Danke, ich stimme zu))))

 
Andrey Sokolov:

Grüße. Bitte beachten Sie, dass nach der Auswahl einer Bestellung nicht klar ist, aus welchem Grund sich das Ticket ändert. Code:

Es gibt zwei Aufträge auf dem Markt,BUYSTOP Ticket 10 undBUY Ticket 9 .

Protokoll:


Ich nehme an, dass eine der selbst geschriebenen Funktionen die Aufträge durchläuft (z. B.Orders("bs")) und daher OrderSelect() erneut ausführt. Wenn sie zur vorgestellten Schleife zurückkehrt, sind alle Daten für den letzten dort ausgewählten Auftrag gegeben.

 
Igor Zakharov:

Ich gehe davon aus, dass eine der selbst geschriebenen Funktionen die Aufträge durchläuft (z.B.Orders("bs")), und dementsprechend re OrderSelect(). zum Zeitpunkt der Rückkehr in die übergebene Schleife, sind alle Daten für den letzten dort ausgewählten Auftrag gegeben.

danke

 
Andrey Sokolov:

Grüße. Bitte beachten Sie, dass nach der Auswahl einer Bestellung nicht klar ist, aus welchem Grund sich das Ticket ändert. Code:

Es gibt zwei Aufträge auf dem Markt,BUYSTOP Ticket 10 undBUY Ticket 9 .

Protokoll:


Ihr Arbeitscode stimmt nicht mit dem veröffentlichten Code überein.

Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice());

Wo wird in diesem Code "OrderTicket()" gedruckt?

Achten Sie auf Aufrufe zu anderen Benutzerfunktionen, die eine Auftragsauswahl beinhalten können.

 
Alexey Viktorov:

Dann sind Sie bei uns genau richtig. Hier ist ein Tipp, wie man mql4 korrekt ausführt, angeleitet durch die neue mql4-Dokumentation.

Wenn Sie Schwierigkeiten haben, etwas zu schreiben, dann stellen Sie eine konkrete Frage, was Sie geschrieben haben und was Sie nicht geschafft haben. Denken Sie nur daran, dass niemand einen kilometerlangen Code mit einer unverständlichen Zeile lesen wird. Das werde ich sicher nicht.

Sie sind die Person, an die sich meine Frage richtete. Denn auf Ihre Bitte hin habe ich meinen Mql4-Code für den Tester kurz gemacht, um mein Problem deutlich zu machen. Aber leider hat Artem das nicht verstanden.

Ich wäre Ihnen sehr dankbar, wenn Sie den Code ändern könnten, um mein Problem zu lösen. Ich werde Ihnen noch einmal das Wesentliche sagen.

Wenn ich jeden Auftrag schließe (und es gibt viele offene Aufträge zur gleichen Zeit), muss ich einige Parameter eines geschlossenen Auftrags in Print () ausgeben. Ich habe gelernt, dies sehr erfolgreich zu tun. Aber..... gibt es ein Problem, das mein Verstand nicht lösen kann. Einige Aufträge werden zum selben Tick und zum selben Preis durch einen Stop geschlossen. In diesem Fall ignoriert das Programm den ersten geschlossenen Auftrag und druckt Print() nur den letzten geschlossenen Auftrag. Und nach dem ersten wird er nicht mehr gedruckt.

Q: .

Welche Sprachkonstruktion kann verwendet werden, um das Programm dazu zu bringen, in den oben beschriebenen Fällen () zu drucken, auch nachdem der erste Auftrag durch den Stop geschlossen wurde?

int H;
int L;
int TP;  
int start()
{
int Ht = OrdersHistoryTotal();
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                             
if (TP!=OrderTicket( ))
{
Print("---------------------------------------------------------------=",TimeToString(OrderOpenTime()) );
TP=OrderTicket( );
}

if (TimeCurrent()==1262598040)
if (H==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.6217,1.60919,"300",10 );
H=1;
}
if (TimeCurrent()==1262601140)
if (L==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.62199,1.61758,"300",10 );
L=1;
}
return(0);


 
ANDREY:

Sie sind die Person, an die sich meine Frage richtete. Auf Ihre Bitte hin habe ich meinen Mql4-Code für den Tester kurz gefasst, um mein Problem deutlich zu machen. Aber leider hat Artem das nicht verstanden.

Ich wäre Ihnen sehr dankbar, wenn Sie den Code ändern könnten, um mein Problem zu lösen. Ich werde Ihnen noch einmal das Wesentliche sagen.

Wenn ich jeden Auftrag schließe (und es sind viele gleichzeitig geöffnet), muss ich einige Parameter eines geschlossenen Auftrags ausdrucken (). Ich habe gelernt, dies sehr erfolgreich zu tun. Aber..... gibt es ein Problem, das mein Verstand nicht lösen kann. Einige Aufträge werden zum selben Tick und zum selben Preis durch einen Stop geschlossen. In diesem Fall ignoriert das Programm den ersten geschlossenen Auftrag und druckt Print() nur den letzten geschlossenen Auftrag. Und nach dem ersten wird er nicht mehr gedruckt.

Q: .

Welche sprachliche Konstruktion kann verwendet werden, um die Anwendung in den oben beschriebenen Fällen dazu zu bringen, Print () zu drucken, auch wenn der erste Auftrag bei Stop geschlossen wurde?


Was tut Ihr Code anderes, als zwei Verkaufspositionen zu öffnen, jede zu einer genau festgelegten Zeit, und den Zeitpunkt der letzten Positionsöffnung zu drucken, wenn dies erlaubt ist? Das war's. Mit uninitialisierten Variablen, die zu "Wunder" im Code Verhalten führen kann, und sehr, sehr alt start() Handler, die aus staubigen Regal mit Jahren von Spinnweben gezogen wurde, und auf dem Markt (eines Tages wollen Sie etwas zu verkaufen) mit alten Handler wird nie verpassen Validator - es wird sagen, dass das falsche Programm-Typ.

 
ANDREY:

Sie sind genau die Person, an die sich meine Frage richtete. Auf Ihre Bitte hin habe ich meinen Mql4-Code für den Tester kurz gefasst, um mein Problem deutlich zu machen. Aber leider hat Artem das nicht verstanden.

Ich wäre Ihnen sehr dankbar, wenn Sie den Code ändern könnten, um mein Problem zu lösen. Ich werde Ihnen noch einmal das Wesentliche sagen.

Wenn ich jeden Auftrag schließe (und es gibt eine Menge offener Aufträge zur gleichen Zeit), muss ich einige Parameter eines geschlossenen Auftrags in Print () ausgeben. Ich habe gelernt, dies sehr erfolgreich zu tun. Aber..... gibt es ein Problem, das mein Verstand nicht lösen kann. Einige Aufträge werden zum gleichen Tick und zum gleichen Preis durch Stop geschlossen. In diesem Fall ignoriert das Programm den ersten geschlossenen Auftrag und druckt Print() nur den letzten geschlossenen Auftrag. Und nach dem ersten wird er nicht mehr gedruckt.

Q: .

Welche Sprachstruktur kann verwendet werden, um das Programm dazu zu bringen, auch dann noch () zu drucken, wenn der erste Auftrag in den oben beschriebenen Fällen bei Stop geschlossen wurde?

Ich erinnere mich nicht mehr an Artems Antwort. Alle Codes in seinen Artikeln sind entweder multiterminal oder haben zwei Versionen, eine für mql5 und eine für mql4. Ich habe diese Versionen auf mql4 überprüft und alles funktioniert einwandfrei.

Ja, diese Artikel sind schwer zu verstehen, aber es lohnt sich, wenn man nicht älter ist als ich. Und ich bin für einen Programmierer obszön alt.

Die andere Möglichkeit ist einfacher, funktioniert aber viel langsamer. Schreiben Sie Auftragstickets in ein Array, und wählen Sie anhand dieses Arrays den Auftrag aus, prüfen Sie die Auftragsschlusszeit. Ist er größer als Null, bedeutet dies, dass er geschlossen ist. Wenn der Kommentar eines geschlossenen Auftrags die Buchstaben "sl" enthält, bedeutet dies, dass der Auftrag mit einem Stop geschlossen wurde. Wenn der Auftrag abgeschlossen ist, wird er aus dem Array gelöscht. Oder es wird, nachdem die Reihe abgeschlossen ist, mit den verbleibenden offenen Aufträgen aufgefüllt. Die Vorstellungskraft fliegt im Allgemeinen.

Welche Option Sie wählen, bleibt Ihnen überlassen. Und lesen Sie einige meiner Beiträge über Kovalevs Lehrbuch. Das Tutorial schlägt vor, int start() zu schreiben, während in der aktualisierten mql4, void OnTick() für Expert Advisors geschrieben werden sollte.

Indikatoren und Skripte entnehmen Sie bitte der Dokumentation. Übrigens ist es viel einfacher, Indikatoren in aktualisiertem mql4 zu schreiben, als es war, als Sergey dieses Tutorial schrieb.