Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   EA Variablen zurücksetzen (http://www.expert-advisor.com/forum/showthread.php?t=4789)

Raul0 15.02.16 21:33

EA Variablen zurücksetzen
 
Hallo,

im Moment setze ich die Variablen einzeln im Bereich int init zurück.

Geht das einfacher, sodass alle Variablen auf einmal zurücksetzt werden?

Ich habe Probleme mit Aufsummierungen gehabt, nach Änderungen in der Eingabe.

Raul

Raul0 16.02.16 08:17

Ich habe rausgefunden, dass ich bei deinit() die Rücksetzungen tätigen kann.

Wie ich alle Variablen auf einmal zurücksetzen kann fehlt noch, bzw. den EA.

Geht das überhaupt?

Mit ExpertRemove() wäre es die sauberste Lösung, jedoch gehen die Einstellungen verloren.

traderdoc 16.02.16 10:32

Ich verstehe das Problem noch nicht ganz.
Klar, bei OnInit() werden alle Variablen resettet.
Das passiert "auf einmal", auch wenn für jede Variable einzeln.
Nur wo soll jetzt der Vorteil liegen, mittels einer Funktion alle Variablen zu resetten.
Im Prinzip macht das ja eine Funktion und die heißt OnInit(). Du kannst auch eine eigene Funktion schreiben: z.B. Reset_Variables(). Dort werden alle Variablen natürlich wieder einzeln zurückgesetzt. Diese Funktion kannst Du dann aber irgendwo einsetzen, wo sie für Dich Sinn ergibt.

traderdoc

Raul0 16.02.16 12:40

Ok, ein einfaches Beispiel. Die Variable test wird zu einem Zeitpunkt während des Betriebes auf 20 gesetzt.
Rufe ich mit F7 die Einstellungen auf und klicke ok, dann sehe ich über die Zeile bei init(), Print("test init ", test );, dass diese Variable noch den Wert 20 beibehalten hat, obwohl der EA mit neuen Einstellungen gestartet wurde.

Ich hatte schon die Befehle bei mql durchgeschaut, leider nichts gefunden, sodass ich mit einem Befehl den Speicher der Variablen nullen kann. Alles nur Einzelabfertigung, was bei vielen Variablen gern zu Fehlern führt.

PHP-Code:

extern int        Magic          1001;
extern double  BaseLot      0.01;
extern int        TakeProfit    0;
extern int        StopLoss     200;

string Version;
int bmtest 0;

//----
int init()
  {

   
Version "EA_Test";
   
bm 1;
   if(
MarketInfo(Symbol(),MODE_DIGITS) == ||  MarketInfo(Symbol(),MODE_DIGITS) == 3)       bm 10;
   if(
TakeProfit>0)       TakeProfit        =  TakeProfit          bm;   
   if(
StopLoss>0)        StopLoss         =  StopLoss           bm;
//----

Print("test init "test );

   return(
0);
  }
//----
int deinit()
  {
//----
   
return(0);
  }
//----
int start()
  {

Print(
"test start "test );
....
//---- 


pischinger 16.02.16 13:07

also ich kann ohne probleme über f7 änderungen vornehmen die auch geladen werden-oder habe ich was komplett falsch verstanden

2016.02.16 13:03:02.388 MACD Sample EURUSD,H1 inputs: TakeProfit=30.0; Lots=0.1; TrailingStop=30.0; MACDOpenLevel=3.0; MACDCloseLevel=2.0; MATrendPeriod=26;
2016.02.16 13:02:52.691 MACD Sample EURUSD,H1 inputs: TakeProfit=50.0; Lots=0.1; TrailingStop=30.0; MACDOpenLevel=3.0; MACDCloseLevel=2.0; MATrendPeriod=26;

edit: ich denke das dies möglicherweise gar nicht über OnInit() läuft sondern über OnTick() da nur eine variable geändert wurde und auch nur diese initialisiert wird

traderdoc 16.02.16 13:08

Ja, aus diesem Grunde werden bei mir alle Variablen erst in der OnInit()-Funktion initialisiert. Damit wäre auch Dein Problem behoben.

traderdoc

traderdoc 16.02.16 13:13

Zitat:

Zitat von pischinger (Beitrag 33229)
also ich kann ohne probleme über f7 änderungen vornehmen die auch geladen werden-oder habe ich was komplett falsch verstanden

Ich denke, ja. Denn es ging ihm nicht um die Änderung der F7-Variablen, sondern um die globalen Variablen unter den externen, die nicht! über F7 aufrufbar sind.

Bei Veränderungen über F7 nimmt der EA diese externen Variablen-Veränderungen mit, aber eigentümlicherweise nicht die der globalen Variablen.

traderdoc

pischinger 16.02.16 13:15

Zitat:

Zitat von traderdoc (Beitrag 33231)
Ja, aus diesem Grunde werden bei mir alle Variablen erst in der OnInit()-Funktion initialisiert. Damit wäre auch Dein Problem behoben.

traderdoc

ich gestehe, auch bei mir wird alles wie digits, signs, magic, time(filter) im OnInit() initialisiert

Raul0 16.02.16 13:30

Also Einzelabfertigung :-)

Im Header definieren, im Bereich init Grundwerte zuweisen.
Gut, Danke für die Mithilfe.

PHP-Code:

extern int     StopLoss    200;

string Version;
int bmtest;

//----
int init()
  {

   
test 0;

   
Version "EA_Test";
   
bm 1;
...... 


traderdoc 16.02.16 16:33

... oder eben in eine eigene Funktion auslagern, sofern das Resetten auch von anderer Stelle aus betrieben werden sollte.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:00 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum