|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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); Die Logik dahinter kapiere ich einfach nicht. Kann jemand mir helfen? Danke. AVT |
|
|||
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. |
|
|||
Zitat:
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 |
|
|||
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. |
|
|||
Zitat:
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); } 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); } 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 |
|
|||
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. |
|
|||
Zitat:
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 |
Lesezeichen |
|
|