Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Funktion gesucht die Farbwechsel der Kerzen zurückgibt (http://www.expert-advisor.com/forum/showthread.php?t=6726)

LQK 25.07.20 14:16

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

AVT 25.07.20 15:33

Zitat:

Zitat von LQK (Beitrag 44096)
Hallo,

Ö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.)

Die Angaben sind ein "bißchen" zu ungenau - was ist kurz vor Ablauf?

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

Vor Ablauf könntest Du als Prozent der Kerzenzeit angeben
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

wären meine Schritte. AVT

MA-EA 25.07.20 18:08

Da wären wir doch irgendwie bei Bar0. Das gibt doch Repainting. :confused:

Um welchen Indikator gehts?

RetepM 25.07.20 18:51

Zitat:

Zitat von LQK (Beitrag 44096)

Dazu brauche ich eine Funktion, die einen Farbwechsel erkennt.

LQK

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

AVT 25.07.20 19:45

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von MA-EA (Beitrag 44099)
Da wären wir doch irgendwie bei Bar0. Das gibt doch Repainting. :confused:

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

Indikator-Trading 25.07.20 20:23

Zitat:

Da wären wir doch irgendwie bei Bar0. Das gibt doch Repainting.
Mir fehlen jetzt echt die Worte...……………………………

traderdoc 25.07.20 20:40

Zitat:

Zitat von Indikator-Trading (Beitrag 44102)
Mir fehlen jetzt echt die Worte...……………………………

Jetzt erst?

traderdoc

MA-EA 28.07.20 01:19

Ich nehme mal, dass sein Rot-Grün Gerät mehrere Kerzen braucht, um berechnet zu werden. Wenn dabei auch Bar0 ist... :confused:

LQK 28.07.20 18:46

Zitat:

Zitat von AVT (Beitrag 44097)
Die Angaben sind ein "bißchen" zu ungenau - was ist kurz vor Ablauf?

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:


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


Gue Idee, einfach den Schlusskurz der beiden Kerzen zu vergleichen.

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:

Vor Ablauf könntest Du als Prozent der Kerzenzeit angeben
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

wären meine Schritte. AVT
iTime gibt, wenn ich die Syntax Command Reference richtig verstehe, die "Restzeit" einer Asset-Klasse für eine vorzugebende Periodizität zurück?

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

LQK 28.07.20 18:56

Zitat:

Zitat von MA-EA (Beitrag 44099)
Da wären wir doch irgendwie bei Bar0. Das gibt doch Repainting. :confused:

Um welchen Indikator gehts?

Besten Dank für Deine Hinweise. Repaint & Co sagt mir in dem Fall noch nichts, ich muss das irgendwann mal nachlesen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:40 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum