エラー、バグ、質問 - ページ 1177

 
svds75:

こんにちは。トレンドラインの プロパティを照会すると、W1のみ、またはMN1のみを表示するように手動でフラグを設定したにもかかわらず、変数resが常に真になるのはなぜか、教えていただけませんか?

片方の半面だけに表示する必要があります。

とる- はプロパティを取得しています。また、res=trueの場合は、プロパティの取得に成功したことを示すに過ぎない。

プロパティを設定するには、...set...を使用します。

 

前回の記事の続きですが、科学的な手法でバグの原因となっている問題箇所を見つけることが出来ました。

この機能を持ったライブラリーがあります。

//---- testbuglib.mq5 ------

#property library

class A { }; class B   { private:    A* a; public:    A* b; }; int Test() export {   return 0; }

以下はメインファイル です。

#include <Files\File.mqh>  // тут можно указать любой файл mqh

#import "testbuglib.ex5"
  int Test();
#import  

int OnInit() {  Test(); return 0; }

その結果、Expert Advisor は動作せず、ログに「EX5 の読み込みに失敗しました」と表示されます。

ファイル:
TestBug.mq5  1 kb
 
svds75:

こんにちは。手動でW1のみ、またはMN1のみを表示するようにフラグを設定したにもかかわらず、トレンドラインの プロパティを要求すると、変数resが常に真になるのはなぜか教えてください。

片方の半面だけに表示させたい。

パラメータ数が正しくありません。関数を1つのオプションとして呼び出していますが、2つのオプションとして呼び出すか、結果を比較する必要があります。
 
TheLiteShadow:
それはそうですが、新しいバーができるたびに、定義されたバッファの最後の「インデックス」をすべて「クリーニング」しなければならないということでしょうか。問題は、その理由です。MT4ではそのような状況はなく、初期化時にクリーニングしていたのはわかりますが、それならMT自身が行うべきで、同じ意味で、初期化ではプログラマーではなくMTが行うべきで、何のためにインジケータバッファが単なるメモリ割り当て なのか、よくわかりません.........。
何年か前にこの質問をしたとき、「これは最適化のためにやっているのだ」と言われたことがあります。必要な分だけ正確に初期化するのです。また、すぐに計算データを記入すれば、事前にゼロを書き込む必要は全くありません。MT5は、MT4とは様々な点で異なっています。
 
marketeer:
数年前にこの質問をしたとき、「最適化のためだ」と言われたことがあります。必要な分だけ正確に初期化するのです。また、すぐに計算データを記入すれば、あらかじめゼロを書き込む必要はまったくない。MT5は、MT4とは様々な点で異なっています。
MT4とMT5が違うということは、誰にでもわかることですが、最適化については納得がいきませんし、プログラマーは、低レベル言語とは比較にならないくらい、追加で把握しなければならないことが多いですが、私にとっては不要です、一般的には、わかりやすいです、感謝...です。
 
TheLiteShadow:
パラメータ数が正しくありません。関数を1つのオプションとして呼び出していますが、2つのオプションとして呼び出すか、結果を比較する必要があります。
この方法も試してみた。フラグは本当に機能し(線は1回だけ表示)、Expert Advisorは両方のフラグが有効であることを確認します。
long res;
ObjectGetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1|OBJ_PERIOD_MN1,res);
if((bool)res) Alert("линия line показывается на OBJ_PERIOD_W1 и OBJ_PERIOD_MN1");
 
svds75:
このように試してみました。実際のフラグは機能しますが(ラインは1つのタイムフレームにのみ表示されます)、Expert Advisorは両方のフラグが有効であることを確認します。

実際に欲しいものは何ですか?週足 または月足での視認性を求めている。そのため、このプログラムでは、少なくとも1つがオンになっていれば真を返します。

2コールで別途ご依頼ください。

 
svds75:
この方法も試してみた。実際のフラグは機能し(線は片方だけに表示される)、EAは両方のフラグが有効であることを確認しますが。

ということは、もしかしたら、直接的に可視性を設定する必要があるのでは?

 ObjectSetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1);
 
svds75:

こんにちは。手動でW1のみ、またはMN1のみを表示するようにフラグを設定したにもかかわらず、トレンドラインの プロパティを要求すると、変数resが常に真になるのはなぜか教えてください。

片方の半面だけに表示させたい。

行は常に存在するため、常に値を読み取ることができます。インビジブルラインは、ラインがないことを意味するものではありません。
 
barabashkakvn:

ということは、もしかしたら、直接的に可視性を設定する必要があるのでは?

いいえ、手動で可視性を設定し、プログラムで確認する必要があります。