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)
-   -   Repainting Indikator am Code erkennen (http://www.expert-advisor.com/forum/showthread.php?t=6772)

noSkill06s 10.09.20 17:29

Repainting Indikator am Code erkennen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,

immer wieder prüfe ich Indikatoren über den Strategytester ob sie repainten oder nicht, mich interessiert es sehr stark wie ich diesen Sachverhalt am Code erkennen kann.

Ich habe hier einen Indikator hier angehängt der ebenfalls repaintet, bei vielen ist es z.B. sehr einfach (nicht wirklich :) da erkennt man das am "shift+1" (nicht sicher jedenfalls dannach haben andere indis z.B. nicht repaintet) der hier ist aber einer ganz anderen Natur bzw. denke ich das die Lösung im Array steckt "EMPTY".

Könnt ihr mir vielleicht helfen wo das repainten bei diesem Indikator implementiert wird?
und wie man es eventuell z.B. korrigieren könnte? (die Ergebnisse und Qualität des Indikators spielt keine rolle es geht mir mehr um das lernen)

hier der Code

Code:

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_color3 LightSeaGreen
#property indicator_color4 Red
#property indicator_color5 Green


//---- indicator parameters
extern int Periode = 20;
extern int Decal_Band = 0;
extern double EType_Band = 2.0;

//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];


double UpperBGreen[] ;
double UpperBRed[] ;
double LowerBGreen[] ;
double LowerBRed[] ;

double EType[] ;

//+------------------------------------------------------------------+
//| initialisation |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(8);

SetIndexStyle(0,DRAW_LINE,0,2);
SetIndexBuffer(0,UpperBRed); 
SetIndexStyle(1,DRAW_LINE,0,2);
SetIndexBuffer(1,UpperBGreen);

SetIndexStyle(2,DRAW_LINE,0,1);
SetIndexBuffer(2,MovingBuffer);

SetIndexStyle(3,DRAW_LINE,0,2);
SetIndexBuffer(3,LowerBRed);
SetIndexStyle(4,DRAW_LINE,0,2);
SetIndexBuffer(4,LowerBGreen);

SetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(5,UpperBuffer);

SetIndexStyle(6,DRAW_NONE);
SetIndexBuffer(6,LowerBuffer);

SetIndexStyle(7,DRAW_NONE);
SetIndexBuffer(7,EType);


//----
return(0);
}
//+------------------------------------------------------------------+
//| Bollinger Bands |
//+------------------------------------------------------------------+
int start()
{
int index ;

int limit=Bars-Periode;

for(index=limit-2 ; index>=0 ; index--)
{
MovingBuffer[index]=iMA(NULL,0,Periode,Decal_Band,MODE_SMA,PRICE_CLOSE,index);
EType[index] = iStdDev(NULL,0,Periode,Decal_Band,MODE_SMA,PRICE_CLOSE,index);

UpperBuffer[index] = MovingBuffer[index] + EType[index] * EType_Band ; 

LowerBuffer[index] = MovingBuffer[index] - EType[index] * EType_Band ;

UpperBGreen[index] = UpperBuffer[index] ;
UpperBRed[index] = UpperBuffer[index] ;

LowerBGreen[index] = LowerBuffer[index] ;
LowerBRed[index] = LowerBuffer[index] ;

if ((UpperBuffer[index] > UpperBuffer[index+1])&&(UpperBuffer[index+1] > UpperBuffer[index+2])) UpperBRed[index+1] = EMPTY_VALUE ;
else if((UpperBuffer[index] < UpperBuffer[index+1])&&(UpperBuffer[index+1] < UpperBuffer[index+2])) UpperBGreen[index+1] = EMPTY_VALUE ; 

if ((LowerBuffer[index] > LowerBuffer[index+1])&&(LowerBuffer[index+1] > LowerBuffer[index+2])) LowerBRed[index+1] = EMPTY_VALUE ;
else if ((LowerBuffer[index] < LowerBuffer[index+1])&&(LowerBuffer[index+1] < LowerBuffer[index+2]))LowerBGreen[index+1] = EMPTY_VALUE ;

}

//----
return(0);
}
//+------------------------------------------------------------------+


AVT 10.09.20 21:14

Zitat:

Zitat von noSkill06s (Beitrag 44404)
Ich habe hier einen Indikator hier angehängt der ebenfalls repaintet, bei vielen ist es z.B. sehr einfach (nicht wirklich :) da erkennt man das am "shift+1" (nicht sicher jedenfalls dannach haben andere indis z.B. nicht repaintet) der hier ist aber einer ganz anderen Natur bzw. denke ich das die Lösung im Array steckt "EMPTY".

Könnt ihr mir vielleicht helfen wo das repainten bei diesem Indikator implementiert wird?

Ich hab den beobachtet.
Das ist kein Repainter. Repainting heißt, daß nachträglich bereits abgeschlossene Werte verändert werden. Das macht der hier nicht, er ändert nur die Werte der laufenden Kerze und das ist ok, denn die Kerze ist noch nicht abgeschlossen.
AVT

noSkill06s 10.09.20 21:21

Zitat:

Zitat von AVT (Beitrag 44405)
Ich hab den beobachtet.
Das ist kein Repainter. Repainting heißt, daß nachträglich bereits abgeschlossene Werte verändert werden. Das macht der hier nicht, er ändert nur die Werte der laufenden Kerze und das ist ok, denn die Kerze ist noch nicht abgeschlossen.
AVT

vielen Dank für deine Antwort, was mich stutzig macht ist:

int limit = Bars-Periode (Periode wurde mit 20 deklariert und initialisiert)

Bars = 999 (1000-1) - 20 = 979 das sind die Bars die ja "Backwards" angezeigt werden?

der Schleifenkopf (Initialisierungsausdruck) wird mit index =limit-2 deklariert das heißt doch jetzt das, dass Signal bzw. die Werte des Indikators nur für den bar[2] fest sind und bar[1] und bar[0] noch variabel :/

ich habe ihn auch beobachtet und bei mir kann auch sein das ich mich verguckt habe hat er repaintet.

noSkill06s 10.09.20 21:48

kurze Anmerkung mit Repainten mein ich das sich die Trendfarben der upper and lower Bollinger bands ändern


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