MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 509

 
まあ、そうなんですが、当たり前なんですが、ダメなんです。入力パラメータをクラスに入れるのは良くない。
 
Вадим Мотеюнас:

こんにちは。このサイクルでは、指値注文を出した後、次のバーで別の指値注文が出されていない場合にのみ指値注文が削除されるのはなぜでしょうか?つまり、指値注文を出した後、指値注文が出ていないバーが2本続く場合にのみ削除されます。

ここではどの順番を選んだのでしょうか?

for(i=0;i<=OrderTicket();i++)
 
Nikolay Gaylis:

また、ここではどのような順番で選んだのでしょうか?

OrderTicket()の代わりにOrderSendが 代入される変数ticketも代入したのですが、それでも何も削除されないのですが、指値注文を通過して2本目に残っているものを削除するループはどう設定すればいいのでしょうか。

 
Вадим Мотеюнас:

エラーはわかりました、OrderTicket()の変数をticket OrderSendで代用してもまだ何も削除されません、しかし、指値注文を通過して2バー目に残っているものを削除するループはどう構成すればいいのでしょうか?

これが最適で、少なくとも私はこの方法でmqlを学びました。

kodobaseで おおよそ要件を満たすEAを見つけ、コードを見て、コードが大きく分かりにくければ、次のEAを探せばいいのです。

より理解しやすいコードを見つけたら、それを勉強して編集し始めるので、すぐに仕組みが理解できるようになります

MQL5 Code Base: Советники
MQL5 Code Base: Советники
  • www.mql5.com
В разделе торговых советников вы найдете множество приложений, автоматизирующих вашу аналитику и торговлю. Здесь вы найдете самые разные приложения, обладающие различными торговыми алгоритмами и предоставляющими различную степень автоматизации. Имеются как простенькие эксперты, так и сложные торговые роботы, способные полностью автоматизировать...
 
Juer:
まあ、そうなんですが、当たり前のことなんですが、よくないんです。入力パラメータをクラスに突っ込むのはよろしくない。

とはいえ、これらの値はどうにかしてそこにたどり着かなければならない )) 。結局のところ、ほとんどの場合、クラスの仕事はユーザーが指定した値に基づいて行われます。でも、なぜかこれをやりたがらないんですよね。魔法のようにそこに現れるわけではありません。

通常、プログラムの初期化段階での入力パラメータは、特殊な構造体に転送される。多くの場合、これらの値は前処理(少なくとも、正しさのチェック)されている。このクラスの新しいインスタンスが作成されると、この構造体へのリンクが渡される。ここで不便なことは何ですか?

 
Ihor Herasko:

とはいえ、これらの値はどうにかしてそこにたどり着かなければならない )) 。結局のところ、ほとんどの場合、クラスの仕事はユーザーが指定した値に基づいて行われます。でも、なぜかこれをやりたがらないんですよね。魔法のようにそこに現れるわけではありません。

通常、プログラムの初期化段階での入力パラメータは、特殊な構造体に転送される。多くの場合、これらの値は前処理(少なくとも、正しさのチェック)されている。このクラスの新しいインスタンスが生成されるとき、この構造体への参照が渡される。ここで不便なことは何ですか?

不便なのは、オブジェクトを作成 するときに、毎回これらの値を渡す必要があることくらいです。毎回同じです。よし、コンストラクタで作成するけど、プライベートソリューションだ。あるEAのデフォルトコンストラクタにはそのようなパラメータが含まれているかもしれませんが、別のEAでは全く異なるパラメータが含まれているかもしれません。

おそらく解決策は、パラメータの値を返すメソッドを持つ、まったく別のクラスを作ることでしょう。そうすれば、この新しいクラスを一度だけ初期化する必要があります。そして、元のクラスでは、オブジェクトを作成するときに(同じコンストラクタでも)、新しいクラスからパラメータ値を要求します。

 
Juer:

唯一の不都合は、オブジェクトを作成する たびにこれらの値を渡す必要があることです。毎回同じなんですよ。よし、コンストラクタでやるぞ!でも、プライベートな解決策なんだ。あるEAのデフォルトコンストラクタにはこれらのパラメータがありますが、別のEAのデフォルトコンストラクタは全く別のものです。

おそらく解決策は、パラメータの値を返すメソッドを持つ、まったく別のクラスを作ることでしょう。そうすれば、この新しいクラスを一度だけ初期化する必要があります。そして、元のクラスでは、オブジェクトを生成するときに(同じコンストラクタでも)、新しいクラスからパラメータ値を要求します。

発明された問題をヒーローのように解決していくようですね。
 
Artyom Trishkin:
あなたは、作り出された問題を英雄的に解決しているように見えます。
問題についてはよく読まなかったのですが、何か私が踏んだ熊手と同じで、それを取り除くのを手伝ってくれたのだと思いました。そうでしょう?
 
Alexey Viktorov:
問題についてはよく読まなかったのですが、何か私が踏んでいた熊手と同じだと思い、それを取り除く手助けをしていただきました。そうでしょう?
そうではありません。ボイドを初期化する気はなかったんですね。
 
Artyom Trishkin:
まるで、発明された問題を解決するために、英雄になったようですね。

そうです、それは私が上で提案したことです。実際、あなたが構造で行ったのと同じ方法で、より複雑になっているだけです。

-> そして、ソースクラスでは、オブジェクトを作成する 際に(同じコンストラクタでも)、新しいクラスにパラメータ値を要求する。

しかし、一般的には、この補助クラスの参照をソースクラスに渡さなければならないだろう。要するに、そう、構造と同じです。

これらのオブジェクトをさらに作成するためのコンテナ・クラスを作成する。そして、これらのパラメータは、このコンテナ・クラスで一度初期化することができる。それが、私の考えです。