#include <Trade\Trade.mqh>
CTrade trade;// Объект № 1 в глобальной области программыintOnInit()
{
trade.SetExpertMagicNumber(123);
}
voidOnTick()
{
CTrade trade;// Объект № 2 в локальной области OnTick()
trade.Buy(0.1);
}
#include <Trade\Trade.mqh>
CTrade trade;// Объект trade в глобальной области программыintOnInit()
{
trade.SetExpertMagicNumber(123);
}
voidOnTick()
{
CTrade *trade_ptr=GetPointer(trade);// Указатель на объект trade
trade_ptr.Buy(0.1);
}
モデレーターの方には、すべての議論を別スレッドにまとめていただくようお願いします。このような、OOPの利点を論じたスレッドは何十本とあるのではないでしょうか。
もうひとつ、変数の宣言、ポインタの取得/作成、オブジェクトのインスタンスの作成はどう違うのでしょうか。違いではなく、どのような場合に使うのが良いのか。例えば、ポジションを開くための変数を宣言するだけでも十分です。
そして、どんな場合にポインターを使った方がいいのか、どんな場合にオブジェクトのインスタンスがないとやっていけないのか、などです。
ある方法と別の方法の長所と短所は何ですか?
1.オブジェクトがグローバルスコープに ある場合、それは静的オブジェクトです。静的メモリに配置され、プログラムが存在する限り存在します。
そのコンストラクタは、プログラムの最初の関数を呼び出す前に呼び出されます。デストラクタは OnDeinit()の後に呼び出される。
例えば、こんな風に。
あるいはこんな感じでも。
ブロックから出るときに破壊されます。破壊されるときは、デストラクタが呼ばれる。
通常、スタックの大きさには制限があるため、非常に大きなオブジェクトはスタックに置くことができない。
例
この例では、2つの変数が作成されています。ヒープにあるMyClassクラスのオブジェクト。
そして、pObject 変数は MyClass へのポインタです。この変数には、ダイナミックメモリ内のオブジェクトのアドレスが代入される。
この関数を終了するとき、変数pObjectは破棄されますが、オブジェクトはダイナミックメモリに残ります。
削除できるようにするためには、そのアドレスがどこかに保存されている必要があります。
また、生成・破棄の際には、コンストラクタとデストラクタが呼び出される。
動的変数は、一般的にローカル変数よりもアクセスに時間がかかります。
オブジェクトを作成する際には、これらすべてを考慮する必要があります。
1.オブジェクトがグローバルスコープに ある場合、それは静的オブジェクトである。静的メモリに配置され、プログラムが存在する限り存在する。
...
このオプションの場合、次のように考えてよろしいでしょうか?
コンパイラの警告を 考慮せずに、ポジションが123と等しくないマジックナンバーで開かれる可能性がある ?
つまり、OnTick関数内で新しいオブジェクトが生成され、その中でマジシャンは123に等しくなることはない。
このオプションの場合、次のように考えてよろしいでしょうか?
コンパイラの警告を 考慮せずに、123以外のマジックナンバーでポジションが開くことがある ?
つまり、OnTick関数で新しいオブジェクトが生成され、その中でマジシャンは123に等しくならない。
セットエキスパート・マジック・ナンバー
このオプションの場合、次のように考えてよろしいでしょうか?
コンパイラの警告を 考慮せずに、ポジションはマジックnot123で開くことができる?
つまり、OnTick関数で新しいオブジェクトが作成され、そのオブジェクトは123のMagicNumberを持ちません。
はい、その通りです。これらは、2つの異なるオブジェクトです。OnTickのローカルオブジェクトは、グローバルオブジェクトと同じ名前なので、OnTick関数内でアクセスできるのは、そのオブジェクトのみです。グローバルオブジェクトはスコープ外です。したがって、ローカルトレードオブジェクトには、MagicNumber はまだ設定されていない。
このオプションの場合、次のように考えてよろしいでしょうか?
コンパイラの警告を 考慮せずに、ポジションはマジックnot123で開くことができる?
つまり、OnTick関数内で新しいオブジェクトが生成され、その中でマジシャンは123にならない。
変数のときとまったく同じです。
そして、フォーカス。
そもそも、このSetExpertMagicNumberは なぜ必要なのでしょうか?
トレードクラスのオブジェクトにマジックナンバーを設定します。現在kodobaseで行われているように、プログラム全体に対して複数のCTradeクラスオブジェクトが存在することが可能です。これはオブジェクトです。このオブジェクトは、取引操作を 行うために使用される。プログラム全体で1つのオブジェクトを作成し、新しいマジシャンやスリップなど、初期化時に設定したパラメータを変更する必要があるたびにリセットする必要がありません。取引するシンボル毎にトレーディングオブジェクトを作成し、この CTrade クラスの特定のオブジェクトが属するシンボルのプロパティに従って必要なパラメータを設定し、必要なシンボルから必要なトレーディングクラスのオブジェクトへのポインタを取得することにより、そこで設定したパラメータをオーバーライドせずに簡単に取引することが可能である。
他のマジシャンと仕事をするためには、適切な設定をした別の取引オブジェクトを定義することができます。1つのEAに複数のウィザードが存在することもあります。
何をどのように使うか、その理解にかかっているのです。
トレードクラスのオブジェクトにマジックを設定します。kodobaseで通常行われているように、プログラム全体に対してCTradeクラスのオブジェクトを1つだけ持つことはできません。 これはオブジェクトです。このオブジェクトは、取引操作を 行うために使用される。プログラム全体で1つのオブジェクトを作成し、新しいマジシャンやスリップなど、初期化時に設定したパラメータを変更する必要があるたびにリセットする必要がありません。取引するシンボル毎にトレーディングオブジェクトを作成し、この CTrade クラスの特定のオブジェクトが属するシンボルのプロパティに従って必要なパラメータを設定し、必要なシンボルから必要なトレーディングクラスのオブジェクトへのポインタを取得することにより、そこで設定したパラメータをオーバーライドせずに簡単に取引することが可能である。
他のマジシャンと仕事をするためには、適切な設定をした別の取引オブジェクトを定義することができます。何しろ、1つのEAに複数のウィザードが存在することもあるのですから。
何をどのように使うか、その理解にかかっているのです。
その場合、それは
SetExpertMagicNumber Устанавливает идентификатор эксперта
不正確な記述?
私の理解では、EAに設定すれば、どんな注文/ポジションでもこの魔法がかかるはずです。((