エラー、バグ、質問 - ページ 2646 1...263926402641264226432644264526462647264826492650265126522653...3185 新しいコメント Alain Verleyen 2020.02.12 20:40 #26451 Andrei Trukhanovich : なぜなら、テンプレートは出力値ではなく、パラメータによってのみ型を出力するからです。 これは正確ではありません。 struct A { int i; double d; }; template<typename T> T f(int value) { T result={0}; return(result); } //+------------------------------------------------------------------+ void OnStart() { A a; int i = 1; a = f<A>(i); } Igor Makanu 2020.02.12 20:42 #26452 Alain Verleyen: それは正確ではありません。 ありがとうございました。 はい、動作します、構文が混乱しました ZS:意図したとおりにすべて動作するようになりました。 struct A { long l; uint ui; }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { A a; uchar u_arr[]; string result = ""; a.l = 0xFFFFFFFFFFFFFFFF; a.ui = 0x0000; //--- проверка работоспособности вывода StructToCharArray(a, u_arr); for(int i = 0; i < ArraySize(u_arr); i++) { result += StringFormat("%x", u_arr[i]); } printf("result = %s", result); // result = ffffffffffffffff0000 //---- string s = StructEncodeBase64(a); Print(s); A b; b = StructDecodeBase64<A>(s); StructToCharArray(b, u_arr); result=""; for(int i = 0; i < ArraySize(u_arr); i++) { result += StringFormat("%x", u_arr[i]); } printf("result = %s", result); } //+------------------------------------------------------------------+ template<typename T> string StructEncodeBase64(T &s_value) { const uchar key[1] = {0}; uchar data[], result[]; StructToCharArray(s_value, data); CryptEncode(CRYPT_BASE64, data, key, result); return(CharArrayToString(result)); } //+------------------------------------------------------------------+ template<typename T> T StructDecodeBase64(string value) { const uchar key[1] = {0}; uchar data[], decode[]; T result; StringToCharArray(value, data, 0, StringLen(value)); CryptDecode(CRYPT_BASE64, data, key, decode); CharArrayToStruct(result, decode); return(result); } POD構造体のBase64シリアライズ Andrei Trukhanovich 2020.02.12 21:39 #26453 Alain Verleyen: それは定かではありません。 いいえ、そんなことはありません。関数内のテンプレートパラメータの型を明示的に設定 することを指摘されましたが、私は出力について話して いたのですが、明示的な設定については、fxsaberさんが先に答えてくれました。 Alain Verleyen 2020.02.13 00:52 #26454 Andrei Trukhanovich : いいえ、その通りです。関数内のテンプレートパラメータの型を明示的に設定 することを指摘されましたが、私は出力について話して いたのですが、明示的な設定については、fxsaberさんが先に答えてくれました。 言語の問題。 Igor Makanu 2020.02.13 09:23 #26455 フォーラムやドキュメントで見つけられなかったので、質問させてください。 1.MQL5が格納できる文字列の最大サイズはどのくらいですか? 2.MQL4が格納できる文字列の最大サイズは? 3.メモリ不足 の場合、この最大サイズは縮小されるのか(あるいは文字列のためのメモリが確保されない)、あるいはランタイムエラーが発生するのか? Sergey Dzyublik 2020.02.13 11:29 #26456 欠陥がある。( MT5(ビルド2319)では未修正) テンプレートクラスのキャッシュ操作のバグ:「内部型 "C "の複雑なラップオブジェクトを何度も作成し、それが全く異なるデータ型であることが判明した、たぶん "B"、"int"、あなたが望むものは何でも...」と。( MT5(build2319)では未修正) 内部クラス使用時のテンプレートクラスコード生成の不具合を修正しました。(not fixed MT5(build 2319)) 内部クラス定義時のバグ - ベースクラス指定時にグローバルネームスペースを明示的に参照することができない。 提案します。ref- MQLにtypedef宣言機能を導入する必要性について。リファレンス- デフォルトのコピーコンストラクタと代入演算子を強制的に生成できるようにするためのものです。 fxsaber 2020.02.13 14:51 #26457 Sergey Dzyublik: 欠陥がある。 バグレポートを記録するのは良いことだ。そうじゃなかったから、フォーラムですべてが取り返しのつかないことになったんだ。 バグレポートの投稿に同じハッシュレコードをいくつか追加して、一括で検索できるようにするといいかも。 Igor Makanu 2020.02.13 16:50 #26458 Igor Makanu: フォーラムやドックで見つけられなかったので、質問させてください。 1.MQL5が格納できる文字列の最大サイズはどのくらいですか? 2.MQL4が格納できる文字列の最大サイズは? 3.メモリ 不足の場合、この最大サイズは縮小されるか(あるいは文字列用のメモリが確保されない)、ランタイムエラーが発生するか? MT4で文字列をテストしてみた void OnTick() { static bool frun = true; uchar u_arr[102400]; if(frun) { frun = false; string s = ""; while(!IsStopped()) { ArrayInitialize(u_arr, uchar(rand() % 255)); s += CharArrayToString(u_arr); printf("StringLen = %i , m_physical = %i, m_total = %i, m_available = %i, m_used = %i", StringLen(s), TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL), TerminalInfoInteger(TERMINAL_MEMORY_TOTAL), TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE), TerminalInfoInteger(TERMINAL_MEMORY_USED)); Sleep(150); } } } //+------------------------------------------------------------------+ ログにあるMT4で、メモリがゆっくりリークする(11.9のうち5.1)。 StringLen = 221696000 , m_physical = 12157, m_total = 4095, m_available = 3365, m_used = 729 一般的に、賢明なタスクでは、大きな文字列を使用することができます、多分私は後でチェックするために文字列を介してファイルをコピーします。 UPD:処理を高速化するために、uchar u_arr[102400]; をucharu_arr[524224]; に置き換えた。 結論:MT4では、文字列を入れることができるおおよその上限は 2020.02.13 21:11:24.177 tst_string EURUSD,H1: out of memory 2020.02.13 21:11:24.024 tst_string EURUSD,H1: StringLen = 640601728 , m_physical = 12157, m_total = 4095, m_available = 2556, m_used = 1539. すなわち、約640MB SZZ:MT5 2020.02.13 21:56:12.964 tst_string (EURUSD,H1) StringLen = 1073610752 , m_physical = 12157, m_total = 24314, m_available = 21975, m_used = 2339 2020.02.13 21:56:13.140 tst_string (EURUSD,H1) 'tst_string.mq5' でメモリ不足 (41,12)になっています。 すなわち、1GB程度 Errors, bugs, questions Alain Verleyen 2020.02.13 20:00 #26459 Igor Makanu : MT4で文字列をテストしてみた Win Managerで少しメモリが漏れている(11.9のうち5.1)、MT4ではログで漏れている。 StringLen = 221696000 , m_physical = 12157, m_total = 4095, m_available = 3365, m_used = 729 一般的に、賢明なタスクでは、大きな文字列を使用することができます、多分私は後でチェックするために文字列を介してファイルをコピーします。 UPD:処理を高速化するために、uchar u_arr[ 102400 ]; を ucharu_arr[524224]; に置き換えた。 結論:MT4では、文字列に入れることができるおおよその上限は 2020.02.13 21:11:24.177 tst_string EURUSD,H1: out of memory 2020.02.13 21:11:24.024 tst_string EURUSD,H1: StringLen = 640601728 , m_physical = 12157, m_total = 4095, m_available = 2556, m_used = 1539. すなわち、約640MB SZZ:MT5 2020.02.13 21:56:12.964 tst_string (EURUSD,H1) StringLen = 1073610752 , m_physical = 12157, m_total = 24314, m_available = 21975, m_used = 2339 2020.02.13 21:56:13.140 tst_string (EURUSD,H1) 'tst_string.mq5' でメモリ不足 (41,12)になっています。 すなわち、1GB 程度 これはUnicodeの文字列長 なので、MBでは最低でも2倍となる。MT4では1.3GB。連続したメモリバッファが必要で、MT4は32ビットアプリケーションなので、これは理にかなっています。つまり、mql4の制限自体はなく、利用可能なメモリによってのみ制限されるのです。 利用可能なメモリが多いようなので、MT5がもっと許可しないのはちょっと驚きです。私の方でも頑張ります。 Igor Makanu 2020.02.13 20:18 #26460 Alain Verleyen: これはUnicodeの文字列長 なので、MBでは最低でも2倍になります。MT4では1.3GB。連続したメモリバッファが必要で、MT4は32ビットアプリケーションなので、これは理にかなっています。つまり、mql4自体の制限ではなく、利用可能なメモリによって制限されるだけなのです。 利用可能なメモリが多いようなので、MT5がもっと許可しないのはちょっと驚きです。私の方でも頑張ります。 メモリは12GB、Windows 10、空きメモリは約8GBです。 mt4/mt5ターミナルで許容される最大の線の長さを知るために、このテストが必要でした。 Redisデータベースを介して端末間のやり取りを行いたい Redisは非常にシンプルなデータベースで、文字列(キー - 値 --> strin - 文字列)のみで動作します。 昨日、POD構造体をBase64でシリアライズしたところ、データサイズが約1/3になりました。 この場合でも、1回の取引で400Mbのサイズの構造体を交換できる可能性があり、どんな目的にも十分すぎるほどです! ;) 1...263926402641264226432644264526462647264826492650265126522653...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
なぜなら、テンプレートは出力値ではなく、パラメータによってのみ型を出力するからです。
これは正確ではありません。
それは正確ではありません。
ありがとうございました。
はい、動作します、構文が混乱しました
ZS:意図したとおりにすべて動作するようになりました。
POD構造体のBase64シリアライズそれは定かではありません。
いいえ、そんなことはありません。関数内のテンプレートパラメータの型を明示的に設定 することを指摘されましたが、私は出力について話して いたのですが、明示的な設定については、fxsaberさんが先に答えてくれました。
いいえ、その通りです。関数内のテンプレートパラメータの型を明示的に設定 することを指摘されましたが、私は出力について話して いたのですが、明示的な設定については、fxsaberさんが先に答えてくれました。
フォーラムやドキュメントで見つけられなかったので、質問させてください。
1.MQL5が格納できる文字列の最大サイズはどのくらいですか?
2.MQL4が格納できる文字列の最大サイズは?
3.メモリ不足 の場合、この最大サイズは縮小されるのか(あるいは文字列のためのメモリが確保されない)、あるいはランタイムエラーが発生するのか?
欠陥がある。
( MT5(ビルド2319)では未修正) テンプレートクラスのキャッシュ操作のバグ:「内部型 "C "の複雑なラップオブジェクトを何度も作成し、それが全く異なるデータ型であることが判明した、たぶん "B"、"int"、あなたが望むものは何でも...」と。
( MT5(build2319)では未修正) 内部クラス使用時のテンプレートクラスコード生成の不具合を修正しました。
(not fixed MT5(build 2319)) 内部クラス定義時のバグ - ベースクラス指定時にグローバルネームスペースを明示的に参照することができない。
提案します。
ref- MQLにtypedef宣言機能を導入する必要性について。
リファレンス- デフォルトのコピーコンストラクタと代入演算子を強制的に生成できるようにするためのものです。
欠陥がある。
バグレポートを記録するのは良いことだ。そうじゃなかったから、フォーラムですべてが取り返しのつかないことになったんだ。
バグレポートの投稿に同じハッシュレコードをいくつか追加して、一括で検索できるようにするといいかも。
フォーラムやドックで見つけられなかったので、質問させてください。
1.MQL5が格納できる文字列の最大サイズはどのくらいですか?
2.MQL4が格納できる文字列の最大サイズは?
3.メモリ 不足の場合、この最大サイズは縮小されるか(あるいは文字列用のメモリが確保されない)、ランタイムエラーが発生するか?
MT4で文字列をテストしてみた
ログにあるMT4で、メモリがゆっくりリークする(11.9のうち5.1)。
StringLen = 221696000 , m_physical = 12157, m_total = 4095, m_available = 3365, m_used = 729
一般的に、賢明なタスクでは、大きな文字列を使用することができます、多分私は後でチェックするために文字列を介してファイルをコピーします。
UPD:処理を高速化するために、uchar u_arr[102400]; をucharu_arr[524224]; に置き換えた。
結論:MT4では、文字列を入れることができるおおよその上限は
2020.02.13 21:11:24.177 tst_string EURUSD,H1: out of memory
2020.02.13 21:11:24.024 tst_string EURUSD,H1: StringLen = 640601728 , m_physical = 12157, m_total = 4095, m_available = 2556, m_used = 1539.
すなわち、約640MB
SZZ:MT5
2020.02.13 21:56:12.964 tst_string (EURUSD,H1) StringLen = 1073610752 , m_physical = 12157, m_total = 24314, m_available = 21975, m_used = 2339
2020.02.13 21:56:13.140 tst_string (EURUSD,H1) 'tst_string.mq5' でメモリ不足 (41,12)になっています。
MT4で文字列をテストしてみた
Win Managerで少しメモリが漏れている(11.9のうち5.1)、MT4ではログで漏れている。
StringLen = 221696000 , m_physical = 12157, m_total = 4095, m_available = 3365, m_used = 729
一般的に、賢明なタスクでは、大きな文字列を使用することができます、多分私は後でチェックするために文字列を介してファイルをコピーします。
UPD:処理を高速化するために、uchar u_arr[ 102400 ]; を ucharu_arr[524224]; に置き換えた。
結論:MT4では、文字列に入れることができるおおよその上限は
2020.02.13 21:11:24.177 tst_string EURUSD,H1: out of memory
2020.02.13 21:11:24.024 tst_string EURUSD,H1: StringLen = 640601728 , m_physical = 12157, m_total = 4095, m_available = 2556, m_used = 1539.
すなわち、約640MB
SZZ:MT5
2020.02.13 21:56:12.964 tst_string (EURUSD,H1) StringLen = 1073610752 , m_physical = 12157, m_total = 24314, m_available = 21975, m_used = 2339
2020.02.13 21:56:13.140 tst_string (EURUSD,H1) 'tst_string.mq5' でメモリ不足 (41,12)になっています。
これはUnicodeの文字列長 なので、MBでは最低でも2倍となる。MT4では1.3GB。連続したメモリバッファが必要で、MT4は32ビットアプリケーションなので、これは理にかなっています。つまり、mql4の制限自体はなく、利用可能なメモリによってのみ制限されるのです。
利用可能なメモリが多いようなので、MT5がもっと許可しないのはちょっと驚きです。私の方でも頑張ります。
これはUnicodeの文字列長 なので、MBでは最低でも2倍になります。MT4では1.3GB。連続したメモリバッファが必要で、MT4は32ビットアプリケーションなので、これは理にかなっています。つまり、mql4自体の制限ではなく、利用可能なメモリによって制限されるだけなのです。
利用可能なメモリが多いようなので、MT5がもっと許可しないのはちょっと驚きです。私の方でも頑張ります。
メモリは12GB、Windows 10、空きメモリは約8GBです。
mt4/mt5ターミナルで許容される最大の線の長さを知るために、このテストが必要でした。
Redisデータベースを介して端末間のやり取りを行いたい
Redisは非常にシンプルなデータベースで、文字列(キー - 値 --> strin - 文字列)のみで動作します。
昨日、POD構造体をBase64でシリアライズしたところ、データサイズが約1/3になりました。
この場合でも、1回の取引で400Mbのサイズの構造体を交換できる可能性があり、どんな目的にも十分すぎるほどです! ;)