学童のためのEOPです。 - ページ 17

 
Artyom Trishkin:

変数のときとまったく同じです。

そして、フォーカス。

OnTrade関数で トレードが可能な場合、このポインタの意味は何でしょうか?

#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы

int OnInit()
{
 trade.SetExpertMagicNumber(123);
}

void OnTick()
{
 trade.Buy(0.1);
}
 
Alexey Viktorov:

OnTrade関数で 利用できるのであれば、このポインタは何の意味もないでしょう

なし。しかし、それによって、同じ型の別の(2つ目の)オブジェクトを書く方法と、1つのオブジェクトにポインタでアクセスする方法の違いを示したのです。

違いや好みについての質問に答えるための、簡略化した例でした。

単純すぎる例で質問し、答えが返ってくると、また別の、極めて合理的な質問、"なぜ?"をするんです。

なぜなら、あなたの例はクラスで解決する必要がないからです。

ここで2つの選択肢があります。言われたことを読んで理解するか、それとも......。あるいは、プロシージャルに問題を解決するのです。その場合、「何のために」という疑問はなくなります。

ここで、あなたのCTradeクラスがグローバルスコープにないことを想像してみてください。И ?

また、(kodobaseのほとんどの例でそうであるように)そのようなオブジェクトが1つだけでなく、プログラムから手動で追加/削除するシンボルの数だけあると想像してください。И ?

 
Сергей Таболин:

その場合、それは

不正確な記述?

私の理解では、EAに設定すれば、どんな注文/ポジションでもこの魔法がかかるはずです。((

なぜ、急に不正解になるのですか?

一人のEAがいくつものマジックを持ち、そのすべてが自分のものである。

ウロンマジック1つでも、共通のエキスパートID1つ+魔道士数名+別ID数名を収納しても、まだ余裕がある。

 
Artyom Trishkin:

なし。しかし、それによって、同じ型の別の(2つ目の)オブジェクトを書く方法と、1つのオブジェクトにポインタでアクセスする方法の違いを示したのです。

違いや好みについての質問に答えるための、簡略化した例でした。

単純すぎる例で質問し、相手がそれに答えると、また別の--極めて合理的な質問、"なぜ?"をするんです。

なぜなら、あなたの例はクラスで解決する必要がないからです。

ここで2つの選択肢があります。言われたことを読んで理解するか、それとも......。あるいは、プロシージャルに問題を解決するのです。その場合、「何のために」という疑問はなくなります。

ここで、あなたのCTradeクラスがグローバルスコープにないことを想像してみてください。И ?

また、そのようなオブジェクトは1つではなく(kodobaseのほとんどの例でそうです)、プログラムから手動で追加/削除した文字の数だけあると想像してください。И ?

いや、アルチョム、私は理解するために質問しているのであって、応用するために質問しているのではありません。そして、バカな考えで解決策を提案されると、それこそ「なぜ?あのね、もし私が私なりに聞き返して、正しいか間違っているか答えられたら、私はもうそれについて言われたことは全部忘れて、理解してそうするか、理解してそうしないか、どちらかになると思うんです。自分もゴキブリを飼っているので...))わからないことがあると、どうすればいいのかわからない。数学の問題で、解答例を見ただけで解いたことはない。どうしたらいいのかわからない。中学2年生を終えた年の数学は、Fが5つ、Bが1つでした。大丈夫、Cでエッセイを書けば合格、Fを訂正すればGPTUに行けるという条件で受験を許可されたのです。研究所はもっと後だった。そこでプログラミングに病みつきになったのですが、表面的にしか教えてもらえませんでした。そして、その頃のOOPは、まだ考え出されたばかりだったのかもしれないと思えるのです。

 
Alexey Viktorov:

いいえ、私は理解するために質問しているのであって、応用するために質問しているのではありません。そして、バカな考えで解決策を提示されると、それこそ「なぜ?あのね、もし私が私なりに聞き返して、正しいか間違っているか答えられたら、私はもうそれについて言われたことは全部忘れて、理解してそうするか、理解してそうしないか、どちらかになると思う。自分もゴキブリを飼っているので...))わからないことがあると、どうすればいいのかわからない。数学の問題で、解答例を見ただけで解いたことはない。どうしたらいいのかわからない。中学2年生を終えた年の数学は、Fが5つ、Bが1つでした。まあ、Cのエッセイを書けば、試験に合格してFを訂正してGPTUに行かせてくれるという条件で受験させてくれたんですけどね。研究所はもっと後だった。そこでプログラミングに病みつきになったのですが、表面的にしか教えてもらえませんでした。そして、その頃のOOPは、まだ考え出されたばかりだったのかもしれないと思えるのです。

それなら、そもそもこのような質問をすること自体がおかしいのです。

異なるスコープで宣言された変数の違いを理解しているのですね。そうなんですね。そして、変数のスコープについて 初めて知ったかのような質問をしていますね。

以前に作成したオブジェクトへのポインタの使い方を見せられると、「オブジェクトがすでに見えているのに、なぜ?」という奇妙な疑問が湧きます。 つまり、やり方が示されたのではなく、その例でポインタを取得して、そのポインタによってオブジェクトを参照する方法が示されたのですね。しかも、異なるスコープにある2つのオブジェクトではなく、1つのオブジェクトになるのです。
しかし、そのオブジェクトがグローバルスコープではなく、他のオブジェクトの中にある場合はどうでしょうか?そして、その他のオブジェクトは、あなたが必要とするCTradeオブジェクトへのポインタを返すだけです。この場合、この例では「なぜ?」という疑問は生じないでしょう。そうならないと思います。しかし、あなたが例の単純さを理解し、「括弧の後ろ」のグローバルオブジェクトの可視性を省略することを前提に回答していることを暗に示していることがあります。

削除済み  
Artyom Trishkin:

なぜ急に不正解になるのでしょうか?

一人の専門家が何人ものマジシャンを抱え、その全てが自分のものである。

1つのマジックでも、共通のEAのID1つ+複数のマジック+数種類のIDを格納しても、まだ余裕があるのです。

了解しました。トレード依頼を する際、任意のマジシャンを指定することができます。あるEAでは、新しいポジションを開くたびに、新しいマジシャンが登場することがあります。また、シンボルやTFなどをマジックでエンコードしています。すべてクリアしています。

ただ、SetExpertMagicNumberが グローバルソリューションのようなものであることは確かでした。取引要求でマジックが明示的に指定されていない場合、SetExpertMagicNumberで 設定された値が採用されます。そうでなければ、個人的には意味がないと思っています)。

 
Сергей Таболин:

了解しました。トレード依頼をする 際に、任意のウィザードを指定することができます。1つのEAが新しいポジションを開くたびに、新しいマジックで開くことがあります。また、私のマジックの中にシンボルやTFなどをエンコードしています。すべてクリアしています。

ただ、SetExpertMagicNumberが グローバルソリューションのようなものであることは確かでした。取引要求が明示的にマジックを指定しない場合、SetExpertMagicNumberで 設定された値が採用されます。そうでなければ、個人的には意味がないと思っています ))

このメソッドは、Expert Advisorではなく、取引クラスのオブジェクトにマジックナンバーを設定します。1つのEAに複数のトレードクラスがあり、それぞれに個別のマジックナンバーを設定することができます。このマジックナンバーの値には、EAに共通のマジックナンバーとトレードオブジェクトごとに個別のマジックナンバーの両方が含まれています。

 
Artyom Trishkin:

それなら、こんな質問をすること自体、おかしいですよね。

全然おかしくないですよ。OOPを全く理解していないということは、自分が正しく理解しているのかどうか、自信がない、あるいは疑問があったのだと思います。説明を求め、確認を取り、今は(明日を)確信している。G・ハザノフのあのモノローグとかね。

- あなたが窓際に立っていて、向かいの窓に、何の疑いもなく裸の女性がいると想像してください。何を感じるか?

- 未来への自信。

- そして、次の一手は?

- 別の部屋に移動するそこに大きな窓があるんです。

 
Alexey Viktorov:

このオプションの場合、次のように考えてよろしいでしょうか?

コンパイラの警告を 考慮せずに、ポジションが123以外のマジックナンバーで開かれる可能性がある ?

つまり、OnTick関数で新しいオブジェクトが生成され、その中のマジックナンバーは123に等しくならない。

ポジションはマジックナンバーが "0 "に等しい状態でオープンします。

void OnTick()
{
 CTrade trade;

はオブジェクトを再作成し、CTrade マジックはトレードクラスオブジェクト作成時にデフォルトで(クラスコンストラクタ内で)"0 "に初期化 されます。

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade(void) : m_async_mode(false),
   m_magic(0),
   m_deviation(10),
   m_type_filling(ORDER_FILLING_FOK),
   m_log_level(LOG_LEVEL_ERRORS)
 
Vladimir Karputov:

ポジションはマジックナンバーの "0 "で開かれます。

オブジェクトを再作成 し、CTrade マジックはトレードクラスオブジェクト作成時にデフォルトでゼロで初期化 されます(クラスコンストラクタ内)。

はい?独立した新しいオブジェクトが作成されるのでは?