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

 

この形式の問題があります:このコードがあります

int P=3;

if(P==5){then is necessary to get into library and calculate something}とあるように、図書館に入り、何かを計算する必要がある。

この場合、P=3、つまり条件はfalseです。 問題は、コンパイラがライブラリに入り込んでコードを無為に実行するのか、それともコンパイラが現在のファイルにあるコードを読み込む のか、ということです。なぜそんなことを聞いたのか、その理由を説明します。さて、見てください、次のような形式条件を書くとします。

int Y=4;

if(Y==4){do something} else{do something else}.この状況では、次のような絵が得られます。 Y==4、最初に言えることは、優先演算子が実行されましたが、else{do something else}ブロックもチェックされて計算されますが(ただ計算されて常に)、優先は式 if(Y==4) なので、実行はされないでしょう。つまり、真実の結果に関わらず、機械はすべての計算を行う、つまり二次オペレータの実行の有無に関わらず、計算のために電力を消費するのである。この場合、ライブラリの利用はどの程度有効なのでしょうか。また、ロボットの性能を上げるためには、mql4のコード自体をできるだけ簡潔にした方が良いのでしょうか。このテーマについて、何か考えをお持ちの方はいらっしゃいますか?

 
Pavel Soin:

こんにちは。

例えば、2つのインジケータがあり、1つ目には4つのバッファがあり、2つ目には2つのバッファがあるとします。チャート上に配置し、データウィンドウを 開く(CTRL+D)と、0から5までの6つのバッファがリストアップされます。このリストから、例えばバッファ5の値をMQLで読み取るにはどうしたらよいでしょうか?iCustomを必要なインジケータで使用するのは不便です。このリストを利用するとより便利です。そうしているのはわかるが、どうやって?

どなたか助けてください。

 
Seric29:

この形式の問題があります:このコードがあります

int P=3;

if(P==5){then is necessary to get into library and calculate something}とあるように、図書館に入り、何かを計算する必要がある。

この状況ではP=3、つまり条件は偽で、問題はコンパイラがライブラリに入り込んで無為にコードを実行するのか、それともコンパイラが現在のファイルにあるコードを読み込む のか、ということです。なぜそんなことを聞いたのか、その理由を説明します。さて、見てください、次のような形式条件を書くとします。

int Y=4;

if(Y==4){do something} else{do something else}.この状況では、次のような絵が得られます。 Y==4、最初に言えることは、優先演算子が実行されましたが、else{do something else}ブロックもチェックされて計算されますが(ただ計算されて常に)、優先は式 if(Y==4) なので、実行はされないでしょう。つまり、真実の結果に関わらず、機械はすべての計算を行う、つまり二次オペレータの実行の有無に関わらず、計算のために電力を消費するのである。この場合、ライブラリの利用はどの程度有効なのでしょうか。また、ロボットの性能を上げるためには、mql4のコード自体をできるだけ簡潔にした方が良いのでしょうか。このテーマについて、何か考えをお持ちの方はいらっしゃいますか?

MetaEditorのビルトインデバッガは、これらの質問に非常によく答えてくれます。同じような条件のスクリプトを書いて、デバッガでステップバイステップで実行する必要があります。プログラムが何もないところに入らないことがお分かりいただけると思います。さらに、このような条件

int P = 3, Y = 4;
if(P == 5 && Y == 4)

P != 3 を確認した後は、何も確認しない。

 
こんにちは。週末にチャート上のすべてのグラフィックエレメントを 維持するために何をすべきか教えてください。
 
Lomonosov1991:
こんにちは。週末にチャート上のすべてのグラフィックエレメントを維持するために何をすべきか教えてください。
削除しないでください
 
Alexey Viktorov:

MetaEditorのビルトインデバッガは、これらの質問に非常によく答えてくれます。同じような条件のスクリプトを書いて、デバッガでステップバイステップで実行してください。プログラムが何もないところに入ってこない様子がわかると思います。さらに、この条件

P != 3 を確認した後は、何も確認しない。

以下はその一例です。

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

この場合のpp=8は8ですが、コンパイラは大きな数字に悪態をついて、変数に入れたいのですが、pp=8が正しいのでこの数字は変数に入れません、しかしなぜかコンパイラは私が書いたものを掘り始め、それがあり得るかどうかをチェックします、だからチェックしカウントするのはコンパイラであると結論します、まあこれは確かに大雑把なミスです、もっと重大ではないミスをしても、コンパイラはそれがあり得るかどうかチェックするのでしょう。そういうことを書いているつもりはないのですが、コンパイラは本来やるべきことをチェックするのですが、やらずにカウントしてしまうのです。MQL4デバッガで作業してみました。こちらの説明書を読みましたhttps://www.metatrader5.com/ru/metaeditor/help/development/debug しかし、説明書には「check against history」というタブがアクティブになっているはずですが、それすら見当たりません。

 
Seric29:

以下はその一例です。

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

この場合のpp=8は8ですが、変数に入れたい大きな数字にコンパイラは悪態をつきますが、pp=8が正しいのでこの数字は変数に入れません、しかしなぜかコンパイラは私が書いたものを掘り始め、それがあり得るかどうかをチェックします、したがってすべてをチェックし追加するのはコンパイラであると結論付けられます、もちろんこれは粗いエラーです、もっと深刻なエラーを作ることができます、それでもコンパイラはありえるかどうかをチェックするのです。そういうことを書いているつもりはないのですが、コンパイラは本来やるべきことをチェックするのですが、やらずにカウントしてしまうのです。MQL4デバッガで作業してみましたhttps://www.metatrader5.com/ru/metaeditor/help/development/debug しかし、「履歴との照合」タブがアクティブになるはずなのに、アクティブにもなりません。実際のデータで確認してみましたが、この場合、変数の値は表示されず、すべて空になっています。どうしてそのようになるのか不思議に思っています。

コンパイラは、コンパイル時に有効な値をチェックするが、実行時にはチェックしない。変数の種類と、その変数の値が許される範囲について読んでみてください。もしコンパイラがこれらの範囲をチェックしなかった場合、コード実行の瞬間に値が失われ、間違った計算結果が得られる可能性があります。だから、この動作はプログラマーにとって良いことなのだ。コンパイラは、精度が落ちる可能性があることを常に警告します。

また、MT4デバッガーはヒストリカルデータでは動作しません。MT5テスターの特権です。しかし、いずれにせよ履歴上でスクリプトをデバッグする意味はありませんし、私が提案することはMT4テスターで観察することができます。コードの先頭にブレークポイントを設定し、実行順序や変数の値を一歩一歩観察すればよいのです。

 
デコンパイルされたコードの断片を議論することは問題ないと思いますか?
せめて変数の名前を変えるべきだろう。そんなに図々しいことではないのですが・・・。
 
Artyom Trishkin:
デコンパイルされたコードの断片を議論することは問題ないと思いますか?

せめて変数の名前を変えるべきだろう。そうでないと、図々しすぎる...。

このEAは、MQL4形式でオンライン公開されています。トリオダンサー 自分用にリメイクしているところです。

 
Lomonosov1991:

このアドバイザーは、オンラインでご利用いただけます。トリオダンサー 自分用に改造しているところです。

それがどうした?盗品を売買する場所がある。
このフォーラムはその範疇ではありません。
少し前にハッキング(作者から盗むこと)され、今は自分で作っているのですね。このサイトではご遠慮ください。ここには倫理がある。