int PassesSet( constint Index, constMqlParam& Parameters[] );
パラメータセット自体はシステムに保存されておらず、組み合わせの固有番号(現在はパス番号と一致)により計算されていると推測されます。したがって、組み合わせの順番を変えることはできても、構成を変えることはできないのです。つまり、この場合、SwapPasses(long index1, long index2)のようなものになります。
パラメータセット自体はシステムに保存されておらず、固有の組み合わせ番号(現在はパス番号と一致している)を使って計算されていると推測されます。したがって、組み合わせの順番を変えるだけで、その構成は変えられません。すなわち、この場合、SwapPasses(long index1, long index2)のようなものになります。
class B
{
private:
int m_width;
int m_length;
public:
void Reset() { m_width = 0; m_length = 0; }
}
class A
{
private:
B m_member;
public:
B GetBMember() const { return( m_member ); }
}
//---
A obj;
obj.GetBMember().Reset();
class B
{
private:
int m_width;
int m_length;
public:
void Reset() { m_width = 0; m_length = 0; }
}
class A
{
private:
B m_member;
public:
B * GetBMember() const { return( & m_member ); }
}
//---
A obj;
obj.GetBMember().Reset();
だから、MQLコンパイラは私が思っていたほど賢くないのだと、後悔しているところです)。簡単な例を作ってみたところ、どこにも使われない、何もしないダミーオブジェクトを作っても、コンパイラはそれを気にしないことが判明しました。全く最適化されていない。スピードだけで判断しています。そして、なぜか新しいビルドでは古いビルドより動作が遅くなる。
開発者も承知して います。しかし、このようなコンパイラによる最適化は、解決すべき課題の優先順位とはかけ離れている。
このような コンパイラの曖昧さもある。
開発者も承知して います。しかし、このようなコンパイラによる最適化は、解決すべき課題の優先順位からは程遠い。
そうなんですが、さっきここであれだけオプティマイザーの質をかつてないほど高めたと自慢しておきながら、実はそんな簡単なことすら処理できていないというのが、なんとも不思議なんですよね。もっと複雑なものはおろか
そこで、OnTesterInitにデフォルトのパステーブルを変更する可能性を追加することを提案します。
パラメータセット自体はシステムに保存されておらず、組み合わせの固有番号(現在はパス番号と一致)により計算されていると推測されます。したがって、組み合わせの順番を変えることはできても、構成を変えることはできないのです。つまり、この場合、SwapPasses(long index1, long index2)のようなものになります。
でも、間違っているかもしれない。
パラメータセット自体はシステムに保存されておらず、固有の組み合わせ番号(現在はパス番号と一致している)を使って計算されていると推測されます。したがって、組み合わせの順番を変えるだけで、その構成は変えられません。すなわち、この場合、SwapPasses(long index1, long index2)のようなものになります。
ということになるのかもしれません。これで、EAソースのSwap入力行によって、まだ何らかの影響を受ける可能性があります。
ということになるのかもしれません。これで、EA のソースコードにある入力行の入れ替えで、順番がどうにかなりそうです。
最適化アルゴリズムを殺してしまう、つまりランダムな方向で最適化するようなものです。
これでは最適化アルゴリズムが死んでしまいます。ランダムな方向に最適化するようなものです。
そもそも、完全にオーバーシュートしているという話です。
私は徐々にOOPを学んでいますが、1つだけ明白でないことに出くわしました。
クラスAがあり、そのフィールドは別のクラスBのオブジェクトである。
クラスAでは、クラスBのオブジェクトを返す定数メソッドが 呼び出されます。
その後、クラスBのメソッドが呼び出され、返されたオブジェクトのパラメータが削除されます。
こんな感じです(例はブラウザで書いたもので簡略化しています)。
その結果、Reset()が動作しない、つまりm_memberフィールドがクリアされない。
質問:コンパイラはビルド時に定数オブジェクトの定数でないメソッドが呼び出されていることを報告(エラー/警告)するべきではないでしょうか?
質問:コンパイラはビルド時に、定数オブジェクトに対して定数でないメソッドが呼び出されていることを報告(エラー/警告)するべきではないでしょうか?
おそらく、一時的なオブジェクトに対してResetが 呼び出された結果、暗黙のうちにコピーコンストラクタが呼び出されたことが原因だと思われます。
おそらく、一時的なオブジェクトに対してResetが 呼び出された結果、暗黙のうちにコピーコンストラクタが呼び出されたことが原因だと思われます。
私は徐々にOOPを学んでいますが、1つだけ明白でないことに出くわしました。
クラスAがあり、そのフィールドは別のクラスBのオブジェクトである。
クラスAでは、クラスBのオブジェクトを返す定数メソッドが 呼び出されます。
その後、クラスBのメソッドが呼び出され、返されたオブジェクトのパラメータが削除されます。
こんな感じです(例はブラウザで書いたもので簡略化しています)。
その結果、Reset()が動作しない、つまりm_memberフィールドがクリアされない。
質問:コンパイラはビルド時に定数オブジェクトの定数でないメソッドが呼び出されていることを報告(エラー/警告)すべきではないでしょうか?