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

 
ANDREY:

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

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

ありがとうございました、そしてお騒がせしました。

配列が空になっているのでは?機能を少し変えて確認する

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }
もし、0と表示されたら、配列の充填に問題があるかどうか調べてください。
 
Alexey Viktorov:

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

エラーを発見しました。最後のPrint(str);の行で、estrの 代わりに strを渡して いますね。 直したら全部OKになった。

おかげさまで、このテーマを概要だけでなく、詳細に把握することができました。唯一の未解決の質問は、私の投稿 プラスポイントについてでした。

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

 
Maxim Kuznetsov:

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

私はこれをやったことがない、いくつかの "ダミー "のためのリンクをすることができますか?
 
ANDREY:

エラーを発見しました。最後のPrint(str);の行で、estrの 代わりに strを渡して いますね。 直したら全部OKになった。

おかげさまで、このテーマを概要だけでなく、詳細に把握することができました。唯一の未解決の質問は、私の投稿 プラスポイントについてでした。

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

それを伝えたのは、私ではありません。

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

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

アレクセイ・ステパネンコ, 2021.03.13 09:04

Print("-LoY[0]-", DoubleToString(LoY[0],4), "---LoY[1]--", DoubleToString(LoY[1],4), "---LoY[2]--" , DoubleToString(LoY[2],4), "---LoY[3]--" , DoubleToString(LoY[3],4),................  "---LoY[30]--" ,  DoubleToString(LoY[30],4) );

配列を表示したい場合や、配列を表示するための関数を別に作りたい場合などです。

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);
   }

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

PrintArray(LoY);

ただ、気にしていなかっただけです。ただ、コンパイルがエラーにならずに終わったのが理解できない...。

それを理解した上で、全シークエンスを書き上げた場合の答えとは

ANDREY:

やっとわかったような気がする(ちょっと鈍感)・・・・。

最初の反復では、文字列変数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)+" がこのアルゴリズムでどんな役割を果たすのかはまだ謎です。

よろしくお願いします。

そして、それがすべて正しくタイムテーブル化されているかというと、なんとも不思議なことに......。
 
MakarFX:
私はそれをやったことがない、いくつかのリンクは、 "ダミー "することができますか?

C#やDelphiなどで書いたことがなければ、何の役にも立ちません。Windowsはどこでもできるように作られていますが、まずは「どこでもできる」方法を身につける必要があります。

最初にC#、WinForms(例)の短いコースがあります。インターネット上にたくさんあるはずです。これは、フォーラムの範囲を少し超えています。

 

アレクセイ・ヴィクトロフ

Alexey Viktorov:


そして、すべてが正しく書かれているとしたら、どんな謎が残っているのだろう...。

というのも、 足し算の 話をされているとき、私は赤い プラス記号 "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+" にだけ注目して、 str+= には注目していなかったのです。

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

各反復での文字列の接続は、str+=の 代入操作と一緒に1か所、 1回だけ行われるという私の理解から、曖昧さなく次のようになります。

つまり、+という記号を使って、文字列変数strのある要素の値と、同じ文字列変数の別の要素の値を接続(プラス)しています str
そして、この 赤い+の 意味がまだよくわかりませんstr+="--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+",";.この赤いプラスとプラスの間にある値に対して、和の演算が行われていない......ように見えるのです。もし、私の考えが正しければ、この赤いプラスはどのような機能を果たしているのでしょうか?そして、もし間違っているとしたら、私は何かを理解できていないに違いない。

ところで、投稿 黄色い線では、+DoubleToString(LoY[r],4) の前に、このような赤いプラスが1つだけありますね。でも、そのあとが見えないんです。

よろしくお願いします。

 
Alexey Viktorov:

ただ、コンパイルがどのようにエラーなく行われたかは不明です、、、。


そして、コンパイラからstrが未定義 であると指摘されたのを見て、自分でユーザー関数の本体内でstrを初期化したのです。でも、そのことを伝えるのを忘れていました。
そして、ユーザー関数のあちこちからstrを削除し、ユーザー関数の最終行にstrの 代わりにeStrを 括弧で囲みました。

 
Maxim Kuznetsov:

C#やDelphiなどで書いたことがなければ、何の役にも立ちません。Windowsはどこでもできるように作られていますが、まずは「どこでもできる」方法を身につける必要があります。

最初にC#、WinForms(例)の短いコースがあります。インターネット上にたくさんあるはずです。これは、フォーラムの範囲を少し超えています。

なるほど......フォームが作れるんですね。


それよりも、自分のウィンドウとExpert Advisorの間のデータのやりとりがどうなっているのかに興味があります。

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

Aleksei Stepanenko:

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


分かりやすい説明ありがとうございます。

ちなみに、黄色のプラスを削除したら、コンパイラがエラーになりました。つまり、この構造全体の中で何らかの役割を担っているわけです。でも、なんだろう・・・、やっぱりわからない。青色プラスだけで文字列の足し算を するときに、何のために必要なのだろう。あなたの説明から判断すると、この構造には他に何もありません......私の記憶違いでなければ。

そして、string(i)について...。タイプ変換について ....は、どちらかというと、私の中では明確です。はっきりしないのは......stringは変数の型名、iは配列要素のインデックスを示すカウンタ変数 であること。 また、なぜiが括弧()なのか? これまで、括弧は関数の特性だと考えていました。例えば、Print( )です。また、関数によっては、括弧の中に別のデータを入れることもあります。 しかし、括弧はiとこの文字列(i)全体に対して どのような意味を持ち、どのような機能を果たしているのでしょうか。一見すると、以前はi 変数の型がint型(整数)だったのを、i変数の型をint型からstring型(文字 列)に変更したように見えますね。 しかし、丸カッコを含む私は、そう思わせてくれない。

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