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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4484
Beiträge: 40719
Benutzer: 6.868
Aktive Benutzer: 253
Links: 80
Wir begrüßen unseren neuesten Benutzer: huseceti
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 16 Stunden
- huseceti
vor einem Tag
- petra25
vor 4 Tagen
- hk0163
vor 4 Tagen
- magnr1
vor 5 Tagen
- boypac007

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 101
Gesamt: 104
Team: 0
Team:  
Benutzer:  Anja, AVT, Indikator-Trading
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor einer Woche
AVT AVT ist gerade online
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
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
Mit Zitat antworten
  #2 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.376
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.
Mit Zitat antworten
  #3 (permalink)  
Alt vor einer Woche
AVT AVT ist gerade online
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
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
Mit Zitat antworten
  #4 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.376
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.
Mit Zitat antworten
  #5 (permalink)  
Alt vor einer Woche
AVT AVT ist gerade online
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
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
Mit Zitat antworten
  #6 (permalink)  
Alt vor 6 Tagen
Neues Mitglied
 
Registriert seit: Jul 2020
Beiträge: 4
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.
Mit Zitat antworten
  #7 (permalink)  
Alt vor 4 Tagen
AVT AVT ist gerade online
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
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
Mit Zitat antworten
Antwort

Lesezeichen

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





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