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: 43275
Benutzer: 7.224
Aktive Benutzer: 75
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 4 Tagen
- Sundaytrad...
vor 4 Tagen
- TS_6
vor 6 Tagen
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 30.06.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard verstehe diesen Code nicht so ganz

Könnte mir bitte jemand helfen, diesen Code zu "übersetzen", es hakt da am Verständnis bei mir.
Code:
//global:
extern string TimeFrame="Current time frame";
bool   returnBars;
bool   calculateValue;

//Umwandlung:
string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
int stringToTimeFrame(string tfs)
{
   StringToUpper(tfs);
   for(int i=ArraySize(iTfTable)-1; i>=0; i--)
      if(tfs==sTfTable[i] || tfs==""+iTfTable[i])
         return(MathMax(iTfTable[i],Period()));
   return(Period());
}

//int init(): die ersten 3 Zeilen
returnBars     = (TimeFrame=="returnBars");     if(returnBars)     return(0);
calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);
timeFrame      = stringToTimeFrame(TimeFrame);
Ich verstehe nicht, was diese Angaben "returnBars" und "CalculateValue" sollen, TimeFrame ist eine Benutzereingabe und keiner würde auf die Idee kommen, so was da rein zu schreiben, noch dazu wo der Vegleich == erfordert. Und was soll das return(0)? - der ganze Rest wie das Setzen von Buffern usw. wird weggelassen? Und wie kann dann stringToTimeFrame funktionieren?

Die Logik dahinter kapiere ich einfach nicht.
Kann jemand mir helfen? Danke. AVT
  #2 (permalink)  
Alt 30.06.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Is klar, den kann man auch nicht verstehen, wenn nicht der Rest des Codes geliefert wird.
In welcher Funktion steht

returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);
calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);
timeFrame = stringToTimeFrame(TimeFrame);

"returnBars" bzw. "calculateValue" werden sicher nicht der Variablen TimeFrame zugewiesen.

Im Endeffekt soll aus der Funktion stringToTimeFrame() das Ergebnis generiert werden, das größerer oder das aktuelle TimeFrame zurückzugeben.

Nein, mit diesem Schnipsel kann man nix anfangen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 30.06.20
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
Is klar, den kann man auch nicht verstehen, wenn nicht der Rest des Codes geliefert wird.
In welcher Funktion steht

returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);
calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);
timeFrame = stringToTimeFrame(TimeFrame);

"returnBars" bzw. "calculateValue" werden sicher nicht der Variablen TimeFrame zugewiesen.

Im Endeffekt soll aus der Funktion stringToTimeFrame() das Ergebnis generiert werden, das größerer oder das aktuelle TimeFrame zurückzugeben.
traderdoc
Danke für Deine Antwort, traderdoc.
Ich dachte, das wäre aus der Code-Kopie ersichtlich: das sind die ersten Zeilen in der "int init()" Funktion, mit anderen Worten, so beginnt das, was wir jetzt als Anfang der Funktion "int OnInit()" setzen würden - davor stehen nur interne, globale Variablen. Danach wird im ganzen Code nur noch mit den returnBars, calculateValue und timeFrame rumhantiert, darum will/muß ich verstehen, was diese ersten Zeilen in init() eigentlich sollen

(Daß die stringToTimeFrame Funktion solche Angaben wie "M1" in die dazughörige Minuteneinheit umwandelt, ist mir schon klar.)

Also um mal anzufangen:
returnBars = (TimeFrame=="returnBars"); heißt,
die bool Variable "returnBars" ist true, wenn die (extern string) TimeFrame "returnBars" lautet und false wenn sie anders lautet.
Und wenn sie true ist, dann wird init() als Erfolg beendet ?? (wenn ich mich recht erinnere, hieß return(0), bei init() alles ok).
So jedenfalls meine Lesart - und die daraus resultierenden Probleme.

Ich hoffe, das ist jetzt klarer. AVT
  #4 (permalink)  
Alt 30.06.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja und was hat nun "returnBars" und "calculateValue" mit der Sinnhaftigkeit des Namens der Variablen TimeFrame zu tun?

Womit beschäftigst Du Dich denn?

Ich bin raus hier.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 30.06.20
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
Ja und was hat nun "returnBars" und "calculateValue" mit der Sinnhaftigkeit des Namens der Variablen TimeFrame zu tun?
Womit beschäftigst Du Dich denn?
Ich bin raus hier.
Das ist ein Indikator (nicht von mir) und wenn ich im Berechnungscode so was habe - in der Funktion int start():
Code:
 int i,r,counted_bars=IndicatorCounted();
 if(counted_bars<0) return(-1);
 if(counted_bars>0) counted_bars--;
 int limit=MathMin(Bars-counted_bars,Bars-1);
 if(returnBars) { arrUSD[0]=limit; return(0); }

if(calculateValue || timeFrame==Period())
{ // .... mach Berechnungen }

for(i=limit,r=Bars-i-1; i>=0; i--,r++)
{
  int y=iBarShift(NULL,timeFrame,Time[i]);
  if(USD) arrUSD[i] = iCustom(NULL,
                              timeFrame,indicatorFileName,
                              "calculateValue",
                              SymbolsPrefix,SymbolsSuffix,MaMethod,MaFast,MaSlow,Price,USD,0,y);
  if(!Interpolate || y==iBarShift(NULL,
                                  timeFrame,
                                  Time[i-1])) continue;
  if(USD) interpolate(arrUSD,iTime(NULL,
                                   timeFrame,y),i);
}
und eine Extra Funktion:
Code:
int getLimit(int limit,string tsymbol)
{
  if(tsymbol!=Symbol())
  limit=MathMax( MathMin( Bars-1,
                          iCustom(tsymbol,
                          timeFrame,indicatorFileName,
                         "returnBars",0,0)*timeFrame/Period()),
                 limit
               );
  return(limit);
}
dann frage ich mich natürlich, wann wo und wie diese Sachen definiert werden; und dabei stoße ich dann auf diese fragwürdigen Festlegungen in init() - und genau die kapier ich nicht.

Aber ich kann verstehen, daß Du raus bist. Ich bin es ehrlich gesagt auch - ist wohl mal wieder so eine Art Code so zu verkomplizieren, daß keiner weiß, was gemeint ist.
Also entweder ich schreib das Ding von Grund auf neu oder ich klopp es in die Tonne - macht keinen Sinn mit etwas zu arbeiten, was man nicht versteht.
Danke für Deine Mühe. AVT
  #6 (permalink)  
Alt 05.07.20
Neues Mitglied
 
Registriert seit: Jul 2020
Beiträge: 27
Anja befindet sich auf einem aufstrebenden Ast
Standard

Der Schlüssel scheint zu sein, dass TimeFrame extern ist und daher irgendein String dort drin stehen kann.

Dieser String kann z.B. lauten "M1", 1 , "returnBars" oder "calculateValue" und setzt je nach diesem Wert dann die Periode, die von der aktuellen abweichen kann und mit der dann wohl gerechnet wird.

return(0); wird vermutlich benutzt um zu bestimmen, dass ein Wert für die Periode ermittelt werden konnte. Das folgende bedeutet also, steht "returnBars" extern in TimeFrame, also true, dann konnte eine Periode ermittelt werden und springe raus mit return (0), da hier nichts mehr zu tun ist:

returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);

"Current time frame" halte ich für einen Wert ohne Bedeutung für die Programmlogik.
  #7 (permalink)  
Alt 06.07.20
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 Anja Beitrag anzeigen
Der Schlüssel scheint zu sein, dass TimeFrame extern ist und daher irgendein String dort drin stehen kann.
....
"Current time frame" halte ich für einen Wert ohne Bedeutung für die Programmlogik.
Danke Anja für Deine Antwort.
Ehrlich gesagt halte ich den ganzen Code für ziemlich daneben; wenn ich mal Zeit habe, werde ich den vielleicht noch mal ansehen - aber wie schon gesagt, ist wohl eher was für die Tonne (ich hab eigentlich genug bessere Indis).
AVT
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 23:57 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.
-----------------------------------------------------------------------------------------------------------------------------