記事"MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第8部): 注文およびポジション変更イベント"についてのディスカッション - ページ 3 1234 新しいコメント leonerd 2021.02.06 16:20 #21 leonerd:ティックが受信され、そのティックに未決注文が 設定され、同時に有効化(トリガー)された場合(買い逆指値でテストしました)、エンジンはすべてのイベントを登録しません...TRADE_EVENT_PENDING_ORDER_PLASEDイベントは受信されますが、TRADE_EVENT_PENDING_ORDER_ACTIVATEDは受信されません。私のコードは次のようなものです:まず、古い(処理された)イベントのインデックスをループ内で見つけ、それを起点として、新しいイベントを最後までループします。つまり、1ティックで指値注文が設定され、striggerenが設定に関するイベントを1つ受信するような状況で...コメントをお願いします。 engine.OnTick(rates_data)の後のOnTick()でProcessTradeEvents()を呼んでいます。 注文はあなたのエンジンによって出されました。もしかしたら、まだ有効化されていないのに呼んでいたのかもしれません・・・。手動注文で確認してみます。 leonerd 2021.02.06 16:24 #22 leonerd:注文は自分のエンジンで行った。もしかしたら、まだアクティベーションが行われていないのに、まだ呼んでしまったのかもしれない......。今マニュアルオーダーで確認してみます。 そうですね、手が曲がっているんだと思います...。 Artyom Trishkin 2021.02.06 16:44 #23 leonerd:ああ、手が曲がっている気がする...。 いや、図書館にあるんだ。正確には、ライブラリーにあるのではなく、端末の注文履歴を 記録する特殊性にある。ライブラリの後のバージョンでは、この機能が考慮され、すべてが正しく追跡されます。30日頃のバージョンを試してみてください。今はどこが修正されたのか覚えていません。しかし、私はそれについて後の記事に書きました - そこに修正がありました。 MQL_User 2022.07.02 20:27 #24 こんにちは。 TestDoEasyPart08.mq5をテスト中にこの問題に遭遇しました - StopLossとTakeProfitが機能しません。StopLossとTakeProfitは設定されていますが、対応するラインがチャートに表示され、ジャーナルへのメッセージも表示されます。TrailStopをオンにすると、TakeProfitはトリガーされますが、StopLossはまだトリガーされません。何が原因でしょうか? 追伸:同じコードを別のコンピュータ(ラップトップ)で実行したところ、問題なく動作しました。同じメタトレーダーがインストールされていますが。 MrBrooklin 2022.07.02 21:18 #25 MQL_User #:こんにちは。TestDoEasyPart08.mq5をテスト中にこの問題に遭遇しました - StopLossとTakeProfitが機能しません。StopLossとTakeProfitは設定されていますが、対応するラインがチャートに表示され、ジャーナルへのメッセージも表示されます。TrailStopをオンにすると、TakeProfitはトリガーされますが、StopLossはまだトリガーされません。何が原因でしょうか?追伸:同じコードを別のコンピュータ(ラップトップ)で実行したところ、問題なく動作しました。同じメタトレーダーがインストールされていますが。 こんばんは!まず、ログに表示されるメッセージだけでも表示してください。 よろしく、ウラジミール。 Artyom Trishkin 2022.07.02 23:36 #26 MQL_User #:こんにちは。TestDoEasyPart08.mq5をテスト中にこの問題に遭遇しました - StopLossとTakeProfitが機能しません。StopLossとTakeProfitは設定されていますが、対応するラインがチャートに表示され、ジャーナルへのメッセージも表示されます。TrailStopをオンにすると、TakeProfitはトリガーされますが、StopLossはまだトリガーされません。何が原因でしょうか?追伸:同じコードを別のコンピュータ(ラップトップ)で実行したところ、問題なく動作しました。同じメタトレーダーがインストールされていますが。 ストップ(指値)注文が発注された場合、そのトリガーはプログラムではなくブローカーに依存します。逆指値(リミット)注文の発注はプログラムからサーバーに送られ、そのトリガーはブローカーに依存します。逆指値注文は発注され(チャート上にラインが表示され)、プログラム側にエラーはありません。ほとんどの場合、価格はストップ(指値)注文に到達しません。 MQL_User 2022.07.03 11:48 #27 MrBrooklin #:こんばんは、せめてログに残るメッセージを表示してください。よろしく、ウラジミール。 MrBrooklin、Artem。 ストラテジー・テスターでやってみました(私の理解では、ブローカーは関係ありません)。 メッセージは以下の通りです: 2022.07.03 11:16:39.380 2022.01.03 07:00:00 instant buy 0.1 @Si at 81011 sl: 80960 tp: 81060 (81010 / 81011 / 81010) 2022.07.03 11:16:39.380 2022.01.03 07:00:00 ディール #2 buy 0.1 @Si at 81011 done (based on order #2) 2022.07.03 11:16:39.380 2022.01.03 07:00:00 取引成立 [#2 buy 0.1 @Si at 81011] 2022.07.03 11:16:39.380 2022.01.03 07:00:00 注文成立 0.1 @Si at 81011 [#2 buy 0.1 @Si at 81011] 取引成立。 しかし、StopLossとTakeProfitが正しく動作する別のコンピュータ(ラップトップ)では、メッセージは次のようになります: 2022.07.03 11:23:18.383 2022.01.03 07:00:12 instant buy 0.1 @Si at 81047 sl: 80996 tp: 81096 (81046 / 81047 / 81046) 2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal #2 buy 0.1 @Si at 81047 done (based on order #2) 2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal performed [#2 buy 0.1 @Si at 81047] 2022.07.03 11:23:18.383 2022.01.03 07:00:12 注文約定 買い 0.1 at 81047 [#2 buy 0.1 @Si at 81047] 2022.07.03 11:23:18.514 2022.01.03 07:00:12 - ポジションオープン: 2022.01.03 07.03 07:00:12.490 - 2022.07.03 11:23:18.514 2022.01.03 07:00:12 @Si Open 0.10 Buy #2 [0.10 成行注文 Buy #2] at 81047, sl 80996, tp 81096, magik 123 確かに、あと2行...。 物事を少し単純化するために、私はこの単純なコードでExpert Advisorを書きました: #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include <Trade\Trade.mqh> #import "user32.dll" int GetAsyncKeyState(int a0); #import bool ZPressed, ZPress = false; bool APressed, APress = false; CTrade trade; int OnInit() { return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } void OnTick() { // Z」ボタンが押される if(MathAbs(GetAsyncKeyState(90))>1) ZPressed = ZPress = true; else ZPress = false; if(ZPressed && !ZPress) { ZPressed = false; double Price = SymbolInfoDouble(Symbol(),SYMBOL_BID); double sl = Price - 30, tp = Price + 50; trade.Buy(1,Symbol(),0,sl,tp); printf("Buy"); } // A」ボタンが押される if(MathAbs(GetAsyncKeyState(65))>1) APressed = APress = true; else APress = false; if(APressed && !APress) { APressed = false; double Price = SymbolInfoDouble(Symbol(),SYMBOL_BID); double sl = Price + 30, tp = Price - 50; trade.Sell(1,Symbol(),0,sl,tp); printf("Sell"); } } void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { } //+------------------------------------------------------------------+ 要は、「Z」キーを押すと(というか離すと)「買い」が開き、「A」キーを押すと「売り」が開くというもの。 テスターで動かしてみた。結果は同じで、デスクトップPCではStopLossとTakeProfitは機能しませんが、ラップトップPCでは機能します。 また、この記事の最後にリンクされているコードをテスターでPCとラップトップで動かしてみましたが、同じことが起こりました-PCでは動きませんが、ラップトップでは動きます。 つまり、テスターにslとtpのトリガーを可能にする何らかの設定があるか(それは私にはわからない)、テスター自体が正しく動作していないかのどちらかだ。 Discussion of article "Library 回帰指標を用いたONNXモデルの評価 MQL5クックブック - MQL5での未決注文の取り扱いとマルチカレンシーエキスパートアドバイザー Artyom Trishkin 2022.07.03 13:52 #28 MQL_User #:Mr.ブルックリン、アルテム 私はストラテジーテスターで行いました(私の理解では、ブローカーは関係ありません)。メッセージは以下の通りです:2022.07.03 11:16:39.380 2022.01.03 07:00:00 Instant buy 0.1 @Si at 81011 sl: 80960 tp: 81060 (81010 / 81011 / 81010) 2022.07.03 11:16:39.380 2022.01.03 07:00:00 ディール #2 buy 0.1 @Si at 81011 done (based on order #2) 2022.07.03 11:16:39.380 2022.01.03 07:00:00 ディール実行 [#2 buy 0.1 @Si at 81011] 2022.07.03 11:16:39.380 2022.01.03 07:00:00 オーダー実行 buy 0.1 at 81011 [#2 buy 0.1 @Si at 81011].しかし、StopLoss と TakeProfit が正しく動作する別のコンピュータ(ラップトップ)では、メッセージは次のようになります:2022.07.03 11:23:18.383 2022.01.03 07:00:12 instant buy 0.1 @Si at 81047 sl: 80996 tp: 81096 (81046 / 81047 / 81046) 2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal #2 buy 0.1 @Si at 81047 done (based on order #2) 2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal performed [#2 buy 0.1 @Si at 81047] 2022.07.03 11:23:18.383 2022.01.03 07:00:12 注文約定 買い 0.1 at 81047 [#2 buy 0.1 @Si at 81047] 2022.07.03 11:23:18.514 2022.01.03 07:00:12 - ポジションオープン: 2022.01.03 07:00:12.490 - 2022.07.03 11:23:18.514 2022.01.03 07:00:12 @Si Open 0.10 Buy #2 [0.10 成行注文 Buy #2] at 81047, sl 80996, tp 81096, magik 123確かに、あと2行...物事を少し単純化するために、私はこのシンプルなコードでExpert Advisorを書いた:ポイントは、「Z」キーを押すと(というか離すと)「買い」が開き、「A」キーを押すと「売り」が開くということ。テスターで動かしてみた。結果は同じで、デスクトップPCではStopLossとTakeProfitは機能しないが、ノートPCでは機能する。また、この記事の最後にリンクされているコードをPCとラップトップの両方でテスターで実行してみましたが、同じことが起こりました-PCでは動作しませんが、ラップトップでは動作します。つまり、テスターにslとtpのトリガーを可能にする何らかの設定があるか(それは私にはわからない)、テスター自体の動作が正しくないか......という結論になる。 テスターのスプレッドを教えてください。 MQL_User 2022.07.03 19:27 #29 テスターでのスプレッドは1.PCでもラップトップでも。シンボル@Si。 何か影響があるのでしょうか? スリッページ(滑り)が何かしら影響しているのではと思い、変えてみました。でもうまくいかない。 Artyom Trishkin 2022.07.03 23:41 #30 MQL_User #:テスターでのスプレッドは1.PCでもラップトップでも。記号 @Si.これは何か効果があるのでしょうか?スリッページ(滑り)が何かしら影響しているのかと思い、変えてみました。でもうまくいかない。 あるケースでは、価格がストップ・レベルに達しない。 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ティックが受信され、そのティックに未決注文が 設定され、同時に有効化(トリガー)された場合(買い逆指値でテストしました)、エンジンはすべてのイベントを登録しません...
TRADE_EVENT_PENDING_ORDER_PLASEDイベントは受信されますが、TRADE_EVENT_PENDING_ORDER_ACTIVATEDは受信されません。
私のコードは次のようなものです:
まず、古い(処理された)イベントのインデックスをループ内で見つけ、それを起点として、新しいイベントを最後までループします。つまり、1ティックで指値注文が設定され、striggerenが設定に関するイベントを1つ受信するような状況で...コメントをお願いします。
engine.OnTick(rates_data)の後のOnTick()でProcessTradeEvents()を呼んでいます。注文はあなたのエンジンによって出されました。もしかしたら、まだ有効化されていないのに呼んでいたのかもしれません・・・。手動注文で確認してみます。
注文は自分のエンジンで行った。もしかしたら、まだアクティベーションが行われていないのに、まだ呼んでしまったのかもしれない......。今マニュアルオーダーで確認してみます。
そうですね、手が曲がっているんだと思います...。
ああ、手が曲がっている気がする...。
こんにちは。
TestDoEasyPart08.mq5をテスト中にこの問題に遭遇しました - StopLossとTakeProfitが機能しません。StopLossとTakeProfitは設定されていますが、対応するラインがチャートに表示され、ジャーナルへのメッセージも表示されます。TrailStopをオンにすると、TakeProfitはトリガーされますが、StopLossはまだトリガーされません。何が原因でしょうか?
追伸:同じコードを別のコンピュータ(ラップトップ)で実行したところ、問題なく動作しました。同じメタトレーダーがインストールされていますが。
こんにちは。
TestDoEasyPart08.mq5をテスト中にこの問題に遭遇しました - StopLossとTakeProfitが機能しません。StopLossとTakeProfitは設定されていますが、対応するラインがチャートに表示され、ジャーナルへのメッセージも表示されます。TrailStopをオンにすると、TakeProfitはトリガーされますが、StopLossはまだトリガーされません。何が原因でしょうか?
追伸:同じコードを別のコンピュータ(ラップトップ)で実行したところ、問題なく動作しました。同じメタトレーダーがインストールされていますが。
こんばんは!まず、ログに表示されるメッセージだけでも表示してください。
よろしく、ウラジミール。
こんにちは。
TestDoEasyPart08.mq5をテスト中にこの問題に遭遇しました - StopLossとTakeProfitが機能しません。StopLossとTakeProfitは設定されていますが、対応するラインがチャートに表示され、ジャーナルへのメッセージも表示されます。TrailStopをオンにすると、TakeProfitはトリガーされますが、StopLossはまだトリガーされません。何が原因でしょうか?
追伸:同じコードを別のコンピュータ(ラップトップ)で実行したところ、問題なく動作しました。同じメタトレーダーがインストールされていますが。
ストップ(指値)注文が発注された場合、そのトリガーはプログラムではなくブローカーに依存します。逆指値(リミット)注文の発注はプログラムからサーバーに送られ、そのトリガーはブローカーに依存します。逆指値注文は発注され(チャート上にラインが表示され)、プログラム側にエラーはありません。ほとんどの場合、価格はストップ(指値)注文に到達しません。
こんばんは、せめてログに残るメッセージを表示してください。
よろしく、ウラジミール。
MrBrooklin、Artem。
ストラテジー・テスターでやってみました(私の理解では、ブローカーは関係ありません)。
メッセージは以下の通りです:
2022.07.03 11:16:39.380 2022.01.03 07:00:00 instant buy 0.1 @Si at 81011 sl: 80960 tp: 81060 (81010 / 81011 / 81010)
2022.07.03 11:16:39.380 2022.01.03 07:00:00 ディール #2 buy 0.1 @Si at 81011 done (based on order #2)
2022.07.03 11:16:39.380 2022.01.03 07:00:00 取引成立 [#2 buy 0.1 @Si at 81011]
2022.07.03 11:16:39.380 2022.01.03 07:00:00 注文成立 0.1 @Si at 81011 [#2 buy 0.1 @Si at 81011] 取引成立。
しかし、StopLossとTakeProfitが正しく動作する別のコンピュータ(ラップトップ)では、メッセージは次のようになります:
2022.07.03 11:23:18.383 2022.01.03 07:00:12 instant buy 0.1 @Si at 81047 sl: 80996 tp: 81096 (81046 / 81047 / 81046)
2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal #2 buy 0.1 @Si at 81047 done (based on order #2)
2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal performed [#2 buy 0.1 @Si at 81047]
2022.07.03 11:23:18.383 2022.01.03 07:00:12 注文約定 買い 0.1 at 81047 [#2 buy 0.1 @Si at 81047]
2022.07.03 11:23:18.514 2022.01.03 07:00:12 - ポジションオープン: 2022.01.03 07.03 07:00:12.490 -
2022.07.03 11:23:18.514 2022.01.03 07:00:12 @Si Open 0.10 Buy #2 [0.10 成行注文 Buy #2] at 81047, sl 80996, tp 81096, magik 123
確かに、あと2行...。
物事を少し単純化するために、私はこの単純なコードでExpert Advisorを書きました:
要は、「Z」キーを押すと(というか離すと)「買い」が開き、「A」キーを押すと「売り」が開くというもの。
テスターで動かしてみた。結果は同じで、デスクトップPCではStopLossとTakeProfitは機能しませんが、ラップトップPCでは機能します。
また、この記事の最後にリンクされているコードをテスターでPCとラップトップで動かしてみましたが、同じことが起こりました-PCでは動きませんが、ラップトップでは動きます。
つまり、テスターにslとtpのトリガーを可能にする何らかの設定があるか(それは私にはわからない)、テスター自体が正しく動作していないかのどちらかだ。
Mr.ブルックリン、アルテム
私はストラテジーテスターで行いました(私の理解では、ブローカーは関係ありません)。
メッセージは以下の通りです:
2022.07.03 11:16:39.380 2022.01.03 07:00:00 Instant buy 0.1 @Si at 81011 sl: 80960 tp: 81060 (81010 / 81011 / 81010)
2022.07.03 11:16:39.380 2022.01.03 07:00:00 ディール #2 buy 0.1 @Si at 81011 done (based on order #2)
2022.07.03 11:16:39.380 2022.01.03 07:00:00 ディール実行 [#2 buy 0.1 @Si at 81011]
2022.07.03 11:16:39.380 2022.01.03 07:00:00 オーダー実行 buy 0.1 at 81011 [#2 buy 0.1 @Si at 81011].
しかし、StopLoss と TakeProfit が正しく動作する別のコンピュータ(ラップトップ)では、メッセージは次のようになります:
2022.07.03 11:23:18.383 2022.01.03 07:00:12 instant buy 0.1 @Si at 81047 sl: 80996 tp: 81096 (81046 / 81047 / 81046)
2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal #2 buy 0.1 @Si at 81047 done (based on order #2)
2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal performed [#2 buy 0.1 @Si at 81047]
2022.07.03 11:23:18.383 2022.01.03 07:00:12 注文約定 買い 0.1 at 81047 [#2 buy 0.1 @Si at 81047]
2022.07.03 11:23:18.514 2022.01.03 07:00:12 - ポジションオープン: 2022.01.03 07:00:12.490 -
2022.07.03 11:23:18.514 2022.01.03 07:00:12 @Si Open 0.10 Buy #2 [0.10 成行注文 Buy #2] at 81047, sl 80996, tp 81096, magik 123
確かに、あと2行...
物事を少し単純化するために、私はこのシンプルなコードでExpert Advisorを書いた:
ポイントは、「Z」キーを押すと(というか離すと)「買い」が開き、「A」キーを押すと「売り」が開くということ。
テスターで動かしてみた。結果は同じで、デスクトップPCではStopLossとTakeProfitは機能しないが、ノートPCでは機能する。
また、この記事の最後にリンクされているコードをPCとラップトップの両方でテスターで実行してみましたが、同じことが起こりました-PCでは動作しませんが、ラップトップでは動作します。
つまり、テスターにslとtpのトリガーを可能にする何らかの設定があるか(それは私にはわからない)、テスター自体の動作が正しくないか......という結論になる。
テスターでのスプレッドは1.PCでもラップトップでも。シンボル@Si。
何か影響があるのでしょうか?
スリッページ(滑り)が何かしら影響しているのではと思い、変えてみました。でもうまくいかない。
テスターでのスプレッドは1.PCでもラップトップでも。記号 @Si.
これは何か効果があるのでしょうか?
スリッページ(滑り)が何かしら影響しているのかと思い、変えてみました。でもうまくいかない。
あるケースでは、価格がストップ・レベルに達しない。