Geschrieben 10. September 201015 Jr. comment_104820 Hallo Freunde des adrenalinbetonten Geldverdienens. Diesmal hätte ich ein paar Fragen zu den FunktionenGlobalVariableSetGlobalVariableGetGlobalVariableTotal Was genau ist der Unterschied zwischen den beiden Funktionen GlobalVariableGet und GlobalVariableTotal.Wenn ich die Beschreibungen richtig verstehe, dann geben beide Funktionen die Anzahl der bestehenden GV wieder.Oder gibt "Get" die bestehenden GV wieder und "Total" alle jemals existierenden GV? Und beim Thema GlobalVariableSet:"datetime GlobalVariableSet( string name, double value)"Wird in diesem Fall die GV nur unter "datetime" gespeichert oder geht das ganze auch in "double"?Oder wird dieser Vorgang in etwa so durchlaufen, dass die GV mit drei Daten abgespeichert wird?Die Zeit, wann sie gespeichert wurde. Der Name, den die GV trägt und ein gespeicherter Wert, den die GV enthält. ...oder vll doch Variante C: der berühmte Holzweg lg NC Melden
Geschrieben 10. September 201015 Jr. comment_104823 Hallo Freunde des adrenalinbetonten Geldverdienens Eindeutig Quote of the week! €dit: Sorry das ich nicht mehr dazu beitragen kann ... Melden
Geschrieben 10. September 201015 Jr. comment_104824 Nur um sicherzustellen, daß wir vom selben Reden: MQL hat zwei total unterschiedliche "globale" Variablen, die nichts miteinander zu tun haben: globale Variablen im Code sind diejenigen, die jeder normale Coder auch so versteht: eben Variablen die im kompletten Script existieren. Das was du hier ansprichst sind auch globale Variablen, aber nicht deswegen weil sie im kompletten Script existieren (das tun sie auch garnicht), sondern weil man mit den von dir genannten Funktionen aus verschiedenen Scrips/EAs/Indikatoren darauf zugreifen (erstellen/lesen/schreiben/löschen) kann. Um nicht durcheinander zu kommen nenne ich diese Art "Terminal Variablen" weil sie eben quasi im MT4-Terminal gespeichert werden ( mit F3 kannst dir die Liste anzeigen lassen). Was genau ist der Unterschied zwischen den beiden Funktionen GlobalVariableGet und GlobalVariableTotal.Wenn ich die Beschreibungen richtig verstehe, dann geben beide Funktionen die Anzahl der bestehenden GV wieder.Oder gibt "Get" die bestehenden GV wieder und "Total" alle jemals existierenden GV? GlobalVariableSet() schreibt die TerminalVariableGlobalVariableGet() liest die TerminalVariable ausGlobalVariableTotal() hab ich noch nicht benutzt; sollte dir aber die Anzahl der aktuell existierenden TerminalVariable liefern Und beim Thema GlobalVariableSet:"datetime GlobalVariableSet( string name, double value)"Wird in diesem Fall die GV nur unter "datetime" gespeichert oder geht das ganze auch in "double"?Oder wird dieser Vorgang in etwa so durchlaufen, dass die GV mit drei Daten abgespeichert wird?Die Zeit, wann sie gespeichert wurde. Der Name, den die GV trägt und ein gespeicherter Wert, den die GV enthält. Jede TerminalVariable hat einen Namen und einen Wert (TerminalVariablen sind IMMER double). Wenn du also ein DateTime zu einem Wert speichern willst mußt du das aufteilen in: GlobalVariableSet( variable1_value, value1 );GlobalVariableSet( variable1_datetime, datetime ); Zu beachten ist: datetime muß im Format "Sekunden seit 01.01.1980(oder so)" vorliegen, da es als String (10.09.2010 15:25:00) nicht gespeichert werden kann. ==> EDIT: DateTime muß in TimeCurrent() vorliegen Melden
Geschrieben 10. September 201015 Jr. Autor comment_104827 Nur um sicherzustellen, daß wir vom selben Reden:jup, wir reden vom selben Thema Jede TerminalVariable hat einen Namen und einen Wert (TerminalVariablen sind IMMER double). Wenn du also ein DateTime zu einem Wert speichern willst mußt du das aufteilen in: GlobalVariableSet( variable1_value, value1 );GlobalVariableSet( variable1_datetime, datetime );Mich hat die Erläuterung im MT4 ein wenig verunsichert.Dort steht "datetime GlobalVariableSet(string name,double value)".Habe jetzt aber auch geschnallt, warum dort DateTime steht.Wenn die Funktion erfolgreich durchgeführt wurde, dann wird die Uhrzeit wiedergegeben an dem es funzte... Und um nochmal kurz das frisch erlangte Wissen abzugleichen, dann ist die Funktion GlobalVariableSet() in etwa das Gleiche wie die Funktion OrderSend() oder OrderModify().Die Daten in den Klammern werden weitergegeben und verarbeitet. In unserem Fall also gespeichert Danke Dir dann für die Hilfe und wenn ich noch Fragen haben sollte, dann meld ich mich im Forum. lg und schönes WENC @RumpelPasst schon... Melden
Geschrieben 10. September 201015 Jr. comment_104829 Mich hat die Erläuterung im MT4 ein wenig verunsichert.Dort steht "datetime GlobalVariableSet(string name,double value)".Habe jetzt aber auch geschnallt, warum dort DateTime steht.Wenn die Funktion erfolgreich durchgeführt wurde, dann wird die Uhrzeit wiedergegeben an dem es funzte... Und um nochmal kurz das frisch erlangte Wissen abzugleichen, dann ist die Funktion GlobalVariableSet() in etwa das Gleiche wie die Funktion OrderSend() oder OrderModify().Die Daten in den Klammern werden weitergegeben und verarbeitet. In unserem Fall also gespeichert zu oben: Genau so ist es. zu unten: :-) Das einzige, was diese Funktionen "gleich" haben ist, daß sie Funktionen sind. Aber ich versteh schon was du meinst: GlobalVariableSet() "tut" eine Variable schreibenund: OrderSend() "tut" eine Order an den Broker senden Melden
Geschrieben 12. September 201015 Jr. Autor comment_104897 Jetzt habe ich vielleicht nochmal eine kleinere Frage zu dem Thema. Wenn ich eine "bool"-Funktion ausführen lasse, dann gibt die am Ende "true" oder "false" wieder.Kann ich da jetzt innerhalb dieser "bool"-Funktion eine weitere Funktion ausführen lassen?Das die "bool"-Funktion nicht nur einen der zwei Werte zurück gibt, sondern auch während der Ausführung eine TerminalVariable setzt, um diese dann später auslesen zu lassen.Oder sollte ich dafür eine "void"-Funktion nehmen um die Variable zu setzen? Als kleines Bsp. meines Vorhabens: bool Entry_Long() { //Bezug Wert double Var_1 = WertVar_1; double Var_2 = WertVar_2; //---------- //Berechnung if(Var_1>Var_2)GlobalVariableSet("Var_2",Var_2); if(Var_1>Var_2) //---------- //Ausführung return(true);else return(false); } ...oder würde diese Art der Ausführung fehlschlagen? lg NC Melden
Geschrieben 12. September 201015 Jr. comment_104901 Kann ich da jetzt innerhalb dieser "bool"-Funktion eine weitere Funktion ausführen lassen?Das die "bool"-Funktion nicht nur einen der zwei Werte zurück gibt, sondern auch während der Ausführung eine TerminalVariable setzt, um diese dann später auslesen zu lassen.Oder sollte ich dafür eine "void"-Funktion nehmen um die Variable zu setzen? Nein, da brauchst du keine zusätzliche void Funktion. Kannst innerhalb deiner bool-Funktion globale Variablen verändern wie du willst. Gegenfrage:Hast du da ein so kompliziertes System, daß du globale client terminal Variablen brauchst? Normalerweise brauchst du die nur, wenn du verschiedene EAs synchronisieren willst. Melden
Geschrieben 12. September 201015 Jr. Autor comment_104902 Ahhh, dann danke ich Dir mal. Werde es dann wahrscheinlich auch so machen Naja, schwierig nicht wirklich.Sind einfach Einstiegsregeln und auch sonst nichts Großes.Aber das "Low" einer ValueWhenKerze soll auf unbestimmte Zeit(jedoch nicht länger als 2Tage)gespeichert werden.Wenn ein Indi eine bestimmte Position hat, dann soll aus diesem Bar der Low genommen werden. Wenn dann bspw. ein Bar unter dem Low schließt, dann soll die Position geschlossen werden. Wenn aber der Indikator erneut die besagte Position einnimmt, dann soll die Grenze(Low) verändert werden. Jetzt fällt mir aber spontan keine andere Möglichkeit ein. Vielleicht habe ich auch nicht richtig nachgedacht, da ich das mit den Variablen eh mal probieren wollte. Oder würde Dir spontan etwas einfallen? lg NC Melden
Geschrieben 13. September 201015 Jr. Autor comment_104927 Jetzt wollte ich mal kurz eine Funktion posten, welche nur für das prüfen, vergleichen, löschen und setzen einer GV verantwortlich ist. Diese muss dann noch passend eingefügt werden. Doch bevor ich das mache, wollte ich mal kurz "drüber schauen" lassen... void TermVar_long() { //Bezug Wert double CCI_1 = iCCI(NULL,CCI_TF,CCI_Periode,CCI_Preis,CCI_Shift); double CCI_2 = iCCI(NULL,CCI_TF,CCI_Periode,CCI_Preis,CCI_Shift+1); //---------- //Berechnung if(CCI_2>Schnittpunkt_Long) if(CCI_1<Schnittpunkt_Long) { if(GlobalVariableCheck("long")==false) { GlobalVariableSet("long",iLow(NULL,CCI_TF,CCI_Shift)); } if(GlobalVariableCheck("long")==true) { double var_long = GlobalVariableGet("long"); if(var_long == iLow(NULL,CCI_TF,CCI_Shift))return; if(var_long != iLow(NULL,CCI_TF,CCI_Shift)) { GlobalVariableDel("long"); GlobalVariableSet("long",iLow(NULL,CCI_TF,CCI_Shift)); } } } //---------- //Ausführung return; } lg NC Melden
Geschrieben 13. September 201015 Jr. comment_104939 Servus Nico,funtionieren sollte es schon, aber ... Du solltest vielleicht ein paar kleine Optimierungen einbauen Folgender Code macht das gleiche, wie deiner ... void TermVar_long() { //Bezug Wert double CCI_1 = iCCI(NULL,CCI_TF,CCI_Periode,CCI_Preis,CCI_Shift); double CCI_2 = iCCI(NULL,CCI_TF,CCI_Periode,CCI_Preis,CCI_Shift+1); //---------- //Berechnung if(CCI_2>Schnittpunkt_Long && CCI_1<Schnittpunkt_Long) GlobalVariableSet("long",iLow(NULL,CCI_TF,CCI_Shift)); //---------- //Ausführung return; } ... nur etwas schneller. Zudem wird bei dir der Teil nach der Abfrage if(GlobalVariableCheck("long")==true) immer aufgerufen, da du "long" ja vorher schon setzt. Wenn so, dann mit "else" anstelle mit "if(...)"und wenn du deiner Globalen Variablen einen neuen Wert zuweisen willst, dann mußt du sie nicht vorher löschen. Ach ja, und GlobalVariableSet() funktioniert auch, wenn die Variable vorher noch nicht existiert, du mußt also nicht vorher darauf prüfen. Melden
Geschrieben 13. September 201015 Jr. Autor comment_104942 Du solltest vielleicht ein paar kleine Optimierungen einbauen Natürlich...freue mich über jede Art von Feedback die mich weiterbringt. Zudem wird bei dir der Teil nach der Abfrage if(GlobalVariableCheck("long")==true) immer aufgerufen, da du "long" ja vorher schon setzt. Wenn so, dann mit "else" anstelle mit "if(...)"Eigentlich wollte ich es mit If-else machen, aber zwecks Lesbarkeit habe ich es dann doch so gemacht.Macht eine veränderte Schreibweise die Prozesse länger und den EA langsamer?und wenn du deiner Globalen Variablen einen neuen Wert zuweisen willst, dann mußt du sie nicht vorher löschen.Also kann ich die bestehende Variable einfach überschreiben ohne sie löschen zu müssen?Dat is ja gaieeel...Hatte da etwas Angst, dass mir das System eine "long" und eine "long"1 reinknallt Ach ja, und GlobalVariableSet() funktioniert auch, wenn die Variable vorher noch nicht existiert, du mußt also nicht vorher darauf prüfen.ok...dann weiß ich jetzt sehr viel mehr. Danke!Ab jetzt werde ich mit hoher wahrscheinlichkeit sehr viel öfter damit arbeiten. Das macht nämlich das Speichern oder extrahieren von Daten eines bestimmten Zeitraumes viel viel leichter lg und N8NC Melden
Geschrieben 14. September 201015 Jr. comment_104949 Eigentlich wollte ich es mit If-else machen, aber zwecks Lesbarkeit habe ich es dann doch so gemacht.Macht eine veränderte Schreibweise die Prozesse länger und den EA langsamer?Es war ein bischen anders gemeint. Du frägst ab, ob "long" nicht existiert und wenn nicht, dann erzeugst du die Variable.In der nächsten Anweisung frägst du dann ab, ob sie existiert. An dieser Stelle existiert sie aber auf alle Fälle, da du sie ja eine Zeile darüber erzeugt hast.D.h. diese If-Abfrage liefert immer true zurück, was dann ja reichlich überflüssig ist. Gruss,Wogo Melden
Geschrieben 14. September 201015 Jr. Autor comment_104977 Jetzt weiß ich worauf Du hinaus wolltest...Habe mir das Alles nochmal durch den Kopf gehen lassen und habe "einstimmig" beschlossen, dass vieles davon unnütz war lg NC Melden
Geschrieben 17. Oktober 201015 Jr. Autor comment_106531 Wenn ich beim Laden eines EAs betimmte TermVar setzen möchte, dann sollte es doch eigentlich genügen, wenn ich das Ganze in der Init() verpacke...oder?(falls jetzt Fragen zu meiner Frage auftauchen sollten:Ich arbeite das erste mal mit Init() ) //============================================================================ void init() { GlobalVariableSet("THL",0); GlobalVariableSet("Kurs_Long",0); GlobalVariableSet("TRL",0); return; } //============================================================================ void deinit() { GlobalVariableDel("THL"); GlobalVariableDel("Kurs_Long"); GlobalVariableDel("TRL"); return; } //============================================================================ Müssen die beiden Funktionen dann nochmal separat bei Start() aufgerufen werden oder werden die beiden Funktionen explizit aufgerufen. lg NC Melden
Geschrieben 17. Oktober 201015 Jr. comment_106534 Wenn ich beim Laden eines EAs betimmte TermVar setzen möchte, dann sollte es doch eigentlich genügen, wenn ich das Ganze in der Init() verpacke...oder?Ja, Init() wird ja beim Initialisieren, also wenn du den EA in den Chart ziehst, aufgerufen.Deine Globalen Variablen werden dann erzeugt und innerhalb von Start() kannst du dann darauf zugreifen.Du mußt eine Globale Variable aber nicht initialisieren. Beim Befehl GlobalVariableSet() wird die GV erzeugt und gesetzt. Sollte sie bereits vorhanden sein, dann wird sie nur gesetzt, d.h. es reicht, wenn du sie innerhalb von Start, wenn du das erste mal darauf schreibst, erzeugst. Melden
Hallo Freunde des adrenalinbetonten Geldverdienens.
Diesmal hätte ich ein paar Fragen zu den Funktionen
GlobalVariableSet
GlobalVariableGet
GlobalVariableTotal
Was genau ist der Unterschied zwischen den beiden Funktionen GlobalVariableGet und GlobalVariableTotal.
Wenn ich die Beschreibungen richtig verstehe, dann geben beide Funktionen die Anzahl der bestehenden GV wieder.
Oder gibt "Get" die bestehenden GV wieder und "Total" alle jemals existierenden GV?
Und beim Thema GlobalVariableSet:
"datetime GlobalVariableSet( string name, double value)"
Wird in diesem Fall die GV nur unter "datetime" gespeichert oder geht das ganze auch in "double"?
Oder wird dieser Vorgang in etwa so durchlaufen, dass die GV mit drei Daten abgespeichert wird?
Die Zeit, wann sie gespeichert wurde. Der Name, den die GV trägt und ein gespeicherter Wert, den die GV enthält.
...oder vll doch Variante C: der berühmte Holzweg
lg NC