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

 
Aleksei Stepanenko:

を作成するか、別途、配列印刷機能を作成します。

そして、どこからでも呼び出せる

Alexey、長い間黙っていたのですが、これを静かに見ることができません...明示的な型変換の方がずっとシンプルでコストがかからないのに、なぜIntegerToString()を使うのか......。

eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", ";
 

を、習慣にしています。)

 
Aleksei Stepanenko:

を作成するか、別途、配列印刷機能を作成します。

そして、どこからでも呼び出せる

ご理解とご解説をありがとうございました。私は、初めて知る情報を勉強し、理解するために一旦停止しています。

 
Alexey Viktorov:

Alexey、長い間黙っていましたが、静かに見れません...この場合、明示的な型変換の方がはるかに簡単でコストがかからないのに、なぜIntegerToString()を使うのでしょうか......。

そして、こちらこそ、貴重な補足をありがとうございました。

 
EAの外部ウィンドウの作成について、どこを見て読めばいいか教えてください。
 
MakarFX:
EAの外部ウィンドウの作成について、どこを見ればいいのか、読めばいいのか、教えてください。

C#やDelphi、その他あらゆるものに関して、フォーラムや出版物で...

tcl.Eval("toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko:

を作成するか、別途、配列印刷機能を作成します。

そして、どこからでも呼び出せる

カスタム配列の印刷機能を別に作ることにしました。というか、作らないで、( PrintArray() )でそれは、もうすでにやっていることです。

私は何をしたのだろう?

OnTick()関数の中にユーザーPrintArray()関数の呼び出しを配置したのですが・・・。Kovalev氏のチュートリアルにあるように

2.PrintArray()関数の本体をOnTick()関数の外に配置したのですが・・・。... コバレフのチュートリアルにある通りです。

この関数の本体からの新しい変数はすべてローカルです。これらはこの関数内で宣言され、初期化される。

int P1=0;
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+(r*2)*0.0001;
P1=1;
}
}
//*************************************************************  Б Л О К    N 2
for(int x=0; x<31;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

void PrintArray(double &eArray)
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

あなたの関数には何も手を加えていません。しかし、コンパイラはなぜか6つのエラーを出します。そして、そのどれもがユーザー機能に関わるものです。

何がいけなかったのか、教えていただけるとありがたいです。
ありがとうございます。

 
ANDREY:

カスタム配列の印刷機能を別に作ることにしました。というか、作らないで、使う( PrintArray( )をすでに行っています。

私は何をしたのだろう?

OnTick()関数の中にユーザーPrintArray()関数の呼び出しを配置したのですが・・・。Kovalev氏のチュートリアルにあるように

2.PrintArray()関数の本体をOnTick()関数の外に配置したのですが・・・。... コバレフのチュートリアルにある通りです。

この関数本体からの新しい変数は、すべてローカル変数です。この関数の中で宣言され、初期化されます。

あなたの関数には何も手を加えていません。しかし、コンパイラはなぜか6つのエラーを出します。そして、そのすべてがユーザー機能に関連している。

何がいけなかったのか、教えていただけるとありがたいです。
ありがとうございます。

正確には覚えていないし、確認するのも億劫だ。角括弧を追加してみてください

void PrintArray(double &eArray[])
 

Aleksei Stepanenko:

string str="";

for(int r=0; r<31;r++)
   {
   LoY[r]=1.6104+r*0.0001;
   str+="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";
   }
Print(str);


やっとわかったような気がします(鈍感なもので)・・・・。

最初の反復では、文字列変数strは空である。文字=+は、strに対して、自分自身を空(値なし)にすることと、自分自身を空にして値を持つ文字列、すなわち"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+","; を追加 することを指示しています。この文字列の値は、" --LoY[0]--, --1.6104-- " である。これらの操作の後、strは最初の反復で値"--LoY[0]--, --1.6104-- "取得 する。御社の用語で理解すると、これを第1エレメントと呼ぶのですね。

2回目の繰り返しで、strはすでに「--LoY[0]--, -1」という値で最初の要素を持って います。6104-- " 文字 =+ は str最初の要素の値を 代入するように指示しという文字列を追加し、他の値、すなわち "--LoY["+"+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+","; を最初の 要素の値として追加します。この文字列の値はすでに" --LoY[1]--, --1.6105-- "である。これらの操作の後、2回目の反復でstrは--LoY[0]-- --1.6104----LoY[1]-- --1.6105--」という値を取得する。つまり、strは2番目の要素を持ち、30回目の反復では strは配列要素の値が異なる30個の要素を持つ ことになります。

ループが終了すると、30個の項目を持つ文字列変数strがループの外に一度だけ出力されます。
このアルゴリズムを理解するのに時間がかかったのは、あなたが足し算について話しているとき、私は赤いプラス記号 "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+" にだけ注意を払い、 str+= には注意を払わなかったからです。

というわけで、赤いプラス「--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" がこのアルゴリズムでどんな役割を果たすのかはまだ謎です。

よろしくお願いします。

 
Alexey Viktorov:

正確には覚えていないし、確認するのも億劫だ。角括弧を追加してみてください

角括弧を追加しました void PrintArray(double &eArray[]) コンパイラは、エラーや警告を表示していません。
しかし......Print() 関数は、なぜか一度も印刷 されませんでした。

私もそうなので、あなたの怠慢はよくわかります。あまりの手抜きと私の熱意がそれに代わるものであれば、カスタム関数の他の不具合を教えていただければ幸いです。

ご迷惑をおかけして申し訳ございません。