記事"クロスプラットフォームEA: CExpertAdvisor と CExpertAdvisors クラス"についてのディスカッション - ページ 2 123 新しいコメント mbjen 2017.12.09 18:36 #11 52959000 undeleted objects left6619875 objects of type CExpertAdvisor left6619875 objects of type CAccountInfo left6619875 objects of type CSymbolManager left6619875 objects of type COrderManager left13239750 objects of type COrders left6619875 objects of type CTradeManager left6619875 objects of type CCandleManager left1689399848 bytes of leaked memoryこれらのエラーを修正するにはどうすればよいですか?プログラムはあなたのサンプルに基づいて設計されています。OnDeinit()関数では、experts.OnDeinit()しかありません。OnInit()ではexperts.OnTick()のみです;シグナル関数では、サンプルと同じようにカスタムインジケータオブジェクトを作成しています。 Discussion of article "Cross-Platform 記事「ニューラルネットワークが簡単に(第31部):進化的アルゴリズム」についてのディスカッション クロスプラットフォームEA: CExpertAdvisor と CExpertAdvisors mbjen 2017.12.13 03:46 #12 mbjen:52959000 undeleted objects left6619875 objects of type CExpertAdvisor left6619875 objects of type CAccountInfo left6619875 objects of type CSymbolManager left6619875 objects of type COrderManager left13239750 objects of type COrders left6619875 objects of type CTradeManager left6619875 objects of type CCandleManager left1689399848 bytes of leaked memoryこれらのエラーを修正するにはどうすればよいですか?プログラムはあなたのサンプルに基づいて設計されています。OnDeinit()関数では、experts.OnDeinit()しかありません。OnInit()ではexperts.OnTick()のみです;そしてシグナル関数では、あなたのサンプルと同じようにカスタムインジケーターオブジェクトを作成しているだけです。大丈夫です。 mbjen 2017.12.26 01:12 #13 もし差し支えなければ、もう一つ可能性のあるバグを報告させてください。未決済注文の数が返ってこないのです。調べ 始めたところ、この問題はOrdersBaseとソートモードに関係していることがわかりました。以下のコードを追加しなければならなかった:COrder *COrdersBase::NewOrder(const ulong ticket,const string symbol,const int magic,const ENUM_ORDER_TYPE type,const double volume,const double price) { COrder *order=new COrder(ticket,symbol,type,volume,price); if(CheckPointer(order)==POINTER_DYNAMIC) { order.SetContainer(GetPointer(this)); if(SortMode()==-1) Sort(0); if(InsertSort(GetPointer(order))) { order.Magic(magic); if(type==ORDER_TYPE_BUY || type==ORDER_TYPE_SELL) order.Init(GetPointer(this),m_stops); else order.Initialized(false); return order; } } return NULL; }なぜ適切なソートモードで初期化されないのか、あるいは追加で初期化しなければならないのか...見当もつきません。 Enrico Lambino 2017.12.26 04:16 #14 mbjen:もし差し支えなければ、もう一つ可能性のあるバグを報告させてください。未決済注文の数が返ってこないのです。調べ始めたところ、問題はOrdersBaseとソートモードに関連していることがわかりました。以下のコードを追加しなければならなかった:なぜ適切なソートモードで初期化されないのか、あるいは追加で初期化しなければならないのか、理由はわかりません。COrdersBaseのコンストラクタには次のようなコードがあります:COrdersBase::COrdersBase(void) { if(!IsSorted()) Sort(); }はじめに、内部のオブジェクト配列がまだソートされていない場合、それをソートします。NewOrder()を使用せずに他の項目が追加されると、ソートされなくなる可能性があります(例えばAdd())。あなたのような問題は再現できません。私の結果は、テスト全体を通して常にソートされています。テストの中で、配列が最初にソートされなくなった時点を探してみてください。それが問題の原因を突き止める手がかりになるかもしれません。 mbjen 2018.01.07 23:34 #15 こんにちは、また問題に直面したら連絡します。もう一つ質問があります。シグナルモジュールを呼び出している現在のエキスパートのインスタンスを取得する方法を教えてください。以前の注文結果をチェックする関数を 持つシグナルクラスがあるとします。複数のエキスパート・インスタンスがあります。では、シグナルチェック関数を呼び出している現在のエキスパート注文を取得するにはどうすればいいのでしょうか?あるいは、別の適切な解決策があるかもしれません。そのためのアイデアやコードを教えてください。私の目標は、以前の注文/ポジションの結果に応じて異なる動作をするシグナルを作成することです。 Enrico Lambino 2018.01.08 08:37 #16 その方法はたくさんあり、プログラマーによって異なるかもしれない。デフォルトでは、エキスパート・インスタンスは互いに独立して動作する。インスタンスが同じ情報を共有できるように実装してもよい。 各エキスパートがオープンした取引を区別したい場合は、各インスタンスに一意のマジックナンバーを割り当てることから始めるとよいでしょう。コードをお見せいただけない限り、これ以上のお手伝いはできません。 mbjen 2018.01.08 23:19 #17 エンリコ、私のコードは完全にあなたの最後の例に基づいています。私はただ一つのグローバル定義CExpertAdvisors expertsを持っています;OnInit()では、money/stops/signalモジュールを初期化し、次に各エキスパートのインスタンスにそれらを追加します。OnTick()では、experts.OnTick()のみを持っています。そして、Calculate()、LongCondition()、ShortCondition()などのカスタム・シグナル・クラスを持っています。このシグナルはエキスパートのインスタンスごとに追加されます。シグナルのロジックは、各エキスパート・インスタンスの最後の注文/ポジション結果に依存するようにしたい。マジック・ナンバーとは関係ありません(私のエキスパート・インスタンスはすべて異なるマジックを持っています)。Calculate()、LongCondition()、ShortCondition()と呼ばれるシグナル関数には、エキスパート・インスタンスを特定し、次にその注文を見つけるのに役立つマジックやその他の詳細はありません。コードとしては、このようにCalculate()関数とします:bool SignalClass::Calculate() { //--- some code to find out if the expert last order was profitable or not return true; } ご理解いただけたでしょうか。ライブラリのコードを変更せずに、これを実装する方法はありますか? mbjen 2018.01.11 19:10 #18 こんにちは、エンリコ、どのエキスパート・インスタンスがシグナルチェック関数を呼び出して いるのかを特定する方法を探しています。どうすればいいでしょうか?何かヒントがあれば教えてください。 mbjen 2018.01.21 02:05 #19 もう一つの質問です。マルチペアトレードのエキスパートを持ちたい場合、どのように初期化するのでしょうか?CExpertAdvisorBase::Init() でシンボル名を指定しなければなりません。 mbjen 2018.01.23 04:09 #20 過去の注文結果に基づいてMMタイプを作成するには?融通が利かないですね...。 123 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
これらのエラーを修正するにはどうすればよいですか?プログラムはあなたのサンプルに基づいて設計されています。
OnDeinit()関数では、experts.OnDeinit()しかありません。
OnInit()ではexperts.OnTick()のみです;
シグナル関数では、サンプルと同じようにカスタムインジケータオブジェクトを作成しています。
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
これらのエラーを修正するにはどうすればよいですか?プログラムはあなたのサンプルに基づいて設計されています。
OnDeinit()関数では、experts.OnDeinit()しかありません。
OnInit()ではexperts.OnTick()のみです;
そしてシグナル関数では、あなたのサンプルと同じようにカスタムインジケーターオブジェクトを作成しているだけです。
大丈夫です。
もし差し支えなければ、もう一つ可能性のあるバグを報告させてください。
未決済注文の数が返ってこないのです。調べ 始めたところ、この問題はOrdersBaseとソートモードに関係していることがわかりました。
以下のコードを追加しなければならなかった:
なぜ適切なソートモードで初期化されないのか、あるいは追加で初期化しなければならないのか...見当もつきません。
もし差し支えなければ、もう一つ可能性のあるバグを報告させてください。
未決済注文の数が返ってこないのです。調べ始めたところ、問題はOrdersBaseとソートモードに関連していることがわかりました。
以下のコードを追加しなければならなかった:
なぜ適切なソートモードで初期化されないのか、あるいは追加で初期化しなければならないのか、理由はわかりません。
COrdersBaseのコンストラクタには次のようなコードがあります:
はじめに、内部のオブジェクト配列がまだソートされていない場合、それをソートします。
NewOrder()を使用せずに他の項目が追加されると、ソートされなくなる可能性があります(例えばAdd())。
あなたのような問題は再現できません。私の結果は、テスト全体を通して常にソートされています。テストの中で、配列が最初にソートされなくなった時点を探してみてください。それが問題の原因を突き止める手がかりになるかもしれません。
こんにちは、
また問題に直面したら連絡します。
もう一つ質問があります。シグナルモジュールを呼び出している現在のエキスパートのインスタンスを取得する方法を教えてください。
以前の注文結果をチェックする関数を 持つシグナルクラスがあるとします。複数のエキスパート・インスタンスがあります。では、シグナルチェック関数を呼び出している現在のエキスパート注文を取得するにはどうすればいいのでしょうか?
あるいは、別の適切な解決策があるかもしれません。そのためのアイデアやコードを教えてください。
私の目標は、以前の注文/ポジションの結果に応じて異なる動作をするシグナルを作成することです。
その方法はたくさんあり、プログラマーによって異なるかもしれない。デフォルトでは、エキスパート・インスタンスは互いに独立して動作する。インスタンスが同じ情報を共有できるように実装してもよい。
各エキスパートがオープンした取引を区別したい場合は、各インスタンスに一意のマジックナンバーを割り当てることから始めるとよいでしょう。コードをお見せいただけない限り、これ以上のお手伝いはできません。
エンリコ、
私のコードは完全にあなたの最後の例に基づいています。
私はただ一つのグローバル定義CExpertAdvisors expertsを持っています;
OnInit()では、money/stops/signalモジュールを初期化し、次に各エキスパートのインスタンスにそれらを追加します。
OnTick()では、experts.OnTick()のみを持っています。
そして、Calculate()、LongCondition()、ShortCondition()などのカスタム・シグナル・クラスを持っています。このシグナルはエキスパートのインスタンスごとに追加されます。
シグナルのロジックは、各エキスパート・インスタンスの最後の注文/ポジション結果に依存するようにしたい。マジック・ナンバーとは関係ありません(私のエキスパート・インスタンスはすべて異なるマジックを持っています)。Calculate()、LongCondition()、ShortCondition()と呼ばれるシグナル関数には、エキスパート・インスタンスを特定し、次にその注文を見つけるのに役立つマジックやその他の詳細はありません。
コードとしては、このようにCalculate()関数とします:
ご理解いただけたでしょうか。ライブラリのコードを変更せずに、これを実装する方法はありますか?
こんにちは、エンリコ、
どのエキスパート・インスタンスがシグナルチェック関数を呼び出して いるのかを特定する方法を探しています。どうすればいいでしょうか?何かヒントがあれば教えてください。
もう一つの質問です。マルチペアトレードのエキスパートを持ちたい場合、どのように初期化するのでしょうか?CExpertAdvisorBase::Init() でシンボル名を指定しなければなりません。
過去の注文結果に基づいてMMタイプを作成するには?融通が利かないですね...。