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)
-   -   An-/Abschalten von Indikatorlinien (http://www.expert-advisor.com/forum/showthread.php?t=6709)

AVT 26.06.20 18:39

An-/Abschalten von Indikatorlinien
 
Ich habe Probleme mit dem An- und Abschalten (der Sichtbarkeit) von Indikatorlinien.

Situation:
Ein Indikator im SubWindow mit insgesamt 28 Linien - ja, das ist viel, darum müssen sie (un-)sichtbar sein bei Bedarf. Diese Linien werden über Buffer gezeichnet, IndexBuffer(0-27). Zum Schnellen Ein-/Ausschalten gibt es für jede Linie ein Button (wird der gedrückt, verschwindet sie, noch mal gedrückt und Linie ist wieder da -- so jedenfalls die Theorie).

Problem:
Ich kriege die Linien zwar abeschaltet, aber nicht wieder angeschaltet. :(
In OnChartEvent habe ich schon alles versucht, sowohl den direkten Befehl
SetIndexStyle(x,DRAW_LINE...) versus SetIndexStlye(x,DRAW_NONE)
als auch das Setzen von
(bool)IsOn[x]=1 versus (bool)IsOn[x]=0 (mit Bedingung in OnInit)

Nun weiß ich nicht mehr weiter. Hat jemand eine Idee?
Danke. AVT

traderdoc 26.06.20 20:51

Also ich habe mal gerade den Schnipsel gleich nach OnCalculate() eingebaut:

Code:

if (flag) {
  SetIndexStyle(0,DRAW_NONE);
  flag = false;
} else {
  SetIndexStyle(0,DRAW_LINE);
  flag = true;
}

und damit wird die Linie beim nächsten Tick entweder gelöscht bzw. wieder gezeichnet.

traderdoc

AVT 26.06.20 22:30

Zitat:

Zitat von traderdoc (Beitrag 43984)
Also ich habe mal gerade den Schnipsel gleich nach OnCalculate() eingebaut:

Code:

if (flag) {
  SetIndexStyle(0,DRAW_NONE);
  flag = false;
} else {
  SetIndexStyle(0,DRAW_LINE);
  flag = true;
}

und damit wird die Linie beim nächsten Tick entweder gelöscht bzw. wieder gezeichnet.

Danke traderdoc, das würde doch diesem Code entsprechen:
Code:

//Loop über Bars:
  if(LineOn[0]=1) B0[i]=iMFI(Names[0],MFIframe,MFIPeriod,i)-50;
/*
Bedingung: bool LineOn[28]={1,1,....}; //InitialAllOn

ButtonState=ObjectGetInteger(0,PFX+"But_0",OBJPROP_STATE);
if( ButtonState==1 ) //IsNotPushedDown:SetPaintOff,SetPushedDown
{ LineOn[0]=0; ObjectSetInteger(0,PFX+"But_0",OBJPROP_STATE,true); }
else  //IsPushedDown:PaintOn,SetNotPushedDown
{ LineOn[0]=1; bjectSetInteger(0,PFX+"But_0",OBJPROP_STATE,false); }
*/

oder irre ich mich da? So jedenfalls geht das nicht, es wird trotzdem weiter gerechnet und gemalt.
Wenn ich da einen Denkfehler mache, dann hau' mir den mal kräftig um die Ohren (nein, ich bin kein Maso :D)
AVT

AVT 29.06.20 13:26

Hab es hingekriegt, mal wieder mein Fehler :mad:
Die Bedingungen für
(bool)IsOn[x]=1 versus (bool)IsOn[x]=0 (mit Bedingung in OnInit)
in OnChartEvent waren verkehrt. Nu klappt es ohne Eintrag in OnCalculate.
AVT


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:13 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