エラー、バグ、質問 - ページ 2488 1...248124822483248424852486248724882489249024912492249324942495...3185 新しいコメント Igor Makanu 2019.06.21 03:21 #24871 もちろん間違っているかもしれませんが、2ヶ月前は私のテンプレートが動作していたようで、今はCListのデストラクタを呼び出すと、破壊さ れなかったオブジェクトが メモリ内に残るというコードになっています。 #property strict #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CData : public CObject { public: int x; double y; CData(){}; CData(int ival,double dval){x=ival;y=dval;} }; //+------------------------------------------------------------------+ template<typename T>class CDataBase { private: CList *mlist; T *Tptr; public: void CDataBase() { mlist=new CList; } void ~CDataBase(void) { delete mlist; } int ArraySize(void) { return(mlist.Total()); } T *operator[](int index) { return(mlist.GetNodeAtIndex(index)); } void AddValue (T &value) { Tptr = new T; Tptr = value; mlist.Add(Tptr); } string TypeName() { return(typename(T)); } }; //+------------------------------------------------------------------+ void OnStart() { CDataBase<CData>*data=new CDataBase<CData>; int i; for(i=0; i<5; i++) { data.AddValue(new CData(i,i*2.0)); } for(i=0; i<data.ArraySize(); i++) { Print(i," : ",data[i].x," , ",data[i].y); } Print(data.TypeName()); delete data; } //+------------------------------------------------------------------+ 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 0 : 0 , 0.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 1 : 1 , 2.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 2 : 2 , 4.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 3 : 3 , 6.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 4 : 4 , 8.0 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 未削除のオブジェクトが5個残っています。 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 5 objects of type CData left. 2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280 bytes of leaked memory MT5ビルド2085 Errors, bugs, questions Any questions from newcomers MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 fxsaber 2019.06.21 09:18 #24872 Igor Makanu: もちろん間違っているかもしれませんが、2ヶ月前は私のテンプレートが動作していたようなのですが、今はCListのデストラクタを呼び出すと、破壊されていないオブジェクトが メモリに残っている、というコードになっています。 #property strict #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CData : public CObject { public: int x; double y; CData(){}; CData(int ival,double dval){x=ival;y=dval;} }; //+------------------------------------------------------------------+ template<typename T>class CDataBase { private: CList *mlist; T Tptr; public: void CDataBase() { mlist=new CList; } void ~CDataBase(void) { delete mlist; } int ArraySize(void) { return(mlist.Total()); } T operator[](int index) { return(mlist.GetNodeAtIndex(index)); } void AddValue (T &value) { Tptr = value; mlist.Add(Tptr); } string TypeName() { return(typename(T)); } }; //+------------------------------------------------------------------+ void OnStart() { CDataBase<CData*>* data=new CDataBase<CData*>; int i; for(i=0; i<5; i++) { CData* Tmp = new CData(i,i*2.0); data.AddValue(Tmp); } for(i=0; i<data.ArraySize(); i++) { Print(i," : ",data[i].x," , ",data[i].y); } Print(data.TypeName()); delete data; } //+------------------------------------------------------------------+ Igor Makanu 2019.06.21 10:03 #24873 fxsaber: そうですね、あなたのサンプルは正しく動作しています。 ありがとうございました。 Vladimir Pastushak 2019.06.23 10:08 #24874 Вероника Сорокина: こんにちは。こんな状況です。私が書いたmql4 Expert Advisor/Script/Indicator/Whateverはチャートウィンドウに添付されず、プログラムに添付されたままにしておきたいのです。例えば、私は便利なものを書くので、新しいオープンチャートに常に添付されるのは嫌です。サービスみたいなもの(MT5から)、でもMT4では必要ですよね。 サービスを利用する fxsaber 2019.06.24 14:32 #24875 MEから現在のコードをTerminal Favouritesに追加することは可能でしょうか? 実は、「デバッグ」タブを別に用意して、現在書いているコードやテスト中のコードを追加できるようにしたいんです。 今、便利な仕事をするためには、現在のプロジェクトに 関係ないものはすべて排除した、別のターミナルが必要であることがわかりました。 そうすれば、Terminal 自体で残りのコードと混同することがないため、デバッグが非常に速くなります。 削除済み 2019.06.28 08:40 #24876 開発者の皆様へ。インジケーターバッファの自動再分割は正常なのか、明らかにしてください。再分割とは次のような意味です:ウィンドウ内のバーの最大値、例えば5000。バッファサイズ+rates_totalは、6439になると5000にリセットされます。ウィンドウ内の最大バー数=10000の場合も同様です。11439でリセットが発生します。 このため、インジケーターがクラッシュしたり、不正なデータが表示されることがあります。 2085年を構築する。2000年頃のビルドから、そのような挙動に気づきました。 Slava 2019.06.28 13:58 #24877 Alexey Kozitsyn: 開発者の皆様へ。インジケーターバッファの自動再分割は正常なのか、明らかにしてください。再分割とは次のような意味です:ウィンドウ内のバーの最大値、例えば5000。バッファサイズ+rates_totalは、6439になると5000にリセットされます。 ウィンドウ内の最大バー数=10000の場合も同様です。11439でリセットが発生します。 このため、インジケーターがクラッシュしたり、不正なデータが表示されることがあります。 2085年を構築する。この動作は2000ビルドくらいから気づいていました。 この動作はもともと5で バッファの再割り当てによるインジケータのクラッシュの例を挙げてください。 削除済み 2019.06.28 16:41 #24878 Slava: これは、最初からファイブにあった行動です。 バッファの再分配が原因でインジケータがクラッシュする例を挙げてください。 つまり、標準を超える1439本のバーが蓄積されたとき、ターミナルはバッファサイズをウィンドウ内の最大バーの値にリセットしなければならない(MUST)ことを確認しているのですね。もしYESの場合は、ドキュメントにその旨を記載する必要があります。これは予期せぬ動作であるため。 例の件ですが。棒グラフと連動したカスタム開発ということです。例:バー番号6438を記憶し、2分後(M1 TF)バッファが再分配され、アレイから抜けました。今では、これが「標準的」な行動であることは明らかです。ドキュメントの更新をお願いします。 A100 2019.06.29 15:08 #24879 実行中にエラーが発生しました。 class A { public: virtual void f( int = 0 ) { Print( 1 ); } }; class B : public A { public: virtual void f( int ) { Print( 2 ); } }; void OnStart() { B b; b.f(); } 結果:1 期待値: 2 または (C++ のように) - コンパイルエラー Slava 2019.06.29 16:13 #24880 Alexey Kozitsyn: ドキュメントの更新をお願いします。 ドキュメントの更新が必要な箇所は? バーを明確に識別するのは、昔からバー・ナンバーではなくバー・タイムである。 もし誰かがあなたのチャートにChartSetSymbolPeriodを呼び出したら、あなたは簡単にバーの数の変化をキャッチすることができます。サプライズ? ちなみに、OnCalculateには、rates_totalというパラメータがあります。 1...248124822483248424852486248724882489249024912492249324942495...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
もちろん間違っているかもしれませんが、2ヶ月前は私のテンプレートが動作していたようで、今はCListのデストラクタを呼び出すと、破壊さ れなかったオブジェクトが メモリ内に残るというコードになっています。
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 0 : 0 , 0.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 1 : 1 , 2.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 2 : 2 , 4.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 3 : 3 , 6.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 4 : 4 , 8.0
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 未削除のオブジェクトが5個残っています。
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 5 objects of type CData left.
2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280 bytes of leaked memory
もちろん間違っているかもしれませんが、2ヶ月前は私のテンプレートが動作していたようなのですが、今はCListのデストラクタを呼び出すと、破壊されていないオブジェクトが メモリに残っている、というコードになっています。
そうですね、あなたのサンプルは正しく動作しています。
ありがとうございました。
こんにちは。こんな状況です。私が書いたmql4 Expert Advisor/Script/Indicator/Whateverはチャートウィンドウに添付されず、プログラムに添付されたままにしておきたいのです。例えば、私は便利なものを書くので、新しいオープンチャートに常に添付されるのは嫌です。サービスみたいなもの(MT5から)、でもMT4では必要ですよね。
サービスを利用する
MEから現在のコードをTerminal Favouritesに追加することは可能でしょうか?
実は、「デバッグ」タブを別に用意して、現在書いているコードやテスト中のコードを追加できるようにしたいんです。
今、便利な仕事をするためには、現在のプロジェクトに 関係ないものはすべて排除した、別のターミナルが必要であることがわかりました。
そうすれば、Terminal 自体で残りのコードと混同することがないため、デバッグが非常に速くなります。
開発者の皆様へ。インジケーターバッファの自動再分割は正常なのか、明らかにしてください。再分割とは次のような意味です:ウィンドウ内のバーの最大値、例えば5000。バッファサイズ+rates_totalは、6439になると5000にリセットされます。ウィンドウ内の最大バー数=10000の場合も同様です。11439でリセットが発生します。
このため、インジケーターがクラッシュしたり、不正なデータが表示されることがあります。
2085年を構築する。2000年頃のビルドから、そのような挙動に気づきました。
開発者の皆様へ。インジケーターバッファの自動再分割は正常なのか、明らかにしてください。再分割とは次のような意味です:ウィンドウ内のバーの最大値、例えば5000。バッファサイズ+rates_totalは、6439になると5000にリセットされます。 ウィンドウ内の最大バー数=10000の場合も同様です。11439でリセットが発生します。
このため、インジケーターがクラッシュしたり、不正なデータが表示されることがあります。
2085年を構築する。この動作は2000ビルドくらいから気づいていました。
この動作はもともと5で
バッファの再割り当てによるインジケータのクラッシュの例を挙げてください。
これは、最初からファイブにあった行動です。
バッファの再分配が原因でインジケータがクラッシュする例を挙げてください。
つまり、標準を超える1439本のバーが蓄積されたとき、ターミナルはバッファサイズをウィンドウ内の最大バーの値にリセットしなければならない(MUST)ことを確認しているのですね。もしYESの場合は、ドキュメントにその旨を記載する必要があります。これは予期せぬ動作であるため。
例の件ですが。棒グラフと連動したカスタム開発ということです。例:バー番号6438を記憶し、2分後(M1 TF)バッファが再分配され、アレイから抜けました。今では、これが「標準的」な行動であることは明らかです。ドキュメントの更新をお願いします。
実行中にエラーが発生しました。
結果:1
期待値: 2 または (C++ のように) - コンパイルエラー
ドキュメントの更新をお願いします。
ドキュメントの更新が必要な箇所は?
バーを明確に識別するのは、昔からバー・ナンバーではなくバー・タイムである。
もし誰かがあなたのチャートにChartSetSymbolPeriodを呼び出したら、あなたは簡単にバーの数の変化をキャッチすることができます。サプライズ?
ちなみに、OnCalculateには、rates_totalというパラメータがあります。