|
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 |
|
|||
Hintergrund zwischen 2 Zeitpunkten ändern, zB der Bereich EMA10>EMA20 auf M15
Hallo!
So, nun zu meinem neuen (alten) Projekt, in welchem ich den Hintergrund zwischen zwei Zeitpunkten ändern und darstellen will, hier ist angedacht z.B. bei Schnitt / Überschreiten der EMA10 der EMA20 (M15) bis zum Unterschreiten farbig darzustellen. Die y-Werte können durchaus sehr weit gegriffen sein, also never-reached-Konstanten. Das Ganze wandert natürlich im Chart mit fortlaufender Zeit nach links, also so leicht finde ich das gar nicht! Hat jemand eine Idee?
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
|
|||
Hallo,
den Codeschnipsel nutze ich für die Anzeige an Trendstellen, evt. kannst Du Dir damit etwas zurechtbauen. PHP-Code:
|
|
|||
Hi,
schnell und einfach: wenn MA10>MA20 dann ChartSetInteger(0,CHART_COLOR_BACKGROUND,clrYellow ); sonst ChartSetInteger(0,CHART_COLOR_BACKGROUND,clrGreen) ; Grüße |
|
|||
Eww
Es gibt schon gute Möglichkeiten mit dem MQL.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. Geändert von traderdoc (03.05.18 um 13:07 Uhr) |
|
|||
Entschuldigung, ich hatte diesen Link vergessen:
https://www.forexfactory.com/showthread.php?t=329313 Gruß |
|
|||
Wow - Danke ! Ich muss es mir heute Abend ansehen, aber es sieht schon mal vielversprechend aus.. :-)
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
|
|||
Wenn nur die Fläche zwischen zwei Zeitpunkten farblich hervorgehoben werden soll, dann geht das rel. einfach über
ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_windo w,time1,price1,time2,price2) Wenn das Chart eine Kerze weiterrückt, dann wird das Rechteck über ObjectMove() komplett verschoben oder gelöscht und neu gezeichnet, wenn sich das Rechteck nach rechts verbreitert. Eine echte Herausforderung wäre jedoch, die Integralfläche! zwischen zwei EMAs zwischen zwei Zeitpunkten vollständig!! farblich zu zeichnen. D.h. es würde eine farbliche Fläche vom Über- bzw. Unterschreiten der EMAs bis zur aktuellen Kerze, max. bis zum nächsten Unter- bzw. Überschreiten der EMAs benötigt. Das ist in der Tat nicht einfach, aber lösbar. Das eigentliche Problem hier besteht in der Grenze des Machbaren mit MQL. Es existiert keine Funktion, die diese Integralfläche am Stück darstellen kann. Hier müssen wir uns iterativ mit einzelnen aneinanderliegenden Rechtecken und Dreiecken behelfen, die in Summe eine grafische Fläche ergeben. Prinzipielles Vorgehen: 1. Zwischen der oberen EMA und der unteren EMA und dem Zeitintervall zwischen zwei Kerzen, werden jeweils maximal 3 farbige Objekte gezeichnet. Entweder nur 1 Rechteck oder 1 Rechteck und 1 oder 2 Dreiecke. 2. Man nimmt also die Zeiten von der ersten geschlossenen Kerze und der zweiten geschlossenen Kerze nach der Kreuzung. 3. Danach ermittelt man die dazugehörigen Preise der beiden EMAs. Daraus ergeben sich also immer Wertepaare aus einer Zeit und den beiden EMA-Werten. 4. Sollten die zu einem Zeitintervall gehörenden jeweiligen zwei oberen und zwei unteren EMA-Werte identisch sein, dann kann im einfachsten Fall ein farbiges Rechteck gezeichnet werden. 5. Sollten die jeweiligen beiden EMA-Werte des Zeitintervalls unterschiedlich sein, dann müssen wir zusätzlich auf ein oder ggf. zwei Dreiecke zurückgreifen, wobei die Hypothenuse der Dreiecke immer die Linie des EMA darstellt. 6. Vertikal gesehen zwischen den beiden Dreiecken wird dann letztendlich das verbleibende Rechteck gezeichnet. 7. Damit nun bei jedem Periodenwechsel die Objekte mitwandern, müssen sie per ObjectMove() um jeweils eine Periode nach links verschoben werden. 8. In dem neuen Zeitintervall werden die Objekte wie oben beschrieben dann gezeichnet. Einzig die Spitzen der Flächen links der linken Begrenzung der gesamten Fläche bis zur direkten Kreuzung wird nicht farbig sein, weil die Kreuzung mehr oder weniger zwischen den Kerzen liegt und dort keine auswertbare Zeit liegt. Ebenfalls die Spitze nach rechts gesehen, wenn die EMAs das zweite Mal kreuzen. Das ist dann auch schon "alles". Viel Spaß beim Experimentieren.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
So, die folgenden Möglichkeiten habe ich gecheckt:
@Raul0 : Der Codeschnipsel ist zu klein, als dass ich erkennen würde, wie es sich auswirkt. @RetepM : Deine Lösung ist interessant, nur macht es den kompletten Charthintergrund andersfarbig. Ich brauche es jedoch nur zwischen zwei definierten Punkten, d.h. EMA10>EMA20 bis zum Zeitpunkt EMA10 < EMA20. Dieser Bereich soll farbig dargestellt werden und zwar nicht nur zwischen den EMAs, sondern durchgängig. @traderdoc: Das mit ObjectCreate / OBJ_RECTANGLE hatten wir bereits, war auch ein sehr interessanter, wenn nicht einzig möglicher Ansatz. Die Integralfläche benötige ich nicht, sondern wirklich nur senkrechte Begrenzungen. Wie ich bei ObjectCreate die time1 und time2 durch den Schnitt der EMA10>EMA20 definiere, ist mir schleierhaft Und das ist vermutlich, was an dem Käse so stinkt. Also nächstes das ObjectMove(), das wird sicher auch nochmal spaßig...
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
|
|||
Also, wenn Du wirklich nur senkrechte Begrenzungen brauchst, dann ist das aber wirklich einfach. Schade, denn die Lösung mit der Integralfläche sieht natürlich viel besser aus und färbt nicht so viel des Charts ein.
Nun gut. Die Zeiten der Schnitte werden ganz einfach ermittelt. Im laufenden! Chart wird die Kreuzung auf der letzten und vorletzten geschlossenen Kerze ermittelt: Code:
double EMA10_1 = iMA(NULL, 0, 10, ma_shift, ma_method, applied_price, 1); double EMA10_2 = iMA(NULL, 0, 10, ma_shift, ma_method, applied_price, 2); double EMA20_1 = iMA(NULL, 0, 20, ma_shift, ma_method, applied_price, 1); double EMA20_2 = iMA(NULL, 0, 20, ma_shift, ma_method, applied_price, 2); if (EMA10_2 > EMA20_2 && EMA10_1 < EMA20_1) datetime time1 = Time[1]; if (EMA10_2 < EMA20_2 && EMA10_1 > EMA20_1) datetime time2 = Time[1]; traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Hm... ja, für meine Zwecke reichen senkrechte Begrenzungen aus. Das Integral zwischen 2 EMAs sieht zwar sehr gut aus und ist auch programmiertechnisch sehr anspruchsvoll, aber ich brauche - gerade auf kleinen Timeframes - auf einen Blick die Indikation. Bei naheliegenden EMAs könnte der Zwischenraum wie eine (dickere) EMA erscheinen. Daher die senkrechten Begrenzungen.
So, ich habe mir den Code mal angesehen und mit leuchtet nicht ein, warum man die Schnittpunkte nicht wie folgt definieren könnte?!: PHP-Code:
PHP-Code:
Nichtsdestotrotz: Ich habe es hier mal mit EMA 2 und 4 versucht (zum Testen sieht man es schneller): PHP-Code:
Ich komme nicht weiter..
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|