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

 
ns_k:

こんにちは。

インジケーターバッファは インジケーター実行の間に値を保存するのですか、それとも私の端末に何か不具合があるのでしょうか?

インジケータを構築し、カウントアルゴリズムをコメントアウトしてコンパイルを押すと、すべての値がチャートに残ります。バッファの値を更新するには、もう一度チャートにインジケータを置く必要があるかもしれません。計算サイクルが欠けている状態で置いても、まだ同じ値になっています。端末を再起動しないと消えなかった。

コメントをお願いします。

ありがとうございました。

すでに計算された値がバッファに残ってしまう条件が残っているようです。この条件が具体的に何なのか、理解できないのです。端末を再起動すると、問題は解消されます。実際、そういうわけで、私はサービスに要望を書くことはしません。

一般的には、バグではなく、機能なのかも?

ありがとうございました。

 
ns_k:

すでに計算された値がバッファに残ってしまう条件があるようです。この条件とはいったい何なのか、私にはわからない。端末を再起動すると、問題が解消されました。実際、だから私はこのサービスへのアプリケーションを書かないんです。

一般的には、バグではなく、機能なのかも?

ありがとうございました。

充填前や初期化時に配列の値をゼロに戻すだけです。

ArrayInitialize(buffer_data,EMPTY_VALUE);
 
ns_k:

すでに計算された値がバッファに残ってしまう条件があるようです。この条件とはいったい何なのか、私にはわからない。端末を再起動すると、問題が解消されました。実際、そういうわけで、私はサービスに要望を書くことはしません。

一般的には、バグではなく、機能なのかも?

ありがとうございました。

値をリセットする必要があります
 
tol64:

充填前または初期化中に、配列の値をゼロにリセットするだけです。

ありがとうございます!!!
 

右クリックのコンテキストメニューに、カスタムインジケータを 持つ独立した項目があると良いですね

ありがとうございました。

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

別の質問をどうぞ :)

コメントをチャートウィンドウではなく、インジケーターウィンドウに表示する方法を教えてください。

ありがとうございました。

 
ns_k:

コメントをチャート画面ではなく、インジケーター画面に表示させるには?

この行動に対する規定はない。本当に必要であれば、オブジェクトを使用します。
 

こんにちは。

可能であれば、インジケーターのプロパティウィンドウを 非モーダルにしておくとよいでしょう

ありがとうございました。

 
ns_k:

こんにちは。

可能であれば、インジケーターのプロパティウィンドウを 非モーダルにしておくとよいでしょう

ありがとうございました。

そして、Apply ボタンを追加します。つまり、値を変更したので、Apply ボタンを押せば、ウィンドウを閉じることなく変更を確認することができるのです。そうすれば、もっと便利になるはずです。

また、何度目かの変更となりますが、プロパティウィンドウのサイズを変更できるようになりました。

P.S. サービスデスクにもっと書いてください。

 

いわば、どこがダサいのかわからない。

int OnCalculate (const int rates_total,      // size of input time series
                 const int prev_calculated,  // bars handled in previous call
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
                 )

  {
   
   
   
   doDrawIndicator(gSymbols[0],rates_total,g1ThermB);


//Comment(rates_total);
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int doDrawIndicator(string xSymbol, int xRatesTotal, double &xBuffer[])//,double &xPrice[],double &xBuffer[])
  {
   double l1Close[]; // , l2Close[];
   datetime lTime[];
   datetime lEnd,lStart;
   int copied;
   ArrayInitialize(xBuffer,0);
   lEnd=TimeCurrent();
   lStart=(TimeCurrent()/86400)*86400+3600;

   copied=CopyTime(xSymbol,Period(),lStart,lEnd,lTime);
   if(copied==-1){Print("Can't copy time",__FUNCSIG__);return(0);}
   copied=CopyClose(xSymbol,Period(),lStart,lEnd,l1Close);
   if(copied==-1){Print("Ждите...1");return(0);}

   sThermometer lT;
  // Print("rates_total=",rates_total);
   //Comment(xSymbol);
   Comment(copied);
   g1RM=new CRangeManager(1,0.2,20,xSymbol);
 
   for(int i=0;i<copied;i++)
     {
      lT=g1RM.getStateByValue(l1Close[copied-i-1]);
      if(gThermRange==Up && lT.cTemperature.State<7 || gThermRange==Down && lT.cTemperature.State>6 )
        {
         xBuffer[xRatesTotal-i-1]=lT.cTemperature.Temperature;
        }
      else
        {
         xBuffer[xRatesTotal-i-1]=0;
        }
     }

     
   delete g1RM;
   return(1);

  }

インジケータが更新されない、つまり左隅に739 sayが表示され続けています(お分かりのようにminutiaeに投げています)。そして、コンパイルを押すとすぐにインジケータが更新される。コードのどこにエラーが あるのでしょうか?

ありがとうございます。