初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 841

 
Vitaly Muzichenko:

kodobaseにはライブラリがたくさんあり、また、記事も あります。

有名な記事だから仕方ない。

いちいち定義するのは不便です。

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


Codebaseにはライブラリがたくさんありますが、一山当てるような具体的なライブラリをご存知の方がいらっしゃればお聞きしたいのですが

 
Stefan Stoyanov:
記事はよく知られています これは正しいものではありません。

コードベースにはたくさんのライブラリがありますが、特定のライブラリについて知っている人がいれば教えてほしいのです。

2〜3個のライブラリを組み合わせて、自分なりのライブラリを作る必要があります。

 
Vitaly Muzichenko:

2-3個のライブラリを使い、それを使って自分たちのライブラリを作る、つまり完全なライブラリを作る必要があるのです。


ある図書館が何のためにあるのか、どうやって連絡を取るのか、それを教えてくれる図書館索引はどこにあるのでしょうか?

一般的に、私はライブラリーを集めて作りたいとは思いません。
準備ができているライブラリの存在についての私の質問、私は再びそれらを作成する場合、それは記事を通して動作する方がよいです
 
Stefan Stoyanov:

ある図書館が何のためにあるのか、どうやって連絡を取るのか、それを教えてくれる図書館索引はどこにあるのでしょうか。

一般的に、私はライブラリを作ったり、作ったりするのは好きではありません。
質問ですが、既成のライブラリの存在について、再度構築するのであれば、記事を見ながら作業した方が良いと思います

とても作りやすいし、掲示板に書くのに時間がかかるし、自分で問題を作っているようなものです。

その一部をご紹介します。

#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
 

こんなコードがありました。

このコードは、毎回リセットされることなく、ただフォルダに残るように、ある名前のファイルに縮小することができるかどうかを尋ねたいと思います



// Позволяет, как в 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)





 

私は以前、オープナーを このように定義していました。


  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;


この方法は、皆さんと同じですか?

//-------------------------------------------------------------------------------------------------------
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 :

こんなコードがありました。

このコードをある名前のファイルに縮小して、毎回リセットするのではなく、フォルダに留めることができるかどうかをお聞きしたいのです。

作業ファイルの先頭にこの行を追加してください。

 #include  "your_file.mqh" 

your_file.mqhをターミナルの "include "フォルダに置く

 
ううううううううううううううううううううううううううううう拡張子...mq5は、もちろんエラーになります。
ファイル:
 
Stefan Stoyanov:
うっ!拡張子...mq5は、もちろんエラーになります。

OnTick()内にコードを配置しない

前回の記事でお伝えしたように、expert_file.mq5へのdefineを含むファイルyour_file.mqhをインクルードするだけです。

 
Kirill Belousov:

OnTick()内にコードを配置しない

前の投稿でお話したように、expert_file.mq5へのdefineを含むファイルyour_file.mqhをインクルードするだけです。

もうやったよ。ありがとうございます。
理由: