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

 
Roman Sharanov:

インジケーターの書き方がよくわからないのですが、何が問題なのでしょうか?

active_1と active_ 2の価格差を示す線を引く必要があります。

動作確認済み

また、この線上にプロットされる平均ma_period ma_period が必要ですが、これには問題があります - それは表示されません。

コピーした結果を確認しない。

ティック毎に履歴を全てコピーするのです。

rates_total ではなく Bars() の数を、ネイティブでないシンボル(現在のチャートのシンボル ではない)からコピーする必要があります。

2分ごとに、例えば非ネイティブシンボルの現在のバータイムを要求して、履歴データを最新に保つ必要があります。

SimpleMAOnBuffer()を使用して、dataBufferのデータを滑らかにします。

 
Artyom Trishkin:

コピーした結果を確認しない。

各ティックで履歴を全てコピーするのです。

非ネイティブシンボル(現在のチャートシンボル ではない)には、rates_totalではなく、Bars()の数値がコピーされるべきです。

2分ごとに、例えば非ネイティブシンボルの現在のバータイムを要求して、その履歴データを最新に保つ必要があります。

SimpleMAOnBuffer()を使用して、dataBufferのデータを滑らかにします。

このように、全く動かなくなった

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   int bars1 = Bars(active_1, timeframe), bars2 = Bars(active_2, timeframe);
   
   if(CopyClose(active_1,timeframe,0,bars1,firstBuffer) < 0) return 0;
   if(CopyClose(active_2,timeframe,0,bars2,secondBuffer) < 0) return 0;
   if(bars1 != bars2) return 0;
   int first, bar;
   
   if(prev_calculated == 0) first = begin; else first = prev_calculated - 1;
   
   for(bar = first; bar<bars1; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   SimpleMAOnBuffer(bars1, prev_calculated, begin, ma_period, dataBuffer, maBuffer);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer(){
   iTime(active_1,timeframe,1);
   iTime(active_2,timeframe,1);
}
void OnDeinit(const int reason){
   EventKillTimer();
}
 

ごあいさつ

EAが注文を開いたときに、ある値を記録して、例えばチケットでその特定の注文を参照できるようにする方法を教えていただけませんか。

 
Andrey Sokolov:

ごあいさつ

EAが注文を開いたときに、ある値を記録して、例えばチケットでその特定の注文を参照できるようにする方法を教えていただけませんか。

コメントにて

 

ボラティリティを観察したい。この目的のために、私はtmp1配列で終値と始値の差を計算し、それを使って関心のある期間についてSMAをプロットします。


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[])
  {


int i;
double tmp1[];

      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total; i++)
      {
      tmp1[i]=MathMax(open[i],close[i])-MathMin(open[i],close[i]);      
      ip1Buf[i]=iMA(NULL,0,1,0,0,tmp1[i],0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }


コンパイル時にエラーは発生せず、ターミナルにインジケータが描画されず、ログにCADJPY,H1: array out of range in '_t1.mq4' (65,11) と表示されています。

これは、差分MathMax-MathMinを 計算している行ですが、何が原因でしょうか?


 
psyman:

ボラティリティを観察したい。この目的のために、私はtmp1配列で終値と始値の差を計算し、それを使って関心のある期間についてSMAをプロットしています。



コンパイル時にエラーは発生せず、ターミナルにインジケータが描画されず、ログにCADJPY,H1: array out of range in '_t1.mq4' (65,11) と表示されています。

これは、差分MathMax-MathMinを 計算している行ですが、何が原因でしょうか?


コードを理解していないのですが、もしそうなら。

for(i=1; i<rates_total-1; i++)
 

うまくいかないんです。


アップデイト

文字列を必要最低限に簡略化 tmp1[i]=close[i]; エラーに変わりはない。

 
psyman:

ボラティリティを観察したい。この目的のために、私はtmp1配列で終値と始値の差を計算し、それを使って関心のある期間についてSMAをプロットします。



コンパイル時にエラーは発生せず、ターミナルにインジケータが描画されず、ログにCADJPY,H1: array out of range in '_t1.mq4' (65,11) と表示されています。

差分MathMax-MathMinを 算出するラインです。


配列tmp[]は動的配列として宣言され、最初は長さが0である。それゆえ、エラーが発生するのです。

この配列は、計算用指標バッファとして 宣言しておく必要があります。

 
 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MQL4初心者のためのあらゆる質問、アルゴリズムやコードに関するヘルプとディスカッション

アレクセイ・ビクトロフ さん 2018.10.16 12:31

配列tmp[]は動的配列として宣言され、最初は長さが0である。それゆえ、エラーが発生するのです。

この配列は、計算用指標バッファとして 宣言する必要があります。


なぜ動的配列ではだめなのでしょうか?

この場合、私は何の計算もせずに終値をそこに上書きしています。

インジケーターバッファーの使い方はどこで読めますか?