Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 841

 
Vitaly Muzichenko:

Die kodobase ist voll von Bibliotheken und es gibt auch einen Artikel

Es ist ein berühmter Artikel, aber nicht der richtige.

Es ist unpraktisch, sie jedes Mal zu definieren.

 
double Bid  double Ask  double Close[]  double Low[]  и так далее


Codebase ist voll von Bibliotheken, aber ich frage, ob jemand weiß, von spezifischen Bibliotheken, die einen Berg ein für alle Mal machen könnte

 
Stefan Stoyanov:
Der Artikel ist bekannt. Das ist nicht richtig.

Codebase ist voll von Bibliotheken, aber ich frage nach spezifischen Bibliotheken, wenn jemand weiß.

Sie müssen 2-3 Bibliotheken nehmen und daraus eine eigene erstellen - vollständig.

 
Vitaly Muzichenko:

Wir müssen 2-3 Bibliotheken nehmen und sie nutzen, um eine eigene Bibliothek zu erstellen - eine vollständige Bibliothek.


Wo ist der Bibliotheksindex, der uns sagt, wofür eine bestimmte Bibliothek da ist und wie man mit ihr kommuniziert?

Im Allgemeinen möchte ich keine Bibliotheken sammeln und erstellen.
Meine Frage über die Existenz von fertigen Bibliotheken, wenn ich sie wieder zu erstellen, ist es besser, durch den Artikel zu arbeiten
 
Stefan Stoyanov:

Wo ist der Bibliotheksindex, der uns sagt, wofür eine bestimmte Bibliothek da ist und wie man mit ihr kommuniziert?

Im Allgemeinen möchte ich keine Bibliotheken bauen und erstellen.
Meine Frage ist über die Existenz von vorgefertigten Bibliotheken, wenn ich gehe, um sie wieder zu bauen, ist es besser, durch den Artikel zu arbeiten

Es ist sehr einfach zu bauen, man braucht länger, um in einem Forum zu schreiben, und man schafft sich selbst Probleme.

Hier ist ein Teil davon:

#ifdef __MQL5__
datetime iTime(string symb,ENUM_TIMEFRAMES tf,int index) {
datetime Arr[1];
  return((CopyTime(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE);
 }
//-------------------------------------------------------------------------------------------------------
double iOpen(string symb,ENUM_TIMEFRAMES tf,int index) {
double Arr[1];
  return((CopyOpen(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE);
 }
//-------------------------------------------------------------------------------------------------------
double iClose(string symb,ENUM_TIMEFRAMES tf,int index) {
double Arr[1];
  return((CopyClose(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE);
 }
//-------------------------------------------------------------------------------------------------------
double iLow(string symb,ENUM_TIMEFRAMES tf,int index) {
double Arr[1];
  return((CopyLow(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE);
 }
//-------------------------------------------------------------------------------------------------------
double iHigh(string symb,ENUM_TIMEFRAMES tf,int index) {
double Arr[1];
  return((CopyHigh(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE);
 }
//-------------------------------------------------------------------------------------------------------
double AccountFreeMarginCheck(const string Symb,const int Cmd,const double dVolume) {
 double Margin;
   return(::OrderCalcMargin((ENUM_ORDER_TYPE)Cmd, Symb, dVolume,
          ::SymbolInfoDouble(Symb,(Cmd==::ORDER_TYPE_BUY) ? ::SYMBOL_ASK : ::SYMBOL_BID),Margin) ?
          ::AccountInfoDouble(::ACCOUNT_MARGIN_FREE) - Margin : -1);
 }
#endif
 

Ich habe folgenden Code gefunden

Ich möchte fragen, ob dieser Code auf eine Datei mit irgendeinem Namen reduziert werden kann, so dass er nicht jedes Mal zurückgesetzt wird, sondern einfach in dem Ordner bleibt



// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define  DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get( const string Symb, const int TimeFrame, const int iShift )                                  \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos ) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME  NAME;                                                                                           \
                                                                                                              \
  T i##NAME( const string Symb, const int TimeFrame, const int iShift )                                       \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb,  TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)





 

Früher habe ich einen Öffner so definiert:


  MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar  
   ArraySetAsSeries(mrate,true);
   if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
     {
      Print("Error copying rates/history data - error:",GetLastError(),"!!");
      return(0);
     }
   double close=mrate[0].close; double open=mrate[0].open;
   double high=mrate[0].high;   double low=mrate[0].low;


Ist diese Methode die gleiche wie Ihre?

//-------------------------------------------------------------------------------------------------------
double iOpen(string symb,ENUM_TIMEFRAMES tf,int index) {
double Arr[1];
  return((CopyOpen(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE);
 }
//------------------------------------------------------------------------------




 
Stefan Stoyanov :

Ich habe folgenden Code gefunden

Ich möchte fragen, ob dieser Code auf eine Datei mit irgendeinem Namen reduziert werden kann, so dass er nicht jedes Mal zurückgesetzt wird, sondern einfach in dem Ordner bleibt

Fügen Sie diese Zeile am Anfang der Arbeitsdatei ein.

 #include  "your_file.mqh" 

Legen Sie Ihre_Datei.mqh in den Ordner "include" Ihres Terminals

 
Igitt!!! Die Erweiterung ....mq5 wird natürlich einen Fehler aufweisen
Dateien:
 
Stefan Stoyanov:
Igitt! Die Erweiterung ....mq5 wird natürlich einen Fehler aufweisen

keinen Code innerhalb von OnTick() einfügen

Fügen Sie einfach die Datei your_file.mqh mit Defines in Ihre expert_file.mq5 ein, wie ich es Ihnen in meinem vorherigen Beitrag erklärt habe

 
Kirill Belousov:

keinen Code innerhalb von OnTick() einfügen

Fügen Sie einfach die Datei your_file.mqh mit Defines in Ihre expert_file.mq5 ein, wie ich in meinem vorherigen Beitrag beschrieben habe

Das habe ich bereits getan. Danke!
Grund der Beschwerde: