記事"CGraphic ライブラリを使用したスキャルピング相場深度の実装"についてのディスカッション - ページ 4

 
"Each such class has a common parent, the CNode class, which performs only one function, i.e. stores the type of the basic primitive. 
Its only protected constructor requires type specification during element creation." 

CNodeクラスは基本プリミティブの型を保存しません。 CEIChartはm_obj_type メンバによって保存します。

ありがとう Vasiliy

 

ターミナルの新しいビルド(およそバージョン2170以降)で、記事(「スキャルパー用グラスの作成」)のソースに問題が発生しました。
特に、メインファイル"MarketBook.mq5"がコンパイル中に重大なエラーを 発生する

' Event' - 予期しないトークン、おそらく型が見つからない? MBookBtn.mqh 57 12

' Event' -関数が すでに定義されており、型が異なる MBookBtn.mqh 57 12

何が問題で、どのように修正すればよいか教えてください。


追伸:2015年の古い記事から「MarketBook.mq5」を確認しました。そのプロジェクトでも同じようなエラーが 発生することが判明しました:

'Show' - unexpected token, probably type is missing? MBookFon.mqh 47 11
'Show' -function already defined and has different type MBookFon.mqh 47 11

 
avento:

ターミナルの新しいビルド(およそバージョン2170以降)で、記事(「スキャルパー用グラスの作成」)のソースに問題が発生しました。
特に、メインファイル"MarketBook.mq5"がコンパイル中に重大なエラーを 発生する

' Event' - 予期しないトークン、おそらく型が見つからない? MBookBtn.mqh 57 12

' Event' -関数が すでに定義されており、型が異なる MBookBtn.mqh 57 12

何が問題で、どのように修正すればよいか教えてください。


言語が発展し、要件が厳しくなっています。

ファイル「MBookBtn.mqh」、CMBookBtn クラスの宣言を見てみましょう - 関数Eventはvoidとして宣言されています

//+------------------------------------------------------------------+
//|| このクラスは、グラフの上部にあるボタンを表します。
//| ティックチャートと注文表が表示される。
//| もう一度ボタンを押すとパネルが隠れる。
//+------------------------------------------------------------------+
class CMBookBtn : public CElButton
  {
private:

   CMBookArea        m_book_area;
   bool              m_showed_book;
public:
                     CMBookBtn();
   void              SetMarketBookSymbol(string symbol);
   void              Refresh();
   void              Event(int id,long lparam,double dparam,string sparam);
   void              Clear(void);
   virtual void      OnShow(void);
  };

関数Eventはvoidとして宣言されています:

関数はすでに定義されており、異なる型を持っている。

2つ目のエラーは、"'Event' - function already defined and has different type MBookBtn.mqh 57 12" - つまり、関数はvoid型で宣言され、ここでは型を指定せずに宣言されています。


つまり、関数はvoid型で宣言されていたのに、ここでは型が指定されていないのです

//+------------------------------------------------------------------+
//|| ボタンがクリックされるのを阻止する。もし
//| 押された状態でクリックするとパネルを表示する。の状態であれば
||押し下げる - パネルを隠す|
//+------------------------------------------------------------------+
void  CMBookBtn::Event(int id,long lparam,double dparam,string sparam)
  {

- クラス本体の関数の前にvoidを追加するだけ です。


では、コンパイルしてみよう。IndicatorsMarketBookArticle\MarketBook.mq5 - エラーはなく、実行すると、ガラスが動作する。

 
Lucas:
コード全体をコピー&ペーストしてコンパイルしようとすると、コンパイル時にエラーが出ます。解決策をご存知の方はいらっしゃいますか?

ルーカス、もしエラーがCMBookBtnクラスの予期しないトークンに 関係しているのなら、CMBookBtn::Event関数の呼び出しの前にvoidを 付けなければならない。


今のところそうなっています。

 
ウラジミール・カルプートフ 丁寧な返信をありがとう!
 

こんにちは、Vasiliy。素晴らしい記事をありがとう。私はMQL5の世界では新参者ですが、あなたのコードをローカルで実行しようとする際、難題に直面しています。とてもくだらない問題だと思いますが、解決できません。

MarketBook.mq5からあなたのコードをコンパイルしようとすると、以下のようなエラーが表示されます。

この問題を解決する方法を教えてください。

 
これは私が直面しているエラーです。助けていただけますか?
ファイル:
Error.jpg  365 kb
 

こんにちは。

MarketBook.mqhクラスで検索されたインデックスの時間を固定することが可能かどうか教えてください。

void Calculation(void)
   {
      // アスク側
      int begin = (int)m_book.InfoGetInteger(MBOOK_LAST_ASK_INDEX);
      int end = (int)m_book.InfoGetInteger(MBOOK_BEST_ASK_INDEX);
      //m_ask_best_index
      for(int i = begin; i <= end && begin !=-1; i++)
      {
         if(m_book.MarketBook[i].volume > m_max_ask_volume)
         {
            m_max_ask_index = i;
            m_max_ask_volume = m_book.MarketBook[i].volume;
         }
         m_sum_ask_volume += m_book.MarketBook[i].volume;
      }
      // 入札側
      begin = (int)m_book.InfoGetInteger(MBOOK_BEST_BID_INDEX);
      end = (int)m_book.InfoGetInteger(MBOOK_LAST_BID_INDEX);
      for(int i = begin; i <= end && begin != -1; i++)
      {
         if(m_book.MarketBook[i].volume > m_max_bid_volume)
         {
            m_max_bid_index = i;
            m_max_bid_volume = m_book.MarketBook[i].volume;
         }
         m_sum_bid_volume += m_book.MarketBook[i].volume;
      }
      m_calculation = true;
   }

このメソッドでは、Ask側とBid側の最大出来高が 位置する価格インデックスを見つけます。

また、このインデックスを取得した終端時刻も知りたいです。


スタックの構造

struct MqlBookInfo 
  { 
   ENUM_BOOK_TYPE   type;            // ENUM_BOOK_TYPE列挙からのリクエストタイプ 
   double           price;           // 価格 
   long             volume;          // ボリューム 
   double           volume_real;     正確さを増した//ボリューム 
  };


4つのパラメータがありますが、時間がありません。


どのようにインデックスが見つかった時刻を記憶すればよいのでしょうか?

 
Konstantin Seredkin:

こんにちは。

MarketBook.mqhクラスで見つかったインデックスの時間を記憶することは可能ですか?

このメソッドでは、Ask側とBid側の最大出来高が立って いる価格インデックスを見つけます。

また、この指数をどの終値で取得したのかも知りたいです。


ガラスの構造


4つのパラメーターを与えるが、時間がない。


どなたか、見つかったインデックスの時間を記憶する方法を教えていただけませんか?

構造体を継承し、追加フィールドを追加して、そこにティックタイムを追加する。

 
Konstantin Seredkin:

こんにちは。

MarketBook.mqhクラスで見つかったインデックスの時間を記憶することは可能ですか?

このメソッドでは、Ask側とBid側の最大出来高が立って いる価格インデックスを見つけます。

また、この指数をどの終値で取得したのかも知りたいです。

ガラスの構造

パラメータは4つあるが、時間がない。

発見されたインデックスの時刻を記憶する方法を、どなたか教えてください。

MQL5では見積もり到着時刻を覚えることはできないので、時間はない。OnBookEventイベントが到着した瞬間の時刻を覚えるのが精一杯なので、覚えておくこと。価格スタックの到着時刻が必要なのであって、その最大インデックスを見つけた時刻が必要なのではありません。