記事"クロスプラットフォームEA: シグナル"についてのディスカッション - ページ 3 123 新しいコメント Enrico Lambino 2018.04.02 08:23 #21 Karl Klang:エンリコ、こんにちは、MAとTEMAインジケータがクロスしたときに機能するようなヒステリシス機能を含むCalculate関数を処理する方法を見つけました。しかし、オーダーマネージャーで問題が発生しました。それは、最適化中にストラテジー・テスターをいくつかのループで実行したときに起こります。最初のループでは問題なく動作しますが、いくつかのループの後、すべてのローソク足に対して注文が発注されます。ここでは問題なく動作します:しかし、ここでOrder Managerが複数の注文を出し始めます:COrderManagerの以下のコード部分をデバッグしたところ、orders_total = OrdersTotal();というステートメントがうまくいくと1になり、失敗すると0になります。うまくいけば、この問題を解決できるかもしれません。よろしくお願いします/ Karlこんにちは、カール、 この問題に遭遇したことはありません。OrdersTotal()メソッドは、単にアクティブなCOrderオブジェクトの数をカウントするだけです。もしコード化されたストラテジーに何か問題があるのであれば、修正しなければなりません。そうでない場合は、COrderインスタンスの管理方法(作成/破棄)および/またはカウント方法に何らかの問題があるはずです。この問題が見つかり次第、すぐにお知らせします。 Karl Klang 2018.04.02 11:34 #22 こんにちは、エンリコ、 mt5のOrdersTotal()の問題でググってみると、他の人も同じような問題を抱えていることがわかります。例ストラテジーテスターを 試せば同じ問題が再現できるかもしれません。エキスパートセットもアップロードしますので、私と同じ入力でストラテジーテスターを実行してみてください。 よろしくお願いします/ Karl How to use the OrdersTotal() correctly? 2010.09.09www.mql5.com I tried many times to check OrdersTotal(), but I found it did not work... ファイル: expert_trail_tema1.mq5 1 kb expert_trail_tema1b.mqh 15 kb expert_trail_tema1b.set 5 kb Enrico Lambino 2018.04.02 16:30 #23 Karl Klang:エンリコ、こんにちは、mt5のOrdersTotal()の問題でググってみると、他の人も同じような問題を抱えていることがわかります。例えばストラテジーテスターを 試せば、同じ問題を再現できるかもしれません。エキスパートセットもアップロードしますので、私と同じ入力でストラテジーテスターを実行してみてください。よろしくお願いします/ Karlファイルをありがとう。ご指摘の問題が発生しました。 メインのインクルードファイルで、これ(OnInit)を変更してください: file.Open(savefile,FILE_READ); if(!experts.Load(file.Handle())) return(INIT_FAILED); file.Close();をこれに変更してください: #ifdef __MQL5__ if (!(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION))) #else if (!(IsTesting() || IsOptimization())) #endif { file.Open(savefile,FILE_READ); if(!experts.Load(file.Handle())) return(INIT_FAILED); file.Close(); } そして this (OnDeinit): file.Open(savefile,FILE_WRITE); experts.OnDeinit(reason,file.Handle()); file.Close(); をこれに変更してください: #ifdef __MQL5__ if (!(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION))) #else if (!(IsTesting() || IsOptimization())) #endif { file.Open(savefile,FILE_WRITE); experts.OnDeinit(reason,file.Handle()); file.Close(); } 何らかの理由で、以前のセッションから保存されたデータが将来のセッションにリロードされています。そのため、この問題は最初のバックテスト後にのみ発生し、時にはメモリー・リークも発生します。私のテストによると、この問題はネッティング・モードのみに存在し、MT4やMT5のヘッジ・モードには存在しないようです。しかし、この問題が引き続き発生する場合はお知らせください。上記のコードでは、バックテストと最適化中にデータのロードと保存ができません(最終的な記事を書いている間、このことに言及しているのを見落としていました)。 Enrico Lambino 2018.04.02 16:40 #24 また、MT5 の OrdersTotal() については、保留中の注文のみをカウントします(MT4 の OrdersTotal と同等ではありません)。TradeOpen の OrderManager: bool COrderManager::TradeOpen(const string symbol,ENUM_ORDER_TYPE type,double price,bool in_points=true) { bool ret=false; double lotsize=0.0; int trades_total =TradesTotal(); int orders_total = OrdersTotal(); のコードでは、クラスの OrdersTotal() メソッドを使用していますが、これは COrders のメソッド(同じ名前)のラッパーにすぎません。COrders は CArrayObj を拡張しているため、実際には MT5 ネイティブのOrdersTotal() 関数を 使用していません。上記も使用するのと同じです: int orders_total = this.OrdersTotal(); 一方、: int orders_total = ::OrdersTotal(); を使用すると、MT5 ネイティブ関数が明示的に呼び出されます。すでにご存じかもしれませんが、同じような問題に遭遇した人のために念のため。 Karl Klang 2018.04.02 20:43 #25 エンリコ、ありがとう。問題は解決した。 /カール fxsaber 2018.04.03 06:26 #26 Enrico Lambino: #ifdef __MQL5__ if (!(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION))) // MQL5だけでなく、MQL4のコードも。 #else if (!(IsTesting() || IsOptimization())) #endif MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION) == MQLInfoInteger(MQL_TESTER) Enrico Lambino 2018.04.03 11:20 #27 fxsaber: なるほど。そうだね。 Karl Klang 2019.08.07 09:24 #28 こんにちは、エンリコ、 iceron/MQLxのGithubにm_new_signalとm_new_signal_closeの変更通知があります。 m_signal_newはvoid CSignalsBase::NewSignal(const bool value)メソッドで変更できますが、m_new_signal_closeを変更するメソッドがありません。 m_new_signalとm_new_signal_closeの使い方を詳しく教えてください。 if(m_invert) { CSignal::SignalInvert(m_signal_open); CSignal::SignalInvert(m_signal_close); } if(m_new_signal) { if(m_signal_open==m_signal_open_last) m_signal_open = CMD_NEUTRAL; } if(m_new_signal_close) { if(m_signal_close==m_signal_close_last) m_signal_close = CMD_NEUTRAL; } よろしくお願いします。 カール iceron - Overview github.com Sign up for your own profile on GitHub, the best place to host code, manage projects, and build software alongside 36 million developers. Sign up smatt2008 2020.08.01 04:35 #29 これらの方法はMT5Bridgeで使えますか? BahramPrv 2020.08.30 04:31 #30 マスターの皆さん、こんにちは! SignalACクラスに属する以下のMql Signalコードで、"キャンドルカウント"(1番目、2番目、3番目=idx、idx++、...)を理解するのに深刻な問題があります。 どなたか、コードを下に移動する ときにidx番号に浸透させる手助けをしていただけませんか? よろしくお願いします。 //+------------------------------------------------------------------+ //| 価格が上昇することに "投票 "する。| //+------------------------------------------------------------------+ int CSignalAC::LongCondition(void) { int result=0; int idx =StartIndex(); //--- 最初に分析されたバーが「赤」の場合、「買い」に「投票」しない。 if(DiffAC(idx++)<0.0) return(result); //--- 最初の分析バーが "緑"(インジケーターは買いに異論なし)。 if(IS_PATTERN_USAGE(0)) result=m_pattern_0; //--- 2本目の分析バーが "赤 "の場合、買いの条件はない。 if(DiffAC(idx)<0.0) return(result); //--- 2本目の分析バーが "緑"(買いの条件が満たされた可能性がある) //--- 2本目の分析バーが0より小さい場合、3本目のバーを分析する必要がある。 if(AC(idx++)<0.0) { //--- 3本目の分析バーが "赤 "の場合、買いの条件はない。 if(DiffAC(idx++)<0.0) return(result); } //--- 購入には条件がある if(IS_PATTERN_USAGE(1)) result=m_pattern_1; //--- 前に分析したバーが "赤 "であれば、買いの条件が満たされたことになる。 if(IS_PATTERN_USAGE(2) && DiffAC(idx)<0.0) result=m_pattern_2; //--- 結果を返す return(result); } 123 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
エンリコ、こんにちは、
MAとTEMAインジケータがクロスしたときに機能するようなヒステリシス機能を含むCalculate関数を処理する方法を見つけました。
しかし、オーダーマネージャーで問題が発生しました。それは、最適化中にストラテジー・テスターをいくつかのループで実行したときに起こります。最初のループでは問題なく動作しますが、いくつかのループの後、すべてのローソク足に対して注文が発注されます。
ここでは問題なく動作します:
しかし、ここでOrder Managerが複数の注文を出し始めます:
COrderManagerの以下のコード部分をデバッグしたところ、orders_total = OrdersTotal();というステートメントがうまくいくと1になり、失敗すると0になります。
うまくいけば、この問題を解決できるかもしれません。
よろしくお願いします/
Karl
こんにちは、カール、
この問題に遭遇したことはありません。OrdersTotal()メソッドは、単にアクティブなCOrderオブジェクトの数をカウントするだけです。もしコード化されたストラテジーに何か問題があるのであれば、修正しなければなりません。そうでない場合は、COrderインスタンスの管理方法(作成/破棄)および/またはカウント方法に何らかの問題があるはずです。この問題が見つかり次第、すぐにお知らせします。
こんにちは、エンリコ、
mt5のOrdersTotal()の問題でググってみると、他の人も同じような問題を抱えていることがわかります。例ストラテジーテスターを 試せば同じ問題が再現できるかもしれません。エキスパートセットもアップロードしますので、私と同じ入力でストラテジーテスターを実行してみてください。
よろしくお願いします/
Karl
エンリコ、こんにちは、
mt5のOrdersTotal()の問題でググってみると、他の人も同じような問題を抱えていることがわかります。例えばストラテジーテスターを 試せば、同じ問題を再現できるかもしれません。エキスパートセットもアップロードしますので、私と同じ入力でストラテジーテスターを実行してみてください。
よろしくお願いします/
Karl
ファイルをありがとう。ご指摘の問題が発生しました。
メインのインクルードファイルで、これ(OnInit)を変更してください:
をこれに変更してください:
そして this (OnDeinit):
をこれに変更してください:
何らかの理由で、以前のセッションから保存されたデータが将来のセッションにリロードされています。そのため、この問題は最初のバックテスト後にのみ発生し、時にはメモリー・リークも発生します。私のテストによると、この問題はネッティング・モードのみに存在し、MT4やMT5のヘッジ・モードには存在しないようです。しかし、この問題が引き続き発生する場合はお知らせください。上記のコードでは、バックテストと最適化中にデータのロードと保存ができません(最終的な記事を書いている間、このことに言及しているのを見落としていました)。
また、MT5 の OrdersTotal() については、保留中の注文のみをカウントします(MT4 の OrdersTotal と同等ではありません)。TradeOpen の OrderManager:
のコードでは、クラスの OrdersTotal() メソッドを使用していますが、これは COrders のメソッド(同じ名前)のラッパーにすぎません。COrders は CArrayObj を拡張しているため、実際には MT5 ネイティブのOrdersTotal() 関数を 使用していません。上記も使用するのと同じです:
一方、:
を使用すると、MT5 ネイティブ関数が明示的に呼び出されます。すでにご存じかもしれませんが、同じような問題に遭遇した人のために念のため。
エンリコ、ありがとう。問題は解決した。
/カール
こんにちは、エンリコ、
iceron/MQLxのGithubにm_new_signalとm_new_signal_closeの変更通知があります。
m_signal_newはvoid CSignalsBase::NewSignal(const bool value)メソッドで変更できますが、m_new_signal_closeを変更するメソッドがありません。
m_new_signalとm_new_signal_closeの使い方を詳しく教えてください。
よろしくお願いします。
カール
これらの方法はMT5Bridgeで使えますか?
マスターの皆さん、こんにちは!
SignalACクラスに属する以下のMql Signalコードで、"キャンドルカウント"(1番目、2番目、3番目=idx、idx++、...)を理解するのに深刻な問題があります。
どなたか、コードを下に移動する ときにidx番号に浸透させる手助けをしていただけませんか?
よろしくお願いします。