記事"MQL5 標準ライブラリの拡張とコードの再利用"についてのディスカッション

 

新しい記事 MQL5 標準ライブラリの拡張とコードの再利用 はパブリッシュされました:

MQL5 標準ライブラリによってみなさんの開発者としての生活は楽になります。しかしながらそれは世界中の開発者全員のすべてのニーズを実装するわけではありません。よってみなさんがカスタム的なものをもっと必要とするなら一歩先へすすんで拡張することができます。本稿は MetaQuotesの Zig-Zag テクニカルインディケータを標準ライブラリに統合する方法をご紹介します。私達はMetaQuotes の設計哲学により自分自身の目標を達成しようという気持ちになります。

一言で言えばMQL5 API はみなさんがコード再利用、信頼性、柔軟性、管理のしやすさを享受できるようにするためのものです。これはセオリーが言うことですが、それをすべて越え て、 MQL5 で前進し続け、マルチ通貨 Experts Advisorsのようなより洗練されたものを開発しようとしているなら、まず標準ライブラリでコードをすることができます。それでみなさんのアプリケー ションは成功した人生を保証されるのです。みなさんの EAs やインディケータが複雑になればなるほど、フレームワーク開発に関連するコンセプトを使いこなることが必要になります。実生活の例として、私は個人的に一 から私のプロジェクトの基盤を強化するニーズを示す複雑なマルチ通貨 EA を開発する必要があります。

Figure 2. We start downloading MetaQuotes' ZigZag from our MT5 Terminal

作者: Jordi Bassaganas

削除済み  

ありがとう。とても参考になった。

 

なぜCINDICATOBUFFERの近くに*があり、その後にatが使われているのか、この記事の中でこのコードが何を意味するのか理解しようと試みている。

((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");

詳しい説明をお願いします。

感謝

 
rodlivar:<br/ translate="no">。

なぜCINDICATOBUFFERの近くに*をつけ、atを使うのか、このコードの意味をこの記事で理解しようとしている。

((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");

詳しい説明をお願いします。

サンクス

* はポインタを 示します。MQL5でオブジェクト・ポインターを使用する」に詳しい説明があります。
 

文字列

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep);

インジケーターへのパスが見つかりません。

呼び出そうとしているインジケータは標準フォルダにあります。

 
Tango_X:

文字列

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep);

インジケータへのパスが見つかりません。

私が呼び出そうとしているインジケータはstandardフォルダにあります。

StandardのZigzagはExamplesフォルダにあります。


 
Rashid Umarov:

標準のZigzagはExamplesフォルダにあります。パスにフォルダ名を追加する必要があります。



2017.07.12 10:38:05.703 Proba2(EURUSD.m,M1) cannot load custom indicator 'ExamplesZigZag' [4302].

すべて画像の通りです。
 
Tango_X:

2017.07.12 10:38:05.703 Proba2 (EURUSD.m,M1) cannot load custom indicator 'ExamplesZigZag'[4302].

すべて画像通りです。

誰がエラーコードを 見ますか?

err_market_not_selected

4302

MarketWatchでシンボルが選択されていません。

 
Rashid Umarov:

誰がエラーコードを 見るのか?

err_market_not_selected

4302

MarketWatchでシンボルが選択されていません。


NULLを指定するとうまくいき、"EURUSD "を指定するとうまくいかない!

bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- 履歴をチェックする
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- 作成
   //m_handle=iCustom(symbol,period, "Examples}ZigZag",depth,deviation_create,backstep);
     //m_handle=iCustom("EURUSD",period, "ExamplesZigZag",depth,deviation_create,backstep); - does NOT work
     m_handle=iCustom(NULL,period,"Examples\\ZigZag",depth,deviation_create,backstep);       - работает
//--- 結果をチェックする
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- インジケータの作成に成功
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- 初期化エラー
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- OK
   return(true);
  }
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- OK
   return(true);
  }
 
解決しました!この疑問は解決しました!「EURUSD.m」というプレフィックス付きのシンボル名を持って います。
 
//+------------------------------------------------------------------+
//|| ジグザグ・インジケータの作成|
//+------------------------------------------------------------------+
bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- 履歴をチェックする
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- 作成
   m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep);
//--- 結果をチェックする
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- インジケータの作成に成功
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- 初期化エラー
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- OK
   return(true);
  }
bool CiZigZag::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
                        const int depth,const int deviation_init,const int backstep)
  {
   if(CreateBuffers(symbol,period,3))
     {
      //--- レンダリングステータス行
      m_name  ="ZigZag";
      m_status="("+symbol+","+PeriodDescription()+","+
               IntegerToString(depth)+","+IntegerToString(deviation_init)+","+
               IntegerToString(backstep)+") H="+IntegerToString(m_handle);
      //--- 設定を保存する
      m_depth=depth;
      m_deviation=deviation_init;
      m_backstep=backstep;       
      //--- バッファの作成
      ((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
      ((CIndicatorBuffer*)At(1)).Name("HIGH");
      ((CIndicatorBuffer*)At(2)).Name("LOW");
      //--- OK
      return(true);
     }
//--- エラー
   return(false);
  }


インジケータ・バッファ配列のインデックス方向が、ArraySetAsSeriesと同じように、ここでどのように設定さ れるかを理解する手助けをしてください。デフォルトの方向は現在から過去ですが、過去から現在にする必要があります。昨日からこの質問で悩んでいます! 助けてください!