|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Parabolics zählen
Moin, ich habe irgendwie einen Denkfehler.
Ich versuche die Punkte des Parabolic SAR rückwärts zu zählen und mit innerhalb dieser Range den Höchst- bzw. Tiefstkurs ausgeben zu lassen. Ich habe das mit einer for Schleife probiert (wird nachgereicht da ich aktuell an einem anderen Rechner sitze) und bekomme auch einen Wert zurück. Allerdings das Allzeittief - für mich leider unnütz. Jetzt grübel ich schon eine Weile darüber und daher meine Frage: lässt sich das überhaupt mit nur einer Schleife realisieren, oder brauche ich eine um den Shift der Parabolics hochzuzählen (beispielsweise solange sie über dem kurs sind) und dann eine die genau diese Anzahl an Kerzen zurückzählt und mir daraus den Kurs ausgibt? LG |
|
|||
ja der Versatz nach hinten - Standard ist 0 das wäre die aktuelle kerze - 1 ist eine davor usw
Code:
double iSAR( string symbol, // symbol int timeframe, // timeframe double step, // price increment step - acceleration factor double maximum, // maximum value of step int shift // shift ); |
|
|||
Versteh ich das richtig, Du willst den Höchst- oder Tiefpunkt des PSAR bis der Punkt umschaltet von über dem Kurs stehend auf unter dem Kurs stehend?
Das geht schon mit einer Schleife rückwärts (shift) die abgebrochen wird bis ein Wechsel Kurs > iSAR auf Kurs<iSAR erfolgt und umgekehrt. Hab das jetzt bestimmt nicht richtig verstanden aber lade mal den Teil von Deinem Code hoch. |
|
|||
Was willst Du beim PS mit Shift? 1. ist er schnell genug 2. Wirds nicht funktionieren. Ist nur optisch von Vorteil. Wie bei MAs. Kann nen EA
nix mit anfangen. |
|
|||
So jetzt zur verdeutlichung
auf dem bild ist ein standard parabolic zu sehen mit einem standardkurs (eurusd in diesem fall) jetzt möchte ich, für die spanne in der die parabolic sar punkte über dem kurs sind, das niedrigste tief haben Code:
//---longsignale while(psar_gruen>Close[1]) //Solange rot über grün ist und der letzte close unter beiden { //double Buffer=0; for(double lowest=Low[0];ipsar_gruen>Close[1];iShift++) { if (lowest>Low[iShift]) lowest=Low[iShift]; Print ("long" +lowest); } dieser gibt mir allerdings das allzeit tief heraus - vermutlich weil ich keine richtige austiegsregel habe - im nachhinein ist mir klar, dass ipsar (die grünen punkte) immer true ist. ipsar sind übrigens punkte die ich beim experimentieren angelegt habe - sind die gleichen wie auf dem bild - daher auch die beiden schleifen - war mehr ein akt der verzweifelung //EDIT ja shift war ebenfalls ein denkfehler - hatte es mit dem [1] verwechselt von arrays |
|
|||
da ich den edit-button vermisse...
ich bin gerade über iHighest und iLowest gestolpert. das vereinfacht die sache - somit brauche ich eigentlich nur noch zurückzählen bis zu der kerze an der die parabolics umschlugen und für diesen bereich die werte auslesen lassen 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 for(int i=0;psar_rot<Close[i];i++) { s_index=i; } double s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,1); Print("Short "+s_high); //--longsignale //---zurückverfolgen wo die psar umgeschwenkt haben von unten nach oben und bis zu dem punkt zurück mit ihighes den wert ermitteln for (int i=0;psar_rot>Close[i];i++) { l_index=i; } double l_low=iLowest(NULL,TimeFrame,MODE_LOW,l_index,1); Print("Long "+l_low); short = 4561 long = 16 ist nun aber auch dolle spät |
|
|||
Bei iHighest/iLowest musst Du mehrere Bars lassen. Keine Ahnung wie
viele, aber 1 am Ende wird nix bringen. |
|
|||
Code:
int iLowest( string symbol, // symbol int timeframe, // timeframe int type, // timeseries id int count, // count int start // starting index ); habe es rausgefunden - ich dussel habe das falsche ausgeben lassen - iLowest gibt nur die Bar zurück in der der Preis ist. Ich muss dann noch mit Low bzw High und dem entsprechenden index ausgeben allerdings habe ich jetzt ein phänomen: bei den üblichen paaren funktioniert das gut und wird richtig ausgegeben. bei paaren mit weniger nachkommastellen allerdings (bspw USDJPY) wird wieder ein anderes Hoch oder Tief ausgegeben im iLowest oder iHighest finde ich allerdings nicht viel dazu Geändert von skynat (14.09.16 um 12:04 Uhr) |
|
|||
@MA-EA, dasselbe Defizit wie vorher, erst die Funktion nachlesen und verstehen, dann schreiben.
@skynat, die Funktion iHighest() und iLowest() gibt den Index der Kerze aus, welche das höchste Hoch bzw. tiefste Low besitzt, in der Suche beginnend mit dem Index der Kerze, deren Wert als letzte Variable angeben wurde und dann count Kerzen nach links. Begonnen werden kann auch mit 0 oder eben auch mit Kerzen, die (viel) weiter links liegen. Richtigerweise hast Du dann noch herausbekommen, dass dieser Rückgabewert ein Integer ist und damit nicht das tatsächliche HH bzw. LL darstellt. Diese wären dann durch High[x] bzw. Low[x] zu ermitteln. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
mql4, parabolic sar, parabolic sar punkte, programmierung, programmierung metatrader, schleife |
|
|