Brauche Hilfe von MT4-Entwicklern und Programmierern - Seite 3

 
Ein fixierter Experte ist ein mauvais ton.
 
Integer:

2. Auf halbem Weg durch das neue Datenblatt. Zuvor öffnete sich das Eigenschaftsfenster des Expert Advisors in der Schleife nicht. Jetzt ist das der Fall, und es wäre gut, wenn es jetzt eine Reaktion auf Parameteränderungen gäbe. Oder das Eigenschaftsfenster könnte geschlossen werden, um Verwirrung für den Benutzer zu vermeiden.

Ganz genau! Das ist es, was ich zu sagen versuche, aber niemand hört es.

Der "Service Desk" weigerte sich, soweit ich weiß, hat er die Situation überhaupt nicht verstanden. Hier ein Auszug aus der Anforderungsnachricht:

Warum sollten Sie einem Programmierer vorschreiben, was er tun darf und was nicht? Die Sendung wurde ohne Fehler übertragen. Die Ausführung verläuft ohne Fehler. Der Benutzer sieht "A=5" auf der Registerkarte Eingabeparameter, und das System gibt "A=1" an den Expert Advisor. Ob Sie die start()- oder die while()-Schleife verwenden, ist eine Frage des Geschmacks. Die Schleife ist nicht unendlich, wie Sie behaupten. Wenn Sie den Text des Expert Advisors aufmerksam verfolgt haben, heißt es nicht while(true), sondern while(!IsStopped()&&IsConnected()&&IsExpertEnabled()). In den früheren MT4-Versionen konnte der Benutzer die Werte der Eingabeparameter während der Ausführung der Funktion Sleep() nicht ändern. In dem neuen Gebäude gibt es diese Barriere nicht mehr. Also entweder das Verbot der Änderung von Eingabeparametern in dieser Situation aufheben oder dafür sorgen, dass sie nicht nur auf der Registerkarte"EINGABEN", sondern auch auf dem Zähler geändert werden. Das war's.


Integer:

1. Wenn ich MetaTrader4 Terminal installiert, im Installationsfenster gibt es eine Einladung an das Forum, dieses Forum und nicht ein anderes.

Ich bitte um Entschuldigung. Aber ich habe festgestellt, dass die Grenze zwischen MT4 und MT5 allmählich verschwindet. Und über mein Profil auf "www.mql5.com" habe ich mich bei "servicedesk" beworben (hoffentlich zum ersten und letzten Mal). Ich füllte ein Formular aus, das Ihnen die Möglichkeit gibt, die Version des Terminals zu wählen - ich wählte "MT4".

Hier ist ein weiterer Auszug aus einer bereits abgeschlossenen Bestellung (ich weiß nicht, ob sie die Bestellung lesen, nachdem sie sie eilig selbst abgeschlossen haben?) (natürlich lustig, aber mir fällt nur ein Sprichwort über das Fangen von Flöhen ein).

Warum sieht der Benutzer in einem solchen Fall seine neuen Werte deutlich? Der EA kann zwar in vollem Umfang funktionieren, aber diese neuen Werte sind eine Fiktion, und sie stehen dem EA nicht zur Verfügung. Die Funktion RefreshRates() ermöglicht es dem EA, die aktuellen Kurse in JEDEM Zyklus abzurufen. Warum nicht eine ähnliche Funktion zum Abrufen aktualisierter Werte von Eingabeparametern bereitstellen oder die vorhandene Funktion RefreshRates() um diese Funktion ergänzen?

Durch zweimaliges Drücken der Schaltfläche "AutoTrading" (um die EAs aus- und einzuschalten) wird der Zyklus unterbrochen, woraufhin die neuen Werte verfügbar werden, allerdings erst nach dem Tick (neuer Kurs) auf dem GRAFIK-SYMBOL. Und wir wissen nicht, wann er kommen wird, und dem Expert Advisor ist es nicht verboten, auch andere Symbole zu verarbeiten, und der Benutzer braucht diesen Zeitverlust nicht. Wir bekommen also so etwas wie "Zurück in die Zukunft". Es wurde ein neuer MT4 veröffentlicht. Sie ist moderner und schneller. Sie sagen, dass es sich auf dem Bildschirm sehr gut verlangsamt, wenn man auf die Notierungen EINES Symbols wartet, während die Notierungen anderer Symbole in vollem Gange sind. Das heißt, jetzt sage ich meinen Kunden: Ändern Sie die Parameter, drücken Sie zweimal auf die Schaltfläche "Expert Advisors", um sie aus- und einzuschalten, und warten Sie am Meer - eines Tages wird es "ticken".

Ich habe noch nie um Hilfe gebeten und werde es hoffentlich auch in Zukunft nicht tun. Früher oder später werde ich sowieso einen Weg finden, den "Haken" zu umgehen. Das war schon immer so, solange es MT4 und natürlich seinen"Strategietester" gibt, über den ich jetzt lieber nicht sprechen möchte. Aber natürlich ist jede Ungenauigkeit in Echtzeit eine sehr ernste Sache, vor allem für einen Nutzer, der sein Geld aufs Spiel setzt, manchmal sogar ziemlich hohe Summen. Da ich keinen anderen effizienten Weg gesehen habe, um diesen Fehler zu umgehen, habe ich mich an den Kundendienst gewandt, und um ehrlich zu sein, war ich etwas skeptisch, ob sie sich überhaupt weigern würden, das Problem zu beheben. Na ja...

Es ist schon schlimm genug, dass alles "trotz" statt "dank" getan werden muss.

 
Integer:
Wex, benutze einen Timer, du kannst jetzt ohne Schleifen auskommen.

Sie haben natürlich recht, neue EAs können sehr unterschiedlich programmiert werden. Aber es gibt bereits viele gut programmierte EAs. Und die Kunden verstehen nicht, warum die Sache, für die sie Geld bezahlt haben, plötzlich nicht mehr richtig funktioniert.

Das heißt, es gibt einige sehr unangenehme Tendenz der Inkompatibilität im Prinzip von bereits entwickelten EAs (Expert Advisors oder Skripte, auch Indikatoren) mit neuen Builds von MT4.

Und ich habe beim Programmieren aus Prinzip nichts verwendet, was nicht dem Standard entspricht. Mein EA basiert ausschließlich auf den Eigenschaften und Funktionen von MQL4 BOMB. Ich wurde bereits mit vielen Indikatoren und EAs überschwemmt (meist komplexe oder so genannte "Multicurrency"-Indikatoren), die entweder überhaupt nicht auf neuen MT4-Builds funktionieren, oder scheinbar gut funktionieren, aber Situationen wie in meinem Beispiel auftreten. (Was die Übersetzungsfehler anbelangt, so sind mir zum Beispiel Variablen mit dem Namen "neu" aufgefallen - ich verstehe - wegen der Erweiterung der Liste der reservierten Wörter).

 

Man ist zu faul, die Dokumentation zu lesen. Der Rest zeigt, dass sie sehr clever sind... Puh!

Fangen Sie den Code :)

Ich weiß immer noch nicht, was Ihr Problem ist.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright     "Grizzly_v :)"
#property link          "http://www.mql5.com"
//+------------------------------------------------------------------+
extern int      A1=      1;
extern int      A2=      2;
int      C1,C2;
//+------------------------------------------------------------------+
int OnInit(){
   C1=A1;
   C2=A2;
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   Comment("");
}
//+------------------------------------------------------------------+
void OnTick(){
   string   t;

   t=TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
   Comment(t+"\nA1="+A1+"   A2="+A2+"\nC1="+C1+"   C2="+C2);
}
//+------------------------------------------------------------------+
 
grizzly_v:

Man ist zu faul, die Dokumentation zu lesen. Der Rest zeigt, dass sie sehr clever sind... Puh!

Fangen Sie den Code :)

Ich weiß immer noch nicht, was Ihr Problem ist.

Das Problem ist, dass der Expert Advisor in einer Schleife läuft, so dass das OnTick-Ereignis darin nicht auftritt und er die geänderten Parameter nicht sieht.
 

Nun, das war's dann. Derselbe Zyklus, nur durch die neuen Funktionen.

  extern int      A1=      1;
  extern int      A2=      2;
         int      C1,C2;
//+------------------------------------------------------------------+
int OnInit(){
   C1=A1;
   C2=A2;
   EventSetMillisecondTimer(100);
   return(0);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer(){
   string   t;
   RefreshRates();
   t=TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
   Comment(t+"\nA1="+A1+"   A2="+A2+"\nC1="+C1+"   C2="+C2);
}
//+------------------------------------------------------------------+
 
stringo:

1. Werfen Sie einen Blick auf das Profil von Wex. Dies ist ein professioneller MQL4-Entwickler. Sich dumm stellen. Oder Trolling. Ich weiß nicht, warum.

2. wir müssen darüber nachdenken. Sie können die Schleife nicht gewaltsam unterbrechen, wenn neue Parameter hinzukommen. So etwas wie die IsNewParameter-Funktion, die vom Programmierer selbst in der Endlosschleife aufgerufen werden sollte

1. ich habe auch die Seltsamkeiten bemerkt...

2. das wäre sehr schön.

 
stringo:

1. Werfen Sie einen Blick auf das Profil von Wex. Dies ist ein professioneller MQL4-Entwickler. Sich dumm stellen. Oder Trolling. Es ist nicht klar, warum.

2. Das ist der Punkt, an dem wir nachdenken müssen. Wir können die Schleife nicht zwangsweise unterbrechen, wenn neue Parameter eintreffen. So etwas wie die IsNewParameter-Funktion, die vom Programmierer selbst in der Endlosschleife aufgerufen werden sollte

Stringo.

Die Variable scheint einfach nicht in eine solche Endlosschleife zu geraten. Die init-Methode funktioniert nicht, wenn Werte geändert werden. Und externe Variablen werden nur über init übergeben. Die Funktionen OnTick und OnTimer können jetzt in Expert Advisors verwendet werden,

OnChartEvent. Soweit ich mich erinnere, wurde die Startfunktion im Expert Advisor bei einem neuen Tick ausgelöst.

Auszug aus der Dokumentation:

Das Programm empfängt nur Ereignisse von der Karte, auf der es gestartet wurde. Alle Ereignisse werden nacheinander in der Reihenfolge ihres Eingangs verarbeitet. Befindet sich bereits ein Ereignis NewTick in der Warteschlange oder ist dieses Ereignis im Verarbeitungsstatus, wird ein neues Ereignis NewTick nicht in die Warteschlange des mql4-Programms gestellt. Wenn die Warteschlange des mql4-Programms bereits ein ChartEvent-Ereignis enthält oder ein solches Ereignis gerade verarbeitet wird, wird ein neues Ereignis dieses Typs nicht in die Warteschlange gestellt. Timer-Ereignisse werden nach demselben Schema verarbeitet - wenn es bereits ein Timer-Ereignis in der Warteschlange gibt, wird ein neues Timer-Ereignis nicht in die Warteschlange gestellt.

Da die Startfunktion eine unendliche Schleife durchläuft, wird die Funktion nicht gestartet, wenn ein neues Ereignis eintritt, und die darin enthaltenen Variablen werden nicht aktualisiert.

Es gibt nur einen Ausweg: die neuen Funktionen der Sprache nutzen und sich nicht um die alten Funktionen kümmern.

События клиентского терминала - Документация на MQL4
  • docs.mql4.com
События клиентского терминала - Документация на MQL4
 
artmedia70:

1. ich habe die Merkwürdigkeit auch bemerkt...

Und im Auge eines anderen kann man immer auch einen Strohhalm sehen. Und je mehr Balken man im Auge hat, desto kleiner ist der Strohhalm, den man erkennen kann.

In jedem Unternehmen zählt das Ergebnis, nicht der Prozess. Das Ergebnis ist folgendes: Schwarz wird als weiß dargestellt - buchstäblich - nicht im übertragenen Sinne - die Exekutive zeigt dem Benutzer einen anderen Wert anstelle von einem. Wo dies geschieht - innerhalb oder außerhalb einer Funktion - spielt dabei keine Rolle. Ein Echtzeit-Multitasking-System ist in der Lage, mehrere Prozesse gleichzeitig zu verarbeiten. In diesem Prozess "läuft" die Funktion Sleep() die meiste Zeit und verbraucht keinerlei Systemressourcen. Dies ist der klassische Fall, der im Wesentlichen zur Aussetzung des Prozesses verwendet wird. Alle anderen Prozesse können ungehindert ablaufen.

- Genossinnen und Genossen, können wir den Plan zu 102 % erfüllen?

- ... Ja, das können wir.