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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36916
Benutzer: 6.081
Aktive Benutzer: 495
Links: 80
Wir begrüßen unseren neuesten Benutzer: DarthTrader
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 14 Stunden
- DarthTrade...
vor 16 Stunden
- Eren
vor 23 Stunden
- Rene1504
vor einem Tag
- ibdafx
vor einem Tag
- Batangenyo

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

Empfehlungen

Werbung

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 13.07.17
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard 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)
  #2 (permalink)  
Alt 13.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 250
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von skynat Beitrag anzeigen
Man rechnet also die 4 positiven Tage zusammen und teilt die dann auch nur durch 4
...
Code:
  int divider=0,difference;
1. Die Differenz zweier Gleitpunktzahlen würde ich nicht in einer Variablen vom Typ Ganzzahl speichern.
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);
Macht nicht gerade das, was du denkst. Hier fragst du nach dem Index der Kerze, welche die Zeit von der Kerze "DaysToLookBack" hat.
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);
Hier nimmst du die Kerze von LookBack (DaysToLookBack) und vergleichst sie mit der totalen Anzahl an Kerzen. Was davon wird wohl der kleinere Wert sein?
Code:
for (int cnt=DaysToLookBack-1; cnt>=1;cnt--)
Beispiel DaysToLookBack = 5 würde wie folgt aussehen:
Code:
for(int cnt=5-1; cnt>=1; cnt--)
1. Du könntest auch das "-1" weglassen und dafür "cnt>1" schreiben.
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)
Hier fragst du ab, ob vorgestern - gestern größer als 0 ist. Du wolltest es doch aber andersrum?

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;
}
skynat likes this.

Geändert von next user (13.07.17 um 18:50 Uhr)
  #3 (permalink)  
Alt 13.07.17
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
1. Die Differenz zweier Gleitpunktzahlen würde ich nicht in einer Variablen vom Typ Ganzzahl speichern.
2. Um die 4 positiven Tage zu addieren und durch 4 zu Teilen, musst du die 4 Tage auch speichern.
Oh je - jetzt wo ich darauf gestoßen werde - ja es ist totaler quatsch - ist auch schon behoben

Zitat:
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)
Hier fragst du ab, ob vorgestern - gestern größer als 0 ist. Du wolltest es doch aber andersrum?
Ja du hast absolut recht - wird immer peinlicher hier

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
  #4 (permalink)  
Alt 13.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 250
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von skynat Beitrag anzeigen
es ist so einfach und auch so logisch...WARUM KOMM ICH NICHT AUF SOWAS
weil dir
Zitat:
Zitat von skynat Beitrag anzeigen
gehen echt die Ideen aus
und du
Zitat:
Zitat von skynat Beitrag anzeigen
geistig am Ende bist)
hast du dich wahrscheinlich so auf bestimmte Codesegmente fixiert, das du "den Wald vor lauter Bäumen" nicht siehst.

Zitat:
Zitat von skynat Beitrag anzeigen
Ja du hast absolut recht - wird immer peinlicher hier
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
Zitat:
Zitat von skynat Beitrag anzeigen
geistig am Ende
Zitat:
Zitat von skynat Beitrag anzeigen
die Ideen aus(gehen)
  #5 (permalink)  
Alt 13.07.17
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

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();

  }
  #6 (permalink)  
Alt 13.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 250
next user befindet sich auf einem aufstrebenden Ast
Standard

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++;
        }
     }
Und sollte bei folgendem
Code:
   StBa_H = High[1]+difference_h;
   StBa_L = Low[1]+difference_l;
bei Low nicht ein minus?
  #7 (permalink)  
Alt 13.07.17
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

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?)
  #8 (permalink)  
Alt 13.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 250
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von skynat Beitrag anzeigen
Fakt ist aber, dass ich eine Excel Tabelle habe...
...und die Werte so genau überein stimmen. Auch über mehrere Tage.
Entweder dein Excel hat eine tiefgreifende Autokorrektur, oder du hast dich im ersten Post selbst verwirrt, oder du hast mich angesteckt.
  #9 (permalink)  
Alt 14.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 250
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von skynat Beitrag anzeigen
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?)
Habs gestern vielleicht auch einfach nur falsch verstanden.
Soll StBa_L einfach nur die "Range" zwischen gestrigem Tief und dem Durchschnitt der letzten x Kerzen sein? So eine Art Support-Zone?
  #10 (permalink)  
Alt 14.07.17
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von next user Beitrag anzeigen
Habs gestern vielleicht auch einfach nur falsch verstanden.
Soll StBa_L einfach nur die "Range" zwischen gestrigem Tief und dem Durchschnitt der letzten x Kerzen sein? So eine Art Support-Zone?
So ähnlich. Die Frage dahinter lautet "wenn ein tief gebrochen wird, um wie weit im Durchschnitt der Periode x?"
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
Thema geschlossen

Lesezeichen

Stichworte
ausdehnung, excel, mql4, programmierung, programmierung metatrader, programmierung mql4, titel


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:04 Uhr.



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