プログラムのOnInit()で必要なデータ(このようなオブジェクトではすべて一定)を入れた構造体を介して、パラメータを渡すことができます。そして、例えばOnTick()などの標準的なハンドラでは、オブジェクトを作成しますが、作成時に次のように記述します。 CMyObject object = new CMyObject(a_here_structure_with_set_parameters).CMyObject object = new CMyObject(a_here_structure_with_set_parameters);
int i;
for(i=0;i<=OrderTicket();i++)
{
takelimit=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
if(iBarShift(Symbol(),0,OrderOpenTime())==2)//здесь нужно что бы на 2-ом баре если есть ордер его удалить, но удаляется он только если после его установки небыло на след баре еще лимитника
{
deletelimit=OrderDelete(ticket);
if(!deletelimit)
{
Comment(GetLastError());
}
}
}
if(условие для байлимита)
{ордерсенд}
elseif(условие для селлимита)
{ордерсенд}
inputint i_nA = 10;
inputdouble i_fB = 20.0;
inputdatetime i_dtC = D'2018.03.08 10:12:14';
class CCandle
{
int m_nA;
double m_fB;
datetime m_dtC;
public:
CCandle(void);
};
CCandle::CCandle(void)
: m_nA(i_nA)
, m_fB(i_fB)
, m_dtC(i_dtC)
{
Print("Создан объект со значениями: A = ", m_nA, ", B = ", m_fB, ", C = ", m_dtC);
}
intOnInit()
{
CCandle arrclass[10];
return(INIT_SUCCEEDED);
}
走らせれば、手に入る。
022:09:36.706 Test EURUSD,M1 inputs: i_nA=10; i_fB=20.0; i_dtC=1520503934;
022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: initialized
022:09:36.995 Test EURUSD,M1: uninit reason 0022:09:37.062 Script Test EURUSD,M1: removed
の方が短いのでは? bool barup=... WindowRedraw(); でも実行されます - if から引用しました。
もっと短くすることもできます...私のファイルを参照してください。
キンタローは、質問の文がはっきりしていますね。ポイントは、同じものを初期化することです。
まだ存在しないものをどうやって初期化するんだ?オブジェクトが作成された 後、そのオブジェクトは存在し始め、その時に初期化することができます。
オブジェクトにパラメトリックなコンストラクタを作り、必要なパラメータを渡して、新しく作られたオブジェクトを初期化するのに使うのです。
プログラムのOnInit()で必要なデータ(このようなオブジェクトではすべて一定)を入れた構造体を介して、パラメータを渡すことができます。そして、例えばOnTick()などの標準的なハンドラでは、オブジェクトを作成しますが、作成時に次のように記述します。
CMyObject object = new CMyObject(a_here_structure_with_set_parameters).CMyObject object = new CMyObject(a_here_structure_with_set_parameters);
あるいは、オブジェクトのデータがプログラムごとに変化せず、常に同じ値を持つのであれば、上記のIgorの言うように、初期化リストを通してコンストラクタで必要なパラメータを明示的に初期化します。
トレーディング、自動売買システム、ストラテジーテスティングに関するフォーラム
MQL4に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。
イホール・ヘラスコ さん 2018.03.28 17:31
これは、クラスのコンストラクタに ある初期化リストで行われます。
まだ存在しないものをどうやって初期化するんだ?オブジェクトが作成された 後、そのオブジェクトは存在し始め、その時に初期化することができます。
私はすぐにあなたに言いました - オブジェクトをパラメトリックコンストラクタにして、必要なパラメータを渡し、新しく作られたオブジェクトを初期化するために使用するのです。
この構造体には、プログラムの OnInit() で必要なデータ (このようなオブジェクトではすべて一定値) を入れます。そして、例えばOnTick()などの標準的なハンドラで、オブジェクトを作成しますが、作成時に以下のように記述します。
CMyObject object = new CMyObject(a_here_structure_with_set_parameters).CMyObject object = new CMyObject(a_here_structure_with_set_parameters);
はい、そうですか。ありがとうございます。オブジェクトを作成するときに、コンストラクタなどにパラメータを渡すことなく、あらかじめ設定されたパラメータをすぐに使えるようなソリューションがないかと考えていたのです。親学か何かで。
私のクラスでは、パラメータとしてインジケータ・パラメータなどいろいろなものを用意しています。一般的には、静的で同じになるもの。では、なぜオブジェクトを作成 するたびにこれらの値を渡さなければならないのでしょうか?
だから、受け流さないでください。示したように、初期化リストで初期化する。クラスのインスタンスを生成した時点で、クラスのコンストラクタが自動的に呼び出され、初期化リストで指定されたクラスの全メンバーが初期化されます。Print関数をCCandleメソッドに入れれば、コンストラクタが参照されずに呼び出される様子がわかるでしょう。
はい、そうですか。ありがとうございます。オブジェクトが作成されるときに、コンストラクタなどにパラメータを渡すことなく、あらかじめ設定されたパラメータをすぐに使えるようにすることです。親クラスか何かを経由して。
もう一度。コンストラクタにデータを転送することなく、実行することができます。
だから、受け流さないでください。示したように、初期化リストで初期化する。クラスのインスタンスを生成した時点で、クラスのコンストラクタが自動的に呼び出され、初期化リストで指定されたクラスの全メンバーが初期化されます。Print関数をCCandleメソッドに入れれば、コンストラクタが参照されずに呼び出されるのがわかるでしょう。
よくわからないのですが、コンストラクタで渡すか、初期化関数で渡すか、どんな違いがあるのでしょうか?
だから、受け流さないでください。示したように、初期化リストで初期化する。クラスのインスタンスを生成した時点で、クラスのコンストラクタが自動的に呼び出され、初期化リストで指定されたクラスの全メンバーが初期化されます。Print関数をCCandleメソッドに入れ、参照なしでコンストラクタが呼び出される様子をご覧ください。
何を使って初期化されるのでしょうか?どんな価値観で?I don't understand .
Expert Advisorの入力パラメータに 初期値があるとします。だから、クラスの各オブジェクトに渡す必要がある。しかし、新しく作られたオブジェクトにそれぞれ渡すのはNGです。
このサイクルでは、指値注文は、次のバーで指値注文を出した後、別の指値注文が出されていない場合にのみ削除されます。つまり、指値注文を出した後、指値注文のないバーが2本続く場合にのみ削除されるのです。
何を使って初期化されるのでしょうか?どんな価値観で?不明
初期化リストに書いてあるもの。
Expert Advisorの入力パラメータ に初期化された値があるとします。だから、このクラスの各オブジェクトに渡す必要がある。しかし、新しく作られたオブジェクトにそれぞれ渡すのはNGです。
これです。
走らせれば、手に入る。