Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43267
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 249
Gesamt: 249
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 02.05.18
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 126
Angel befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 03.05.18
Premium Mitglied
 
Registriert seit: Apr 2015
Beiträge: 422
Raul0 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

den Codeschnipsel nutze ich für die Anzeige an Trendstellen, evt. kannst Du Dir damit etwas zurechtbauen.

PHP-Code:
//optische Ausgabe - Punkte
string name2 "Auf_"+(string)Time[0]; ObjectCreate(name2OBJ_TEXT,0,0,0); ObjectSetText(name2"."15); ObjectSet(name2OBJPROP_COLORBlue); ObjectSet(name2OBJPROP_TIME1Time[0]); ObjectSet(name2OBJPROP_PRICE1, ( iHigh(NULL,0,0) + iLow(NULL,0,0) ) / );
string name1 "Ab_"+(string)Time[0];  ObjectCreate(name1OBJ_TEXT,0,0,0); ObjectSetText(name1"."15); ObjectSet(name1OBJPROP_COLORRed);  ObjectSet(name1OBJPROP_TIME1Time[0]); ObjectSet(name1OBJPROP_PRICE1, ( iHigh(NULL,0,0) + iLow(NULL,0,0) ) / ); 
__________________

Easy Trading Assistant
  #3 (permalink)  
Alt 03.05.18
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 240
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Hi,

schnell und einfach:

wenn MA10>MA20
dann
ChartSetInteger(0,CHART_COLOR_BACKGROUND,clrYellow );
sonst
ChartSetInteger(0,CHART_COLOR_BACKGROUND,clrGreen) ;

Grüße
  #4 (permalink)  
Alt 03.05.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard 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)
  #5 (permalink)  
Alt 03.05.18
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 240
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Entschuldigung, ich hatte diesen Link vergessen:
https://www.forexfactory.com/showthread.php?t=329313
Gruß
  #6 (permalink)  
Alt 03.05.18
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 126
Angel befindet sich auf einem aufstrebenden Ast
Standard

Wow - Danke ! Ich muss es mir heute Abend ansehen, aber es sieht schon mal vielversprechend aus.. :-)
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
  #7 (permalink)  
Alt 03.05.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #8 (permalink)  
Alt 03.05.18
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 126
Angel befindet sich auf einem aufstrebenden Ast
Standard

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
  #9 (permalink)  
Alt 04.05.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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];
Für ma_shift, ma_method und applied_price dann noch die entsprechenden Werte eintragen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 04.05.18
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 126
Angel befindet sich auf einem aufstrebenden Ast
Standard

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:
if (EMA10 EMA20datetime time1 Time[1]; 
if (
EMA10 EMA20datetime time2 Time[2]; 
Dein Code
PHP-Code:
if (EMA10_1 EMA20_1datetime time1 Time[1]; 
if (
EMA10_1 EMA20_1datetime time2 Time[2]; 
ist vermutlich "resistenter" gegen einen ein Zucken des Kurses. Frage: Hast Du Dich bei der zweiten Zeile verschrieben und es gehört Time[2] statt Time[1] da hin? (Ich glaube es kaum...)

Nichtsdestotrotz: Ich habe es hier mal mit EMA 2 und 4 versucht (zum Testen sieht man es schneller):

PHP-Code:
double EMA10_1 iMA(NULL120101); // "NULL"= (Current Chart) , Timeframe , Periode ("0"=Current , "1"=M1 usw), MA_Shift , MA_Method ("0"=SMA,"1"=EMA usw) , Enum_Applied_Price ("0"=Close , "1"=Open usw) , shift)
double EMA10_2 iMA(NULL120102);
double EMA20_1 iMA(NULL140101);
double EMA20_2 iMA(NULL140102);

if (
EMA10_2 EMA20_2 && EMA10_1 EMA20_1datetime time1 Time[1]; 
if (
EMA10_2 EMA20_2 && EMA10_1 EMA20_1datetime time2 Time[2];

ObjectMove("Rechteck",1,Time[1],1.19100);

ObjectCreate(0,"Rechteck",OBJ_RECTANGLE,0,Time[1],1.19100,Time[2],1.20100);
ObjectSetInteger(0,"Rechteck",OBJPROP_COLOR,clrBlueViolet );
ObjectSetInteger(0,"Rechteck",OBJPROP_WIDTH,);
ObjectSetInteger(0,"Rechteck",OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,"Rechteck",OBJPROP_BACK,true); 
Problem: Ein Balken einer Kerze mit den korrekten y-Werten erscheint für einen Tick und verschwindet wieder. Das Rechteck wird auch nicht verschoben....
Ich komme nicht weiter..
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------