Einzelnen Beitrag anzeigen
  #14 (permalink)  
Alt 15.09.16
ralfbenker ralfbenker ist offline
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

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 );