|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Vortagshoch bzw Vortagstief Ausdehnung
Guten Abend,
ich bin seit ein paar Tagen schon auf der Suche nach meinem Fehler und habe noch nichts adäquates finden können und hoffe nun auf eure Hilfe Folgendes soll realisiert werden: Ich möchte wie im Titel die Ausdehnungen anzeigen lassen. Allerdings stehe ich auf dem Schlauch. Es soll das VortagsTief (gestern) vom VortagsTief (vorgestern) abgezogen werden (Beispiel Dienstag war das Tief bei 1.14887 und am Montag bei 1.14789 dann lautet die Rechnung 1.14887-1.14789 = 0.00098 ;; das Gleiche dann für Freitag,Donnerstag,Mittwoch etc) Das Problem dabei ist, dass das Ergebnis nicht jedes mal positiv ausfällt. Jetzt soll gezählt werden, wie oft es Positiv ausfällt und damit dann der Durchschnitt errechnet werden (Es sollen beispielsweise 7 Tage angeschaut werden, dann sind von den 7 Tagen nur 4 positiv. Man rechnet also die 4 positiven Tage zusammen und teilt die dann auch nur durch 4) das Problem liegt hauptsächlich in meiner Unerfahrenheit wie es scheint denn ich bekomme nichtmal die ersten Schritte gerechnet ohne dass Quatsch raus kommt. vielleicht kann mir hier jemand helfen und mich mal vom Schlauch schubsen. Mein aktueller Versuch sieht wie folgt aus: Code:
void calculateHighExtension() { int divider=0,difference; int LookBack = iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,DaysToLookBack),false); int limit = MathMin(Bars,LookBack+1); for (int cnt=DaysToLookBack-1; cnt>=1;cnt--) { if((iHigh(Symbol(),PERIOD_D1,cnt))-iHigh(Symbol(),PERIOD_D1,cnt-1)>0) { difference=iHigh(Symbol(),PERIOD_D1,cnt)-iHigh(Symbol(),PERIOD_D1,cnt-1); //Print("Differenz "+difference); Print(iHigh(Symbol(),PERIOD_D1,cnt)-iHigh(Symbol(),PERIOD_D1,cnt+1)); }; //Print("Counter High "+divider); //Print("Difference "+difference); //Schaue 6 Tage zurück und berechne den Durchschnitt wie weit das letzte High überboten wurde } nicht wundern wenn nun wirklich ein arg grober Fehler drin ist - ich habe schon ein paar Versuche durch und mir gehen echt die Ideen aus (möglicherweise ist aktuell sogar die Rechnung falsch da ich geistig am Ende bin) |
|
|||
Zitat:
2. Um die 4 positiven Tage zu addieren und durch 4 zu Teilen, musst du die 4 Tage auch speichern. Code:
int LookBack = iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,DaysToLookBack),false); Außerdem würde ich den letzten Parameter mit "true" angeben. TRUE: Wenn Kerze mit der abgefragten Zeit nicht gefunden, so gib -1 zurück. FALSE: Wenn Kerze mit der abgefragten Zeit nicht gefunden, so nehme die naheliegenste. Code:
int limit = MathMin(Bars,LookBack+1); Code:
for (int cnt=DaysToLookBack-1; cnt>=1;cnt--) Code:
for(int cnt=5-1; cnt>=1; cnt--) 2. Du willst doch den einen Tag mit den jeweils vorherigen vergleichen? Da muss die Schleife umgekehrt sein. So fängst du mit dem "ältesten" Tag an. Code:
if((iHigh(Symbol(),PERIOD_D1,cnt))-iHigh(Symbol(),PERIOD_D1,cnt-1)>0) Nimm mal den Code: Code:
void calculateHighExtension() { int i, pos_count=0; double difference, tmp=0; string sym = Symbol(); int period = Period(); //Beispiel DaysToLookBack = 5; for(int i=1; i<=DaysToLookBack; i++) { if(iHigh(sym,period,i) > iHigh(sym,period,i+1)) { tmp += iHigh(sym,period,i) - iHigh(sym,period,i+1); pos_count++; } } //Durchschnitt difference = tmp / pos_count; } Geändert von next user (13.07.17 um 18:50 Uhr) |
|
|||
Zitat:
Zitat:
Zu deinem Code: Erstmal vielen Dank für deine Mühe und...es ist so einfach und auch so logisch...WARUM KOMM ICH NICHT AUF SOWAS |
|
|||
weil dir
und du hast du dich wahrscheinlich so auf bestimmte Codesegmente fixiert, das du "den Wald vor lauter Bäumen" nicht siehst. Peinlich ist es nicht. Ist jedem, der etwas Programmiert hat schon passiert. Oft hilft dann einfach abschalten und später "resettet" zu starten. Jedenfalls ist es immer besser zu fragen, als das |
|
|||
Ja da hast du sicher recht - Außerdem ist Urlaubszeit - zumindest für meine Kollegen
Falls noch jemand vor dem selben Problem steht wie ich - hier meine aktuelle Fassung des laufenden Codes (absichtlich etwas geteilt für den Fall dass ich was ändern möchte) Code:
void calculateHighExtension() { int pos_count=0,pos_count2=0; double difference_h,difference_l,tmp=0,tmp2=0; string sym = Symbol(); int period = PERIOD_D1; for(int i=1; i<=DaysToLookBack+1; i++) { if(iHigh(sym,period,i)>iHigh(sym,period,i+1)) { tmp+=iHigh(sym,period,i)-iHigh(sym,period,i+1); pos_count++; } } for(int i=1; i<=DaysToLookBack+1; i++) { if(iLow(sym,period,i+1)<iLow(sym,period,i)) { tmp2+=iLow(sym,period,i+1)-iLow(sym,period,i); pos_count2++; } } //Durchschnitt difference_h = tmp / pos_count; difference_l = tmp2 / pos_count2; //Verrechnen mit gestrigem High/Low StBa_H = High[1]+difference_h; StBa_L = Low[1]+difference_l; DrawOnChart(); } |
|
|||
Jetzt machste für die LOW-FOR-Schleife ja doch wieder andersrum.
Code:
for(int i=1; i<=DaysToLookBack+1; i++) { if(iLow(sym,period,i+1)<iLow(sym,period,i)) { tmp2+=iLow(sym,period,i+1)-iLow(sym,period,i); pos_count2++; } } Code:
StBa_H = High[1]+difference_h; StBa_L = Low[1]+difference_l; |
|
|||
Ich traue meiner Verwirrung nicht - gut möglich dass ich schon bei der Beschreibung im ersten Post gepennt habe.
Fakt ist aber, dass ich eine Excel Tabelle habe (schon vor längerer Zeit erstellt als der Kopf frisch war in der auch die Referenzwerte passen) und die Werte so genau überein stimmen. Auch über mehrere Tage. Bei dem StBa_L steht ein Plus, da der Wert bei Low negativ ist - und - wird + und das sollte so nicht sein - als ich ein + draus machte, änderte sich das vorzeichen (verstanden wieso habe ich das nicht wirklich da es mathematisch ja eigentlich nicht korrekt ist, oder?) |
|
|||
Entweder dein Excel hat eine tiefgreifende Autokorrektur, oder du hast dich im ersten Post selbst verwirrt, oder du hast mich angesteckt.
|
|
|||
Zitat:
Soll StBa_L einfach nur die "Range" zwischen gestrigem Tief und dem Durchschnitt der letzten x Kerzen sein? So eine Art Support-Zone? |
|
|||
Zitat:
Diesen Durchschnittswert addiere bzw subtrahiere ich vom gestrigen tief und bekomme (hoffentlich) einen Anhaltspunkt wohin der Kurs laufen könnte wenn er das gestrige tief bricht Gesendet von meinem SM-G930F mit Tapatalk |
Lesezeichen |
Stichworte |
ausdehnung, excel, mql4, programmierung, programmierung metatrader, programmierung mql4, titel |
|
|