|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
@Traderdoc: Da arbeitet der MT4 aber äußerst ineffizient wenn jedesmal der abgefragte Indikator komplett geladen und wieder gelöscht wird. Da erscheint es fast sinnvoller die vom Indikator vorgenommene Berechnung direkt in den EA zu integrieren.
|
|
|||
Also ich beschäftige mich auch erst ein paar Monate mit mql4 und mir ist egal ob der Indikator bei iCustom jedesmal neu geladen wird oder nicht.
Fakt ist, das bei Einsatz von iCustom Strategietests über mehrere Jahre unendlich lange dauern. Auch wenn ich iCustom nur bei jedem neuen Bar einmal aufrufe geht das nicht schneller. Dass da alle Werte die ich eh nicht brauche neu berechnet werden kann ich mir gut vorstellen. Demgegenüber läuft die direkte Indikatorabfrage mit, z.B. iIchimoku() wesentlich schneller. Hier wird wohl wirklich nur der in shift angegebene Wert berechnet. Bei den Standardindikatoren nehme ich nie iCustom und bei denen, die nicht standardmäßig verfügbar sind schaue ich mir den Code des Indikators an und versuche die Berechnung über eine Funktion im EA direkt nachzubilden. Für viele Dinge benötigt man auch gar keinen Indikator weil's am Kurs ablesbar ist. |
|
|||
So, alles was nicht wirklich bei jedem Tick abgefragt werden muss ist in eine Funktion ausgelagert. Ich hoffe das war die Mühe auch Wert und man bemerkt den Unterschied. Wobei das wohl nur bei Newszeiten einen Ausschlag macht. Naja, selbst wenn nicht habe ich dadurch mal wieder was gelernt.
|
|
|||
Mal was anderes, über die iCustom Funktion kann ich wenn ich es richtig verstanden habe nur im Buffer gespeicherte Werte abfragen, oder?
Wäre eine vielleicht sehr viel effizientere Lösung, zumindest wenn ich die MQL Datei des auszulesenden Indikators habe, den Indikator die von mir benötigten Werte in einer globalen Variablen zu speichern und dann direkt auch von dem EA auslesen zu lassen? So müsste zwar der Indikator in dem Chart geladen werden, dieser würde aber nicht ständig über iCustom initialisiert, durchgerechnet und gelöscht. |
|
|||
Das ginge prinzipiell auch, denn viele Wege führen nach Rom.
Teste es doch einfach mal aus und Berichte uns dann bitte, was Deine Beobachtungen bzgl. der Ausführungsperformance waren. Ich habe so im Gefühl, dass sich diese Methode eignen würde, wenn man nur wenige Indikatoren und gleichzeitig Charts offen hätte. Ich habe aber auch schon Programme für Kunden geschrieben, da wurden etwa 20 WP über alle TF mit mehreren Indikatoren jeweils auf Kerzenclose übe iCustom() abgefragt. Mit Deiner Lösungsvariante hätte das eine Unzahl von Charts bedurft. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Hallo,
allgemein gültig und auch für dieses Thema interessant: http://www.expert-advisor.com/forum/...giesparen.html |
|
|||
Ich denke meine Idee ist eher geeignet wenn man man nur verschiedene Werte von einem Chart beziehen muss. Wenn ich Werte aus verschiedenen Timeframes abfragen muss ist iCustom sicher die bessere Lösung.
Zu den globalen Variablen hätte ich aber auch eine Frage. Gibt es eine Möglichkeit den Variablennamen für eine globale Variable individuell generieren zu lassen? Weil angenommen ich will von einem Indikator zwei integerwerte als globale Variable speichern und nenne diese High und Low. Diese beiden Namen würde der Indikator ja dann jedesmal nehmen wenn ich den Indikator auf einen Chart lade und dementsprechend Chaos verursachen. Ich vermute es gibt keine Möglichkeit automatisch zum Beispiel einen Namen wie High_Symbol generieren zu lassen. |
|
|||
Zitat:
Code:
//+------------------------------------------------------------------+ //| Unterschieds zwischen Pferd und Esel.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property strict double MaWert=0.0; ulong StartZeit; ulong StopZeit; datetime ZeitWert; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- StartZeit=GetMicrosecondCount(); for(int i=0;i<1000000;i++) { MaWert=iMA(NULL,0,13,8,MODE_SMA,PRICE_CLOSE,0); } StopZeit=GetMicrosecondCount(); Print("MaAbfrage: ",DoubleToString((StopZeit-StartZeit)/1000.0,3)); StartZeit=GetMicrosecondCount(); for(int i=0;i<1000000;i++) { ZeitWert=Time[0]; } StopZeit=GetMicrosecondCount(); Print("Time[0]Abfrage: ",DoubleToString((StopZeit-StartZeit)/1000.0,3)); } //+------------------------------------------------------------------+ |
|
|||
Zitat:
Code:
Print ( "High "+ Symbol() + MQLInfoString( MQL_PROGRAM_NAME)); |
Lesezeichen |
Stichworte |
icustom, icustom abfrage, icustom wert, mql4, programmierung, programmierung metatrader |
|
|