|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Funktion gesucht die Farbwechsel der Kerzen zurückgibt
Hallo,
ich will (mal wieder) zu Übungszwecken einen kleinen EA programmieren. Er soll diesmal diese Funktion haben: Wenn kurz vor Ablauf einer Periode die Kerze eine andere Farbe hat als die Vorgängerkerze, öffne einen Trade. Oder, anders ausgedrückt: Öffne immer einen Trade, wenn es einen Farbwechsel gibt. (Oder es kurz vor Ablauf der Periode so aussieht, als würde es gleich einen Farbwechsel geben.) Dazu brauche ich eine Funktion, die einen Farbwechsel erkennt. Die Idee des EA in Pseudocode ausgedrückt: Code:
* globale Variable int Periode = 15 Minuten char Farbe_vorige_Kerze char Farbe_aktuelle_Kerze * Funktion if (Periode ist fast abgelaufen) {if (Farbe_vorige_Kerze != Farbe_aktuelle_Kerze) EröffneTrade() } Was mir jetzt halt fehlt, ist die Funktion die die Farbe einer Kerze abfragt. Hier würde ich mich über einen Tipp freuen. Besten Dank und Grüße, LQK |
|
|||
Zitat:
2 Variablen: Code:
// Kerzenrichtung: 1=long=grün, -1=short=rot int PrevDir=CurDir=0; // ob ein gleicher Wert als grün oder rot gilt, mußt Du noch entscheiden // wenn openVorigeKerze<=closeVorigeKerze PrevDir=1 // sonst PrevDir=-1 // dasselbe später für jetzigeKerze Code:
int Perc90=(int)MathRound(PeriodSeconds()*0.9); //90% Kerzenzeit // und dann wenn die 90% der Zeit rum sind // iTime(NULL,0,0)+Perc90 die aktuelle Kerzenrichtung abfragen // auswerten und evtl. ordern |
|
|||
Da wären wir doch irgendwie bei Bar0. Das gibt doch Repainting.
Um welchen Indikator gehts? |
|
|||
Siehe (unter anderem) hier:
https://en.wikipedia.org/wiki/Candlestick_pattern Im ersten Absatz findest Du: Candlesticks are graphical representations of price movements for a given period of time. They are commonly formed by the opening, high, low, and closing prices of a financial instrument.[3] If the opening price is above the closing price then a filled (normally red or black) candlestick is drawn. If the closing price is above the opening price, then normally a green or a hollow candlestick (white with black outline) is shown. Schon weisst Du, wie es geht, aber wie schon geschrieben, bevor du mit dem Programmieren beginnst, macht es sicher Sinn, die Grundlagen des Tradings zu lernen!!! Grüße |
|
|||
Repainting bedeutet, daß Indikator-Werte für ältere, also schon beendete Bars im Nachhinein dauernd wieder verändert (also geschönt) werden; das heißt, wenn Du Dir in der Vergangenheit den Kurs ansiehst und wie "angeblich toll" der Indikator immer den richtigen Zeitpunkt zum Ein- und Ausstieg gezeigt hätte, dann kann man vermuten, das der Indikator seine Vergangenheitswerte maninpuliert hat. Der bekannteste Repainter ist wohl SolarWind.
Wir sind hier bei Bar0, aber alles was wir hier machen wollen, ist nur zu sehen, wann die Bar0 fast beendet wäre und wie dann (zu dem Zeitpunkt, wo sie fast zuende ist) die Kerzenfarbe ist. Das heißt nicht, das sich die Situation nicht doch noch ändern kann, es ist mehr oder weniger ein Spiel mit der Wahrscheinlichkeit: also wenn die vorige Bar schon grün war und kurz vor Ende die jetzige Bar auch noch grün ist, dann ist die Wahrscheinlichkeit, daß sie in den letzten Sekunden (oder was auch immer) plötzlich noch rot wird, relativ gering - so jedenfalls die Annahme, die Realität kann anders aussehen. Zur Berechnung hab ich Dir ein Test-Skript angehängt, mit allen genauen Erklärungen drin, warum ich was wie mache. Ich hoffe, es hilft Dir zu verstehen, wieso ich auf diese Werte komme. AVT |
|
||||
Zitat:
|
|
|||
Jetzt erst?
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Ich nehme mal, dass sein Rot-Grün Gerät mehrere Kerzen braucht, um berechnet zu werden. Wenn dabei auch Bar0 ist...
|
|
|||
Darüber habe ich mir noch keine Gedanken gemacht. So klein wie möglich (dass die Wahrscheinlichkeit, dass sich die Farbe doch noch ändert, möglichst klein ist), aber groß genug, dass die Eröffnung eines Trades ggf. nicht an Serverauslastung, Verbindungsschwierigkeiten usw. scheitert.
Sagen wir mal 30 Sekunden vor Ende der Periode soll die Farbe geprüft werden und ggf. ein Trade eröffnet werden. Zitat:
Aber mit welcher Funktion erhalte ich den Schlusskurs der früheren Kerze? Und was die aktuelle Kerze anbelangt: Da habe ich ja noch nicht den Schlusskurs, wäre als der aktuelle Kurs, z.B. 30 Sec. vor Ablauf der Periode, mit welcher Funktion komme ich an diesen Wert? Zitat:
Das mit Prozenten ist auch eine gute Idee, ich werde es aber vielleicht erstmal mit eine fixen Wert versuchen. Okay, ich versuche mich noch mal mit einem kleinen Pseudocode (für die rot markierten Funktionen, weiß ich noch nicht, mit welchen Funktionen ich diese aus MQL umsetzen kann, hier wäre ich für einen Tipp dankbar). Allerdings reicht es m.E. nicht aus, nur die beiden Schlusskurse (bzw. den Schlusskurs und den vermuteten Schlusskurs) miteinander zu vergleichen, da das kein hinreichendes Kriterium für einen Farbwechsel ist. Es müssen auch z.B. der Eröffnungskurs der früheren Kerze und der (vermutete) Schlusskurs der aktuellen KErze verglichen werde. Ich berücksichtige das somit so auch in meinem Pseudocode (weiß nicht, ob ich es in Deinem Code vielleicht übersehen habe?) Code:
* Globale Konstante int Frist = 30 s * Variablendeklaration int Schlusskurs_alte_Kerze; int Kurs_aktuelle_Kerze; int Eröffnungskurs_aktuelle_Kerze; int Eröffnungskurs_alte_Kerze; * Funktion IF Frist = 30 THEN { IF (Schlusskurs_alte_Kerze() < Kurs_aktuelle_Kerze()} AND (Eröffnungskurs_alte_Kerze() > Eröffnungskurs_aktuelle_Kerze()) THEN BUY(); IF (Schlusskurs_alte_Kerze() > Kurs_aktuelle_Kerze()} AND (Eröffnungskurs_alte_Kerze() < Eröffnungskurs_aktuelle_Kerze()) THEN SELL(); Besten Dank noch mal für jeden konstruktiven Hinweis und Grüße! LQK |
|
|||
Besten Dank für Deine Hinweise. Repaint & Co sagt mir in dem Fall noch nichts, ich muss das irgendwann mal nachlesen.
|
Lesezeichen |
|
|