Inhalte aufrufen

  • Über Facebook anmelden Über Twitter anmelden Über WindowsLive anmelden Log In with Google Anmelden
  • Mitglied werden
Profilbild

EA Einstellungen, Globales Array

- - - - - EA Einstellungen Globales Ar

  • Du kannst leider keine neuen Themen eröffnen
  • Please log in to reply
10 Antworten zu diesem Thema

  #1
OFFLINE   Elatos

Hallöchen,

 

ich habe heute gleich mal zwei schöne Fragen:

 

-Gibt es die Möglichkeit im MT4 mehrdimensionale Arrays zu speichern? So wie ich es heraus gelesen habe, gibt es nur FileWriteArray(), dass nur Eindimensionale Arrays speichert - damit müsste ich die Sache zerstückeln...

 

-Kann ich einen EA dazu überreden, nicht neu zu starten, wenn ich lediglich während seines Betriebes eine Einstellung ändere?

Ich möchte also gerne seine Einstellungen ändern, ohne dass er die Init()- und DeInit()Funktionen durchläuft.



  #2
OFFLINE   ping

-Kann ich einen EA dazu überreden, nicht neu zu starten, wenn ich lediglich während seines Betriebes eine Einstellung ändere? Ich möchte also gerne seine Einstellungen ändern, ohne dass er die Init()- und DeInit()Funktionen durchläuft.

 

... also das Anspringen der Init()- und DeInit()-Funktion kann man nicht verhindern, aber du entscheidest was da drin steht. Ob die Einstellungen geändert wurden, kann man in DeInit() abfragen und dann angeben was in diesem Fall zu tun ist und was im anderen Fall.

Damit das darauf folgende Init() davon auch was mitbekommt, bleibt nur die Möglichkeit in DeInit dann eine globale Variable (GlobalVariableSet()) zu erstellen, diese in Init() abzufragen und gleich wieder zu löschen.


8(| In Wirklichkeit  *_* ist die Realität ganz anders!  8(|    8(| ¡sɹəpuɐ zuɐɓ ʇıəʞɥɔıๅʞɹıM əıp ʇsı  *_* ʇəɐʇıๅɐəଧ ɹəp uI  8(|

  #3
OFFLINE   Elatos

Danke ping, für deine schnelle Antwort.

 

Mein Problem ist, dass mit jedem Neustart des EA's ja alle Variablendaten und Arraydaten neu aufgenommen werden müssen. Deswegen dachte ich mir: -entweder verhindere ich den Neustart oder ich speichere meine Arrays und nehme die dann beim Neustart wieder auf. Dabei habe ich auch schon an GlobalVariableSet() gedacht. Das hat aber zwei Nachteile, in dieser Situation:

 

-es lassen sich nur Variablen speichern, keine Arrays. Die mehrdimensionalen Arrays müsste ich demnach völlig zerstückeln...für FileWriteArray() müssten die Arrays nur dimensionsweise zerstückelt werden, falls es nicht doch noch eine Möglichkeit gibt, mehrdimensionale Arrays zu speichern

 

-im Falle, das MT4 beendet wird oder ein anderer Fehler geschieht, dann sind die globalen Daten verloren.(oder?)  FileWriteArray() legt diese auf der Festplatte ab (wobei ich hier noch nicht weiß wo...)



  #4
ONLINE   traderdoc

Zu Frage 1: nein, das geht nur mit eindimensionalen Arrays -> Lösung: richtigerweise zerstückeln und in der OnInit()-Funktion wieder zusammensetzen oder von vornherein nur eindimensionale Arrays schreiben.

Zu Frage 2: da hat @ping im Prinzip schon geantwortet. Wer mag, kann auch die Daten in OnInit() per csv-Datei speichern und wieder auslesen, da Globale Variablen nur für 30 Tage im Terminal gespeichert bleiben, sofern nicht einmal darauf zugegriffen wird.
Nein, nach dem Beenden des Programms gehen diese Variablen nicht verloren.
Ein Array lässt sich natürlich auch unter den Globalen Variablen speichern, nur das halt immer nur eine Variable auch nur ein Feld des Arrays speichern kann. Aber über eine flotte for-Schleifen kann man doch
ruckzuck das Array wieder herstellen.

traderdoc

Bearbeitet von traderdoc, 23 November 2017 - 10:59 Uhr,

Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierwünsche.

 


  #5
OFFLINE   Elatos

Danke auch dir traderdoc, das hilft mir schnell weiter.

 

...also doch nicht FileWriteArray()



  #6
OFFLINE   Elatos

Hallöchen und eine besinnliche Feiertagszeit noch,

 

ich bin soweit. Ich muss nun dynamische Arrays unbestimmter Länge mit for-Schleifen global speichern.

 

Meine Idee ist, das mit Hilfe dynamischer Variablen zu machen. Ich habe von denen gelesen, aber wie geht das im MT4?

 

Also Variablen der folgenden Form entwerfen:

 

 

string FesterVariablenBestandteil_DynamischerBestandteil1_DynamischerBestandteil2=Array[cnt1][cnt2];

 

 

cnt1 und cnt2 sind dabei die Laufvariablen der for-Schleifen. Die dynamischen Bestandteile ändern sich also mit jedem Schleifendurchlauf. Der Feste Bestandteil bleibt bei jedem Durchlauf gleich.

Wie geht das? Oder gibt es eine einfachere Lösung?

 

Riesen Danke schon im Vorraus.


Bearbeitet von Elatos, 27 December 2017 - 22:01 Uhr,


  #7
OFFLINE   Elatos

Mmh...hat sich erledigt.

 

Mit

 

GlobalVariableSet("ZusammengesetzterVariablenName",0);

 

kann ich jeden Schriftzug in den Himmel schicken und mit GlobalVariableGet() wider abrufen. Wichtig sind nur die Gänsefüßchen.



  #8
ONLINE   traderdoc

Also, worum geht es denn nun eigentlich wirklich?

traderdoc

Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierwünsche.

 


  #9
OFFLINE   Elatos

Wenn ich meinen EA ausschalte, möchte ich Daten aus dynamischen Arrays global speichern und dann beim Neustart des EAs wieder in die Arrays einlesen.

 

Es ging mir um die Entwicklung der globalen Variablen.



  #10
OFFLINE   Elatos

Also mit

 

GlobalVariableSet(StringConcatenate("Zeichenkette1_","ZeichenKette2_","Zeichenkette3"),0)

 

kann ja jeder beliebig zusammen gebaute Schriftzug als globale Variable definiert werden. Er muss zuvor nicht lokal als Variable definiert sein. Das war mir nicht klar.

 

Ich meine, auf diese Weise kann bei Bedarf eine unbestimmte Anzahl verschiedener Variablen entworfen werden. - Unendlich viele.

Auf lokaler Ebene habe ich nicht herausgefunden, wie das geht, also eine dynamische Anzahl an Variablen zu entwickeln, also in etwa:

 

string StringConcatenate("Zeichenkette1_","ZeichenKette21_","Zeichenkette31")=0;

string StringConcatenate("Zeichenkette1_","ZeichenKette22_","Zeichenkette32")=1;

string StringConcatenate("Zeichenkette1_","ZeichenKette23_","Zeichenkette33")=2;

...

string StringConcatenate("Zeichenkette1_","ZeichenKette2_","Zeichenkette3")=n;

 

-->Das funktioniert lokal nicht, aber global schon mit der GlobalVariableSet(...)-Variante.



  #11
ONLINE   traderdoc

Na ja, lokal geht das auch, aber nur über Umwegen.

Nur bzgl. Deiner Aussage: "Wenn ich meinen EA ausschalte, möchte ich Daten aus dynamischen Arrays global speichern und dann beim Neustart des EAs wieder in die Arrays einlesen."

steht die folgende Lösung nicht im Einklang, denn egal welche Lösung es lokal wäre, würde nach dem Einschalten des PC jegliche lokale Variable "leer" sein. Und nur das ist hier entscheidend.

Please Login or Register to see this Hidden Content

Hier wird ein dynamisches zweidimensionales Stringarray benutzt.

In der ersten Dimension wird die Laufvariable dim jeweils vorher mittels ArrayRange ausgelesen, incrementiert und dann als neue Arraygröße in der ersten Dimension definiert.

In der zweiten Dimension wird dann im ersten Feld der Variablenname definiert und im zweiten Feld der Variablenwert.

Wird eine weitere String-Variable definiert, dann wird der o.g. Prozess einfach wiederholt.

 

Das Auslesen dieses Stringarrays und damit die Separation in Variablennamen und Variablenwert funktioniert dann adäquat über die zweite Dimension.

 

traderdoc


  • Elatos gefällt das

Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierwünsche.

 




Similar Topics

  Thema Eröffnet von Statistik Letzter Beitrag




0 Benutzer lesen gerade dieses Thema

0 Mitglieder, 0 Gäste, 0 anonyme Nutzer