エラー、バグ、質問 - ページ 1856 1...184918501851185218531854185518561857185818591860186118621863...3185 新しいコメント Andrey Dik 2017.04.14 11:32 #18551 Andrey Dik: サードパーティのエディタでテキストの外観を変更することで変更されていることはわかるのですが、どのエンコーディングをどう見分ければいいのかがわからないのです。Andrey Khatimlianskii: ME 1580でEAを作成 しただけです: Win-1251 (ANSI)です。はい、AkepadではエンコーディングがWin-1251(ANSI)になっていますが、古いファイルではUTF-16LE 1200になっていますね。つまり、新しいファイルのデフォルトエンコーディングを変更するのですね。 fxsaber 2017.04.14 11:41 #18552 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム mql5言語の特徴、微妙なニュアンスとコツ fxsaber さん 2017.04.14 11:40 そう、悪徳ブローカーだ。マイナスの数字も入れてくるし。ブローカーがシンボルを設定する際に、開発者が各パラメータの値の取り得る範囲に制限を設けると良いと思うのです。 Vladislav Andruschenko 2017.04.14 11:45 #18553 マーケットプレイスから商品を更新すると、チャート上のその商品のすべての設定がデフォルトにリセットされることに気づきました。これはおかしい、どうしたら回避できるのか? Artyom Trishkin 2017.04.14 23:28 #18554 ArrayMaximum() および ArrayMinimum() - パラメータを渡す順序がヘルプと一致しない。 削除済み 2017.04.16 16:02 #18555 fxsaber: ちょっとしたノウハウ代入演算 子のバイパス結果チップではなく、変態です。まさか、そんなことを言われるとは思わなかった。 fxsaber 2017.04.16 16:14 #18556 Koldun Zloy:スマートな仕掛けではなく、倒錯しているのです。私はあなたにそれを期待していませんでした。 だから、これはあなたのためのものです トレーディング、自動売買システム、ストラテジーテストに関するフォーラム ライブラリ: TypeToBytes fxsaber さん 2017.04.13 13:34 この機能が潜在的なエラーを発見するのに有効な例です。スクリプトを書き、実行する。#include <TypeToBytes.mqh> struct STRUCT { int i; STRUCT() : i(0) {} template <typename T> void operator =( T& ) {} }; #define PRINT(A) ::Print(#A + " = " + (string)(A)); void OnStart() { PRINT(_WRONG_ASSIGN_OPERATOR(STRUCT)) }結果_WRONG_ASSIGN_OPERATOR(STRUCT) = trueこれは、代入演算子が構造体を同じ型の構造体にコピーしないことを示す。これ以上、構造を増やしたら void operator =( STRUCT &Value ) { this.i = 0; }を選択しても、結果は同じです。この演算子を変更することで、一見すると void operator =( STRUCT &Value ) { this.i = Value.i; }が、図書館にはそうでないと書いてある。これが、この例の最も微妙なポイントかもしれません。で修正します。#include <TypeToBytes.mqh> struct STRUCT { int i; STRUCT() : i(0) {} template <typename T> void operator =( T& ) {} void operator =( const STRUCT &Value ) { this.i = Value.i; } }; #define PRINT(A) ::Print(#A + " = " + (string)(A)); void OnStart() { PRINT(_WRONG_ASSIGN_OPERATOR(STRUCT)) }という結果が得られます。_WRONG_ASSIGN_OPERATOR(STRUCT) = falseこれで、コピー演算子が正しくなりましたまた、単純な構造 であれば、割り当てやコピーの演算子の正しさも同様に確認することができる。 削除済み 2017.04.16 16:59 #18557 1.このように書くとSTRUCT StructCopy1 = Struct; 呼び出すべきはoperator=ではなく、コピーコンストラクタです。とはいえ、それはどちらかというとメタクオーツへの質問ですね。2.コンパイラが作成したコピーコンストラクタが呼ばれない場合は、自分で書けばよい。struct STRUCT { int i; STRUCT(){} STRUCT( int _i ) : i(_i){} STRUCT( const STRUCT& other ) { i = other.i; } void operator =( const STRUCT& ) { this.i = 5; } }; これでoperator=は呼ばれなくなった。3.構造体のメンバが 用意されているのだから、そのように書けばいいだけだ。StructCopy1.i = Struct.i; でも、プライベートにしてしまうと、ティップフックも役に立ちません。4.そして最も重要なことは、すべての代入がoperator=を経由し、それを回避しないことを保証するために使用されることです。通常、コピーコンストラクタも一緒に定義します。はい、サンプルに目を通しました。あまり利益は見込めませんでした。 fxsaber 2017.04.16 17:32 #18558 Koldun Zloy:1.このように書くと 呼び出すべきはoperator=ではなく、コピーコンストラクタです。とはいえ、それはどちらかというとメタクオーツへの質問ですね。2.コンパイラが作成したコピーコンストラクタが呼ばれない場合は、自分で書けばよい。これでoperator=は呼ばれなくなった。3.構造体のメンバが 用意されているのだから、そのように書けばいいだけだ。でも、プライベートにしてしまうと、ティップフックも役に立ちません。4.そして最も重要なことは、すべての代入がoperator=を経由し、それを回避しないことを保証するために使用されることです。通常、コピーコンストラクタも一緒に定義します。はい、サンプルに目を通しました。あまり利益は見込めませんでした。 Lifehackはコピーコンストラクタもバイパスします。そして、その特典はこちら#include <TypeToBytes.mqh> struct STRUCT { int i; STRUCT(){} STRUCT( int _i ) : i(_i){} STRUCT( const STRUCT& other ) { i = 2; } void operator =( const STRUCT& ) { // Print(__FUNCSIG__); this.i = 5; } }; void OnStart() { STRUCT Struct(1); ArrayPrint(_R(Struct).Bytes); // 1 0 0 0 STRUCT StructCopy1 = Struct; // STRUCT( const STRUCT& ) ArrayPrint(_R(StructCopy1).Bytes); // 2 0 0 0 StructCopy1 = Struct; // void STRUCT::operator=( const STRUCT& ) ArrayPrint(_R(StructCopy1).Bytes); // 5 0 0 0 }_Rは普遍的なものです。だから、エイリアンの構造を独自の演算子で再定義する必要はないんです。#include <TypeToBytes.mqh> struct STRUCT { int i; void operator =( const STRUCT& ) { this.i = 5; } }; void OnStart() { STRUCT Structs[] = {{1}, {2}}; ArrayPrint(_R(Structs).Bytes); // 1 0 0 0 2 0 0 0 } Andrey Khatimlianskii 2017.04.16 21:10 #18559 Andrey Dik:はい、AkepadではエンコーディングがWin-1251(ANSI)になっていますが、古いファイルではUTF-16LE 1200になっていますね。ということは、やはり新しいファイルのデフォルトエンコーディングが変わったのでしょうか? いいえ、ずっとWin-1251(ANSI)で、いつのまにかUTFが追加されていました。ただし、非Ansi文字を含むソースファイルのみ。 Andrey Dik 2017.04.16 21:19 #18560 Andrey Khatimlianskii: いや、ずっとWin-1251(ANSI)で、ある時期からUTFが追加されたんです。ただし、非Ansi文字が含まれるソースに限ります。 なるほど。ありがとうございます。 1...184918501851185218531854185518561857185818591860186118621863...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
サードパーティのエディタでテキストの外観を変更することで変更されていることはわかるのですが、どのエンコーディングをどう見分ければいいのかがわからないのです。
ME 1580でEAを作成 しただけです: Win-1251 (ANSI)です。
はい、AkepadではエンコーディングがWin-1251(ANSI)になっていますが、古いファイルではUTF-16LE 1200になっていますね。
つまり、新しいファイルのデフォルトエンコーディングを変更するのですね。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5言語の特徴、微妙なニュアンスとコツ
fxsaber さん 2017.04.14 11:40
そう、悪徳ブローカーだ。マイナスの数字も入れてくるし。
ブローカーがシンボルを設定する際に、開発者が各パラメータの値の取り得る範囲に制限を設けると良いと思うのです。
マーケットプレイスから商品を更新すると、チャート上のその商品のすべての設定がデフォルトにリセットされることに気づきました。
これはおかしい、どうしたら回避できるのか?
ArrayMaximum() および ArrayMinimum() - パラメータを渡す順序がヘルプと一致しない。
ちょっとしたノウハウ代入演算 子のバイパス
結果
チップではなく、変態です。
まさか、そんなことを言われるとは思わなかった。
スマートな仕掛けではなく、倒錯しているのです。
私はあなたにそれを期待していませんでした。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
ライブラリ: TypeToBytes
fxsaber さん 2017.04.13 13:34
この機能が潜在的なエラーを発見するのに有効な例です。
スクリプトを書き、実行する。
結果
_WRONG_ASSIGN_OPERATOR(STRUCT) = trueこれは、代入演算子が構造体を同じ型の構造体にコピーしないことを示す。
これ以上、構造を増やしたら
を選択しても、結果は同じです。
この演算子を変更することで、一見すると
が、図書館にはそうでないと書いてある。
これが、この例の最も微妙なポイントかもしれません。
で修正します。
という結果が得られます。
_WRONG_ASSIGN_OPERATOR(STRUCT) = falseこれで、コピー演算子が正しくなりました
また、単純な構造 であれば、割り当てやコピーの演算子の正しさも同様に確認することができる。
1.このように書くと
呼び出すべきはoperator=ではなく、コピーコンストラクタです。とはいえ、それはどちらかというとメタクオーツへの質問ですね。
2.コンパイラが作成したコピーコンストラクタが呼ばれない場合は、自分で書けばよい。
これでoperator=は呼ばれなくなった。
3.構造体のメンバが 用意されているのだから、そのように書けばいいだけだ。
でも、プライベートにしてしまうと、ティップフックも役に立ちません。
4.そして最も重要なことは、すべての代入がoperator=を経由し、それを回避しないことを保証するために使用されることです。
通常、コピーコンストラクタも一緒に定義します。
はい、サンプルに目を通しました。あまり利益は見込めませんでした。
1.このように書くと
呼び出すべきはoperator=ではなく、コピーコンストラクタです。とはいえ、それはどちらかというとメタクオーツへの質問ですね。
2.コンパイラが作成したコピーコンストラクタが呼ばれない場合は、自分で書けばよい。
これでoperator=は呼ばれなくなった。
3.構造体のメンバが 用意されているのだから、そのように書けばいいだけだ。
でも、プライベートにしてしまうと、ティップフックも役に立ちません。
4.そして最も重要なことは、すべての代入がoperator=を経由し、それを回避しないことを保証するために使用されることです。
通常、コピーコンストラクタも一緒に定義します。
はい、サンプルに目を通しました。あまり利益は見込めませんでした。
_Rは普遍的なものです。だから、エイリアンの構造を独自の演算子で再定義する必要はないんです。
はい、AkepadではエンコーディングがWin-1251(ANSI)になっていますが、古いファイルではUTF-16LE 1200になっていますね。
ということは、やはり新しいファイルのデフォルトエンコーディングが変わったのでしょうか?
いや、ずっとWin-1251(ANSI)で、ある時期からUTFが追加されたんです。ただし、非Ansi文字が含まれるソースに限ります。