現在のバージョンのコンパイラーは前方宣言を認識しますが、前方宣言されたクラスのリストされたメソッドは認識しません。そのため、"CStop - declaration without type "のようなエラー・メッセージは表示されませんが、上記のようなメソッドのコンパイラー・エラー・メッセージは表示されます。コンパイラはクラスを認識しますが、順方向に宣言されたクラスのメソッドは認識しません。
Клиентские терминалы MetaTrader 4 и MetaTrader 5 предоставляют своим пользователям возможность легко создавать прототипы программ на языке MQL с помощью встроенного Мастера (MQL Wizard). Мастера обоих версий терминалов очень похожи, но все же имеют одно важное отличие. В Мастере MetaTrader 5 есть пункт генерации готовых советников, а в...
メインのストップロスを 変更したいのですが・・・。どうすればいいですか?
それをやっているんだ:
COrder *order=orders.At(i); .... COrderStop *order_stop=order.MainStop(); double new_sl=...; order_stop.StopLoss(new_sl); order.MainStop(order_stop); order.CheckStops();
それをやろうとして、本当に頭が壊れたよ...
COrderStopVirtualBase::Updateでチェックしている ため更新されない。
StopLoss()は新しい値を返しますが、sl_lineは古いままです。
こんにちは、シェップ、
ご指摘ありがとうございます。今まで気づかなかった。コードを更新します。
はい。これはやはり前方宣言によるものです。CStopはメソッド内でCOrderとCOrderStopのインスタンスを必要とします。CStopをコンパイルしようとした場合も同様です。お互いを必要とするこれらのクラスは、すべて一緒にコンパイルする必要がある。それぞれを単独でコンパイルするとエラーが発生する。例えば
これはコンパイルできない。前方宣言を宣言して、コンパイラがobject1クラス内のクラス・メンバm_object2を認識できるようにする必要があります:
これは、Object1とObject2が同じファイルにある場合は問題ありません。もし、Object1とObject2が別々のファイルにある場合は、Object1のクラス・ファイルにObject2の前方宣言を、Object2のクラス・ファイルにObject1の前方宣言を作成する必要があります。これは、2つのクラスのどちらかにメソッドを追加するまでは正しい。
現在のバージョンのコンパイラーは前方宣言を認識しますが、前方宣言されたクラスのリストされたメソッドは認識しません。そのため、"CStop - declaration without type "のようなエラー・メッセージは表示されませんが、上記のようなメソッドのコンパイラー・エラー・メッセージは表示されます。コンパイラはクラスを認識しますが、順方向に宣言されたクラスのメソッドは認識しません。
こんにちは、エンリコ、
素早い回答をありがとう。前方宣言については、その通りです。 前方宣言されたクラスを使用するオブジェクトが、そのクラスのメンバーについて何も知らないというのは理にかなっています。
私は自分の実行エンジンにストラテジー・パターンを使った別のモデルを使っているのですが、これにはいくつか厄介な問題があって、ちょうどあなたのライブラリを見ていたときに、そうした問題に出くわしました。
あなたの仕事は本当に素晴らしく、健全なデザインとエンジニアリングのスキルを持っています。
ありがとう、シェップ。
エンリコ、こんにちは、
素早い回答をありがとう。前方宣言については、その通りです。 前方宣言されたクラスを使用するオブジェクトが、そのクラスのメンバーについて何も知らないというのは理にかなっています。
私は自分の実行エンジンにストラテジー・パターンを使った別のモデルを使っているのですが、これにはいくつか厄介な問題があって、ちょうどあなたのライブラリを見ていたときに、そうした問題に出くわしたのです。
あなたの仕事は本当に素晴らしく、健全なデザインとエンジニアリングのスキルを持っています。
ありがとう、シェップ。
こんにちは、シェップ、
どういたしまして、教えてくれてありがとう。前方宣言の問題にぶつかったとき、私も少し戸惑ったことを思い出したよ。
記事が役に立ったと聞いてうれしいよ。あなた自身のEAエンジンを構築する努力が報われることを祈っている。
ありがとう、エンリコ
COrderStopVirtualBase::Updateでチェックしているため更新されない。
StopLoss()は新しい値を返しますが、sl_lineは古いままです。
COrderStopVirtualBase::Updateの目的は、実はあなたの意図とは逆です。これは、通常EAの外部から(チャート上でドラッグしたり、オブジェクトのプロパティウィンドウで 直接値を変更したり)、自身のストップラインが更新されたときにsl/tp値を調整するためのものです。仮想ストップには、代わりに MoveStopLoss() と MoveTakeProfit() メソッドを使用してください。
これは次の記事のためのものですが、熱心な方は COrderStopBase の CheckTrailing() メソッドを見てみるとよいでしょう。このメソッドは、トレーリングの対象となるオーダー・ストップを変更する。このメソッドは、3つのタイプすべてに適用されます:
また、CTrail クラスは、オーダー・ストップのインスタンスを取得することなく sl/tp レベルを変更するために使用することもできます (トレイリングやブレークイーブンのためだけではありません)。
提案されているクロスプラットフォーム・アプローチは、実践と利便性からいかにかけ離れているか。それ自身の面倒な自転車としては問題ない。しかし、なぜそれを公開するのか!このモンスターを勉強して使いこなすより、初心者でも完全に自分ですべてを書く方が簡単だ。理解できない。
MT5下のSBは、この記事のサイクルに比べればエレガンスの見本だ。しかもMT4にも移植されている。
この記事は本当に面白かった。ぜひフォローアップ記事を書いてください。このツールを使ってスキャルピングにどうアプローチするのか、とても興味があります。
この記事と他のすべての仕事に100万ドルありがとう。
提案されているクロスプラットフォーム・アプローチは、実践と利便性からいかにかけ離れているか。それ自身の面倒な自転車としては問題ない。しかし、なぜそれを公開するのか!このモンスターを勉強して使いこなすより、初心者でも完全に自分ですべてを書く方が簡単だ。理解できない。
MT5のSBは、この記事のサイクルに比べれば、エレガンスの見本だ。しかもMT4に移植されている。
まったく同感だ。OOPに精通していても、この著者のアプローチはあまりに変態的だ。過剰な部分が多すぎるし、コードはまったくコードではなく「モンスター」だ......。