|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
traderdoc - vielen dank für die antwort soweit habe ich es dann auch verstanden - man sollte das halt nicht nachts machen -.-
die funktion an sich funktioniert auch - nur habe ich bei paaren mit 3 nachkommastellen das problem, dass er mir die falsche kerze ausgibt und ich komme nicht dahinter warum - da die funktionen sich ja eigentlich anpassen sollten weil sie einen fest hinterlegten wert wiedergeben sollen Code:
//---shortsignale //---zurückverfolgen wo die psar umgeschwenkt haben von oben nach unten und bis zu dem punkt zurück mit ilowest den wert ermitteln if (psar_direction>Close[1]) { for(int i=0;psar_rot<Close[i];i++) { s_index=i; } int s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,0); Print("Short "+(High[s_high]+Spread)); Print("Enthaltender Spread "+Spread); } //--longsignale //---zurückverfolgen wo die psar umgeschwenkt haben von unten nach oben und bis zu dem punkt zurück mit ihighes den wert ermitteln if (psar_direction<Close[1]) { for (int i=0;psar_rot>Close[i];i++) { l_index=i; } int l_low=iLowest(NULL,TimeFrame,MODE_LOW,l_index,0); Print("Long "+(Low[l_low]-Spread)); Print ("Enthaltender Spread "+Spread); } |
|
|||
Der Code sieht für mich richtig aus. Wie berechnest Du die Variable Spread ?
Kann es sein das da was nicht stimmt ? |
|
|||
Hallo
den Spread ermittel ich wie folgt: Code:
//---Abfrage Spread if(digits==5){ Spread = MarketInfo(Symbol(), MODE_SPREAD)/10000; } if(digits==3){ if(Symbol()=="XAUUSD"||Symbol()=="XAGUSD"){ Spread = MarketInfo(Symbol(), MODE_SPREAD)/10; }else{ Spread = MarketInfo(Symbol(), MODE_SPREAD)/100; } } |
|
|||
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 ); |
|
|||
ach das habe ich vergessen dazu zu schreiben
der psar_direction ist der parabolic des übergeordneten timeframes - handelt man beispielsweise im h4 chart, ist das der d1 parabolic dass dieser zur zeit der abfrage dort liegen muss ist schon korrekt weil ich sicherstellen will/muss dass der übergeordnete trend nach wie vor die richtige richtung hat zählen möchte ich nun, die bars die psar_rot schon (also der vom aktuellen timeframe) unter dem kurs ist dementsprechend finde ich deinen ansatz aber gut also frage ich ab Code:
if (psar_direction>Close[0]) { for(int i=0;psar_rot<Close[i]&&psar_rot<psar_rot2;i++) { s_index=i; } } |
|
|||
so ich hatte einen geistesblitz und habe es hinbekommen - um mir variablen zu sparen lasse ich die parabolics die ich vergleichen will einfach in der for schleife generieren
Code:
if(psar_direction>Close[0]) { //psar_gruen psar_gruen2 for(int i=0;psar_gruen<Low[i]&&iSAR(NULL,TimeFrame,Gruen_Step,Gruen_Max,i)>iSAR(NULL,TimeFrame,Gruen_Step,Gruen_Max,i+1);i++) { s_index=i; } s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,0); Print("Gezählte Kerzen "+s_index); Print("Shortsignal "+(High[s_high]+Spread)); Print("Enthaltender Spread "+Spread); } der fehler mit den instrumenten die nur drei nachkommastellen haben lag in der spreadberechnung (das komma musste eine stelle rücken) zu der frage ob ich mir sicher bin dass es nur bei den paaren nicht funktioniert (gold etc) - andere instrumente handele ich eh nicht vielen Dank für die unterstützung |
Lesezeichen |
Stichworte |
mql4, parabolic sar, parabolic sar punkte, programmierung, programmierung metatrader, schleife |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|