ライブラリ: エキスパート - ページ 13 1...678910111213 新しいコメント hini 2025.06.14 17:15 #121 fxsaber #:問題がある場合は、再生用のmq5ファイルをご用意ください。#define MT4ORDERS_LIBRARY #include "../../utils/MT4Orders.mqh" // #define REPORT_BROWSER // ブラウザ起動時にレポートを作成 - DLLの許可が必要です。 #define TESTER_CUSTOM // ユーザーテスターでのエキスパートアドバイザーの実行 #include "../../utils/fxsaber/Tester/Tester.mqh" //https://www.mql5.com/ja/code/24848 #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define KEY_B 66 #define KEY_S 83 #define KEY_C 67 input int In1 = 1; input group "label1" input double In2 = 2.0; // void OnChartEvent( const int id, const long &lparam, const double &dparam, const string &sparam ) { if (id == CHARTEVENT_KEYDOWN) { switch ((int)lparam) { case KEY_B: // 購入する OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0); break; case KEY_S: // 販売 OrderSend(_Symbol, OP_SELL, 1, Bid, 100, 0, 0); break; case KEY_C: // 閉じる for (int i = OrdersTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS) && (OrderType() <= OP_SELL)) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100); } } } void OnTick() { //Print(_Symbol, " ", SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE)); } void OnTimer() { /* Comment(REPORT::OrdersToString(_Symbol, 0, 5)); */. } int OnInit() { Print(_Symbol, " ", SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE)); Print(_Symbol, " In2 = ", In2); return(INIT_SUCCEEDED); } // void OnDeinit( const int ) {} // void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { } //+------------------------------------------------------------------+ サンプルコードはTesterライブラリのコードを使用しています。起動後、変数In2が2ではなく0になっている。つまり、グループ後にすべての入力パラメータを取得できない。 fxsaber 2025.06.17 07:43 #122 hini #:この状況は考慮されていないようだ。パラメータがグループの場合、特定の値はなく、得られる値はnullとなるため、グループ以降のパラメータは得られない。 次のコードは、すべてが正しく処理されていることを示している。 input int In1 = 1; input group "label1" input double In2 = 2.0; #include <fxsaber\Expert.mqh> //https://www.mql5.com/ja/code/19003 int GetAmountExperts() { int Res = 0; for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart)) Res += (ChartGetString(Chart, CHART_EXPERT_NAME) != ""); return(Res); } void OnInit() { if (GetAmountExperts() < 2) { MqlParam Params[]; string Names[]; const int Size = EXPERT::Parameters(0, Params, Names) - 1; ArrayPrint(Params); ArrayPrint(Names); for (uint i = Size; (bool)i--;) EXPERT::AddInputName(Params[i + 1], Names[i]); Params[Size].string_value = "7"; EXPERT::Run(ChartOpen(_Symbol, _Period), Params); } } 結果 [type] [integer_value] [double_value] [string_value] [0] 14 0 0.00 "Scripts\Test6.ex5" [1] 14 1 1.00 "1" [2] 14 0 0.00 null [3] 14 2 2.00 "2.0" "In1" null "In2" Expert.mqh Expert.mqh を通じて Expert Advisor が起動した。 hini 2025.06.17 14:36 #123 input bool InRun = true; input group "label1" input double In2 = 2.0; #include <fxsaberExpert.mqh> //https://www.mql5.com/ja/code/19003 int GetAmountExperts() { int Res = 0; for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart)) Res += (ChartGetString(Chart, CHART_EXPERT_NAME) != ""); return(Res); } void OnInit() { if (InRun) { MqlParam Params[]; string Names[]; const int Size = EXPERT::Parameters(0, Params, Names) - 1; ArrayPrint(Params); ArrayPrint(Names); int nameSize = ArraySize(Names); for (int i = nameSize-1; i >= 0; i--) { if (Names[i] == "InRun") Params[i+1].string_value = "false"; EXPERT::AddInputName(Params[i + 1], Names[i]); } ArrayPrint(Params); ArrayPrint(Names); //Params[Size].string_value = "7"; EXPERT::Run(ChartOpen(_Symbol, _Period), Params); return; } Print("In2 = ", In2); } GetAmountExperts関数が原因不明のまま長時間実行され、結果が得られません。コードを少し変更しました。In2パラメータに値7を代入すべきではありません(2ではなく0であることがわかります)。 fxsaber 2025.06.17 17:53 #124 hini #:コードを少し変更しました。 これは模範的なバグ報告です:簡潔なコードを実行したところ、すぐにバグが見つかりました。 修正しました。 hini 2025.06.18 01:38 #125 fxsaber #:これは模範的なバグ報告だ。簡潔なコードを実行したら、すぐにバグが見つかった。訂正しました。なるほど、問題が発生した場合は同じ形式で報告することにします。 1...678910111213 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
問題がある場合は、再生用のmq5ファイルをご用意ください。
この状況は考慮されていないようだ。パラメータがグループの場合、特定の値はなく、得られる値はnullとなるため、グループ以降のパラメータは得られない。
次のコードは、すべてが正しく処理されていることを示している。
結果
Expert.mqh Expert.mqh を通じて Expert Advisor が起動した。
GetAmountExperts関数が原因不明のまま長時間実行され、結果が得られません。コードを少し変更しました。In2パラメータに値7を代入すべきではありません(2ではなく0であることがわかります)。
コードを少し変更しました。
これは模範的なバグ報告です:簡潔なコードを実行したところ、すぐにバグが見つかりました。
修正しました。
これは模範的なバグ報告だ。簡潔なコードを実行したら、すぐにバグが見つかった。
訂正しました。