MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 319

 
Vitaly Muzichenko:

limit -チャート上のバーの 数。履歴をスクロールすると、インジケータは履歴の終わりまで表示されます。


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

 

こんにちは、インジケータ、この場合はMoveng、パラメータに書き込む方法を教えてもらえますか - に適用 - 中央値

問題を説明すると、インジケータは配列[][]を持っていて、MAを計算するためにデータを記録します - データはHL/2価格で記録され、デフォルトではありません。

 

こんにちは、CDecisionForestクラスオブジェクトを binファイルに書き込もうとしているのですが(Alglibライブラリのものです)、方法がわかりません。FileWriteStructを使ってみましたが、コンパイラは私のクラスの引数でエラーを出します。

'df' - structures containing objects are not allowed

実際に書くことは可能なのか、それともオブジェクトを分解して部分的に書き、再度組み立てた方がいいのでしょうか?
 
Vitaly Muzichenko:

limit -チャート上のバーの 数。履歴をスクロールしたときに、インジケータが履歴の最後まで表示されるようにします。


拝啓、ご説明申し上げます。

リンク先の情報を使っても成功しませんでした。

自分で限界 値を宣言すると、「Array out of range」ウィンドウが表示されます。

デバッガは、forループで配列のある文字列を指します。

for(int i=0; i<limit; i++) {
    RSI[i] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,i);
  }

for(int i=0; i<limit; i++) {
    BandsMn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_MAIN,i);
    BandsUp[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_UPPER,i);
    BandsDn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_LOWER,i);
  }

もしかしたら、もっとシンプルな作り方があるのでは?
図面はいらない。

現在および直前のバーの値のみ。

 
Ras al Ghul:

拝啓、ご説明をお願いします。

リンク先の情報を使っても、成功しませんでした。

自分で限界 値を宣言した場合、「Array out of range」ウィンドウが表示される。

デバッガは、forループで配列のある文字列を指します。

もっとシンプルな方法でできるかも?
絵は必要ない。

現在と直前のバーの値のみ。

限度額はどのように計算するのですか?

実は、このリミットは、インジケーターの逆算、つまりヒストリーの始まりから終わり(現在のデータまで)にかけて計算されます。

   if(rates_total<нужное_количество_баров_для_верного_расчёта) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) {
      limit=rates_total-нужное_количество_баров_для_верного_расчёта-1;
      // здесь, при необходимости очистки мусора в буферах, их инициализация пустыми значениями
      }
   //---
   for(int i=limit; i>=0; i--) {
      // тут цикл просчёта индикатора
      }
必要なバー数"とは、インディケータが正しく計算される最小のバー 数を意味します。2X2 フラクタルでは 6 本の棒があります。左側に 2 本、中央に 1 本、右側に 2 本、そして右端に 1 本で、これらはフラクタルが再計算されないように完全に形成されている必要があります。
 

こんにちは、インジケータで一次元配列のサイズを大きくする方法を教えてください。

を呼び出すためのバッファインデックスを持っていることが条件です。

また、配列のサイズがバーの 数を超えている場合

 

そんな単純なところで、立ち往生しているように思える。複数のcounter()関数を 並列に実行したい場合、global int chekcount=0; int count=0; ではどうでしょうか?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???

int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;

   return(chekcount);
  }

 
Nauris Zukas:

そんな単純なところで、立ち往生しているように思える。global int chekcount=0; int count=0; counter()関数を 複数並列に実行したい場合、どうしたらよいでしょうか?

クラスを使うか、関数のコピーを別の名前で作ればいいだけです。

 
Vitaly Muzichenko:

クラスのみを使用する、または異なる名前の関数のコピーを作成する。

だから、そんな単純な話じゃないんです...。ありがとうございました。

 

どなたか、この機能をクラスを使って書き換えていただけませんか?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???
int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;
   return(chekcount);
  }