Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43260
Benutzer: 7.224
Aktive Benutzer: 74
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Stunden
- Sundaytrad...
vor 8 Stunden
- TS_6
vor 2 Tagen
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 16.02.22
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard SetIndexShift mit neg. Wert geht nicht

Bei positiven Werten ist alles ok, sobald ich aber einen neg. Wert eintrage, wird nichts mehr angzeigt. So sieht der Code aus (CANDSHIFT ist Benutzereingabe):
in OnInit:
Code:
   SetIndexBuffer(0,candleHigh ,INDICATOR_DATA);
   SetIndexBuffer(1,candleLow  ,INDICATOR_DATA); 
   SetIndexBuffer(2,candleOpen ,INDICATOR_DATA); 
   for(int i=0; i<3; i++) { SetIndexShift(i,CANDSHIFT); }
die Werte dazu in OnCalculate:
Code:
   if(_Period<=PERIOD_D1)
   {
      double Half=CalcHalf();
      // ================================= Painting of Bar
      double OpenVal = iOpen(NULL,PERIOD_D1,0);
      candleOpen [0] = OpenVal;
      
      candleHigh [0] = OpenVal + Half;
      candleLow  [0] = OpenVal - Half;
      SetIndexLabel(0,"xHalf "+DoubleToStr(Half,_Digits)); 
      SetIndexLabel(1,"xHalf "+DoubleToStr(Half,_Digits)); 
   }
Der Halbwertspreis wird nur einmal pro Tag berechnet und dann in Bar-Form gemalt.
Woran liegt es, daß ich hier keinen negativen Wert für CANDSHIFT verwenden kann?
AVT
  #2 (permalink)  
Alt 16.02.22
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ohne wirklich Ahnung zu haben:

Vermutlich weil die Loop des Geräts so oder so mit Bar 0 anfängt. Und SetIndexDraw() oder wies heißt wohl auch bei 0 anfängt.

https://docs.mql4.com/customind/setindexdrawbegin

Wie man das ändern kann, weiß ich nicht. Man kann ja MAs mit MA-Chartshift auf Bars legen, die negativ sind. Schau Dir vielleicht mal die Codes von MA-Indis an.
  #3 (permalink)  
Alt 16.02.22
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Ohne wirklich Ahnung zu haben:
Vermutlich weil die Loop des Geräts so oder so mit Bar 0 anfängt.
Da ist gar kein Loop in OnCalculate. AVT
  #4 (permalink)  
Alt 16.02.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Bei meinen Indikatoren kann ich da einen ngativen Wert eingeben und damit die Werte nach links schieben.
Bei mir würde da aber auch kein
SetIndexBuffer(0,candleHigh ,INDICATOR_DATA);
stehen, sondern
SetIndexBuffer(0,candleHigh);

Ob das eine Rolle spielt, probier es aus.
Ich finde auch zu INDICATOR_DATA in der Referenz keine Erklärung, ebenso wenig zu ENUM_INDEXBUFFER_TYPE.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 16.02.22
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Bei mir würde da aber auch kein
SetIndexBuffer(0,candleHigh ,INDICATOR_DATA);
stehen, sondern
SetIndexBuffer(0,candleHigh);

Ob das eine Rolle spielt, probier es aus.
traderdoc
Danke. Und ja, spielt ne Rolle, geht jetzt zwar nach links, dafür bleibt das einmal Gemalte allerdings im Chart (mit anderen Worten ich baue links langsam "einen Bretterzaun").
Da muß ich noch mal überlegen, ob ich das irgendwie ändern kann, oder ob das grundsätzlich nur rechts-Shift funktioniert.
AVT
  #6 (permalink)  
Alt 16.02.22
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Lad vielleicht mal den ganzen Code hoch.
  #7 (permalink)  
Alt 16.02.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Lad vielleicht mal den ganzen Code hoch.
Wozu das denn? Da ist wirklich kein Loop drin.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 16.02.22
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Wozu das denn? Da ist wirklich kein Loop drin.
traderdoc

So, den Zaun habe ich auch abgerissen. Danke noch mal @traderdoc.
Hatte nebenbei gesagt, noch nie Probleme mit INDICATOR_DATA und _CALCULATIONS Spezifikation dahinter (nutze ich eigentlich nur, wenn Hilfsbuffer drin sind, um ne Unterscheidung zu machen, aber gut, fliegt im MT4 raus).
AVT
  #9 (permalink)  
Alt 16.02.22
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard Lösung

Nach dem Hinweis von traderdoc sieht die Lösung in OnInit nun so aus:
Code:
   SetIndexBuffer(0,candleHigh);
   SetIndexBuffer(1,candleLow); 
   SetIndexBuffer(2,candleOpen); 
   if(CANDSHIFT>=0)
   {
      for (int i=0; i<3; i++) { SetIndexDrawBegin(i,Bars-1);               
                                SetIndexShift(i,CANDSHIFT); }
   }
   else
   {
      for (int i=0; i<3; i++) { SetIndexDrawBegin(i,Bars-1+CANDSHIFT);               
                                SetIndexShift(i,CANDSHIFT); }
   }
Falls jemand (oder ich selber) mal wieder aufm Schlauch steht.
AVT
  #10 (permalink)  
Alt 16.02.22
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Code:
for(int i=0; i<3; i++) { SetIndexShift(i,CANDSHIFT); }
Thema geschlossen

Lesezeichen


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 +2. Es ist jetzt 20:25 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.
-----------------------------------------------------------------------------------------------------------------------------