An der Spreadberechnung ist nichst außergewöhnliches. Bist du dir sicher dass die Schleife nur bei 3 Digit-Symbolen nicht funktioniert. Vielleicht hab ich jetzt nen Logikhänger:
den Wert von psar_direction kenne ich nicht aber den berechnest du wahrscheinlich aus dem iSAR von Bar[1].
if (psar_direction>Close[1])
psar_direction soll also bei Shortsignalen über dem Close[1] liegen. psar_direction kann aber auch schon mehrere Bars lang über dem jeweiligen Close liegen. D.h. der folgende Code:
for(int i=0;psar_rot<Close[i];i++)
{
s_index=i;
}
würde ja auch aufgerufen nachdem psar_direction schon drei oder mehr Bars über dem Close liegt.
hätte das so geschrieben:
double psar_direction1=iSAR(.,.,.,1);
double psar_direction2=iSAR(.,.,.,2);
if (psar_direction1>Close[1] &&psar_direction2<Close[2])
{
//und hier jetzt die for-Schleife einfügen
}
Damit wird die Routine nur aufgerufen wenn der SAR von unter auf über dem Kurs umschaltet.
Die folgende for-Schleife müsste auch geändert werden.
for(int i=0;psar_rot<Close[i];i++)
Hier sollte die Schleife dann von int=2 beginnen sonst zählst du ja den aktuellen Bar[0] mit.
for(int i=2;psar_rot<Close[i];i++)
Close[1] ist ja schon über dem Kurs und wir wollen nur den PSAR unter dem Kurs zählen.
int s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,0 );
Der Parameter Shift muss dann bei iHighest auch auf 2 geändert werden sonst zählst Du ja den aktuelle Bar[0] mit.
So wäre es glaube ich dann richtig:
int s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,2 );
|