Zitat:
Zitat von skynat
Man rechnet also die 4 positiven Tage zusammen und teilt die dann auch nur durch 4
...
Code:
int divider=0,difference;
|
1. Die Differenz zweier Gleitpunktzahlen würde ich nicht in einer Variablen vom Typ Ganzzahl speichern.
2. Um die 4 positiven Tage zu addieren und durch 4 zu Teilen, musst du die 4 Tage auch speichern.
Code:
int LookBack = iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,DaysToLookBack),false);
Macht nicht gerade das, was du denkst. Hier fragst du nach dem Index der Kerze, welche die Zeit von der Kerze "DaysToLookBack" hat.
Außerdem würde ich den letzten Parameter mit "true" angeben.
TRUE: Wenn Kerze mit der abgefragten Zeit nicht gefunden, so gib -1 zurück.
FALSE: Wenn Kerze mit der abgefragten Zeit nicht gefunden, so nehme die naheliegenste.
Code:
int limit = MathMin(Bars,LookBack+1);
Hier nimmst du die Kerze von LookBack (DaysToLookBack) und vergleichst sie mit der totalen Anzahl an Kerzen. Was davon wird wohl der kleinere Wert sein?
Code:
for (int cnt=DaysToLookBack-1; cnt>=1;cnt--)
Beispiel DaysToLookBack = 5 würde wie folgt aussehen:
Code:
for(int cnt=5-1; cnt>=1; cnt--)
1. Du könntest auch das "-1" weglassen und dafür "cnt>1" schreiben.
2. Du willst doch den einen Tag mit den jeweils vorherigen vergleichen? Da muss die Schleife umgekehrt sein. So fängst du mit dem "ältesten" Tag an.
Code:
if((iHigh(Symbol(),PERIOD_D1,cnt))-iHigh(Symbol(),PERIOD_D1,cnt-1)>0)
Hier fragst du ab, ob vorgestern - gestern größer als 0 ist. Du wolltest es doch aber andersrum?
Nimm mal den Code:
Code:
void calculateHighExtension()
{
int i, pos_count=0;
double difference, tmp=0;
string sym = Symbol();
int period = Period();
//Beispiel DaysToLookBack = 5;
for(int i=1; i<=DaysToLookBack; i++)
{
if(iHigh(sym,period,i) > iHigh(sym,period,i+1))
{
tmp += iHigh(sym,period,i) - iHigh(sym,period,i+1);
pos_count++;
}
}
//Durchschnitt
difference = tmp / pos_count;
}