エラー、バグ、質問 - ページ 1190

 
すみません、MT4での話です
 
Luckhuman:
すみません、MT4での話です。
プロパティストライクのディレクティブを追加してみてください。多分、ログに何らかのエラーが書き込まれるでしょう。
 
Luckhuman:
申し訳ありませんが、これはMT4での話です
残念ながら、CopySpread()関数は MetaTrader 4ではサポートされていません(ヘルプにエラーがありました)。
 
Automated-Trading:
残念ながら、CopySpread()関数は MetaTrader 4ではサポートされていません(ヘルプにエラーがありました)。
MT4がサポートするインジケーターバッファの数は?17個のバッファーしか結合できなかった
 
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <Object.mqh>

class CDoubleDynArray : public CObject
  {
public:
   double            Buffer[];

                     CDoubleDynArray(void){}
                    ~CDoubleDynArray(void){}
  };

CDoubleDynArray *buffers[];

int OnInit()
  {
//--- indicator buffers mapping
   ArrayResize(buffers,24);
   int i;
   for(i=0;i<ArraySize(buffers);i++)
      buffers[i]=new CDoubleDynArray;

   IndicatorBuffers(ArraySize(buffers));
   SetIndexBuffer(0,buffers[0].Buffer);
   for(i=1;i<ArraySize(buffers);i++)
     {
      if(!SetIndexBuffer(i,buffers[i].Buffer,INDICATOR_CALCULATIONS))
         Print(i," ",GetLastError());
      else
         Print(i," ",ArraySize(buffers[i].Buffer));
     }
//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   IndicatorBuffers(1);
   for(int i=1;i<ArraySize(buffers);i++)
     {
      delete buffers[i];
      buffers[i]=NULL;
     }
   delete buffers[0]; 
   ArrayResize(buffers,0); 
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


 
Luckhuman:


コードのどこに17だけって書いてあるんだ? 24を作ってるんだろう?

ログの内容を教えてください。

 
Luckhuman:
MT4がサポートするインジケーターバッファの数は?17個のバッファーしか結合できなかった

MT4では512個のバッファが利用可能です。

バッファの数は 512 を超えてはならず、indicator_buffers プロパティで指定された値より小さくはならない。 カスタム・インジケータがカウントのために追加のバッファを必要とする場合、この関数を使用してバッファの合計数を指定する必要があります。

例では、行を追加する必要があります。

#property indicator_buffers 24
IndicatorBuffers - Документация на MQL4
  • docs.mql4.com
IndicatorBuffers - Документация на MQL4
 
Automated-Trading:


例では、行を追加する必要があります。

MT5のように、プロパティプロットの欠落について警告を出すことはできますか?
 
Automated-Trading:

MT4では512個のバッファが利用可能です。

この例では、行を追加する必要があります。

この行では、バッファの数を指定しています。

IndicatorBuffers(ArraySize(buffers));

以下は、その結果のスクリーンショットです。

 
Automated-Trading:

MT4では512個のバッファが利用可能です。

例に一行追加する必要があります。

#property indicator_buffers 24

このラインだと、うまくいくんです。しかし、その場合、IndicatorBuffers()関数は動作しません。なぜなら、このコードで使用されているのは、値24のものだからです。

ご容赦ください。テンプレートのインジケータを起点に、テスト用の例としてコードを切り出しました。インジケータに次のような行があった。

#property indicator_buffers 1
#property indicator_plots   1