MetaTrader 5 プラットフォームビルド2005: 経済指標カレンダー、サービスとしてのMQL5アプリとR言語API

MetaTrader 5の何が新しくなったのか

21 2月 2019

ターミナル

  1. 内蔵の経済指標カレンダーを完全に更新しました。
    経済指標カレンダーは当社独自の祖ルーションです。ここには、米国、欧州連合、日本、英国、カナダ、オーストラリア、中国などの13の世界経済リーダーに関する金融ニュースと指標があります。データは、公開情報からリアルタイムに収集されます。

    新バージョンでは、時間、優先度、通貨、国ごとに、最新のコンテンツと高度なイベントフィルタが追加されています。
    カレンダーデータはMQL5プログラムからアクセスできるようになりました。詳細は以下でご覧ください。




  2. MQL5アプリケーションの新タイプとして「サービス」が追加されました。この新しいタイプによってターミナルのためのカスタム価格フィードの作成が可能になります。つまり、ブローカーの取引サーバ上で実施されるのと同様に、外部システムからの価格をリアルタイムで実装できるようになります。

    エキスパートアドバイザー、指標、スクリプトとは異なり、サービスは特定のチャートにリンクされていません。このようなアプリケーションはバックグラウンドで実行され、ターミナルの起動時に自動的に起動されます(アプリケーションが強制的に停止された場合を除く)。

    サービスは、ナビゲータウィンドウ内の新しいセクションから管理できます。





    サービスを作成する方法
    サービステンプレートを作成するには、対応するMQL5ウィザードオプションを使用します。スクリプト同様、サービスにはOnstartエントリポイントが1つあります。この時点で、ネットワーク機能を使用して、無限のデータ受信および処理サイクルを実装できます。

    サービスをリリースする方法
    異なるパラメータで複数のエキスパートアドバイザーまたは指標のコピーを実行するには、それらを異なるチャートで起動する必要があります。この場合、異なるプログラムインスタンスが作成され、独立して動作します。サービスはチャートにリンクされていないため、サービスインスタンスを作成するための特別なメカニズムが実装されています。

    ナビゲータからサービスを選択して、そのコンテキストメニューの[サービスの追加]をクリックします。これにより標準のMQL5プログラムダイアログが開き、取引やシグナルへのアクセスを有効/無効にしたり、パラメータを設定したりできます。




    サービスインスタンスは適切なインスタンスメニューを使用して起動および停止できます。すべてのインスタンスを管理するには、サービスメニューを使用します。

  3. 学習プログラムが実装されました。

    新しい機能によって、初心者はプラットフォームを操作する方法を簡単に学ぶことができるようになりました。プラットフォームの主な機能に関する100以上のインタラクティブなヒントを追加しました。

    • ヒントはツールバー上の進行状況バーとしてシームレスに表示されるため、ユーザーの注意をそらすことはありません。
    • ヒントは、プラットフォームでこれまでに実行したことがない操作に対してのみ表示されます。
    • すべてのヒントにはインタラクティブリンクが含まれており、これによって関連するインターフェース要素に移動できます。例えば、取引ダイアログまたは所望のプログラムを含むメニューを先端から直接開くことができます。

    プログレスバーの塗りつぶされた領域は、適切な行動をとってトレーニングを続けるたびに大きくなります。




  4. 取引口座履歴をポジションとして表示できます。プラットフォームは、ポジションに関連する取引(始値、数量の増加、部分的または全額の決算)に関するデータを収集し、その情報を単一のレコードにグループ化します。したがって、ポジションの詳細(開閉時刻、ボリューム、価格、結果)にアクセスすることができます。この効率的なプレゼンテーション形式は、ファイルにエクスポートされた履歴レポートで利用可能になりました




  5. R言語を使用するアプリケーションを介したMetaTrader 5ターミナルデータの要求を可能にする新しいAPIを追加しました。

    特別なMetaTraderパッケージを用意しました。RとMetaTrader 5ターミナルとの間のやり取りのためのDLL、ドキュメント、補助的なRファイルが含まれています。CRANリポジトリへのパッケージ登録が完了し、その後、ダウンロードとインストールが可能になります。




    パッケージは特別なコマンドを使ってインストールすることができます。
    R CMD INSTALL --build MetaTrader

    以下のデータ要求に関連するコマンドが利用可能になりました。

    • MT5InitializeはMetaTrader 5ターミナルとの接続を初期化して確立します。ターミナルは必要に応じてコマンド実行中に起動されます。
    • MT5Shutdownは初期化を解除してMetaTrader 5から切断します。
    • MT5VersionはMetaTrader 5ターミナルバージョンを入手します。
    • MT5TerminalInfoは、ターミナルのブローカーのサーバーへの接続状態とパラメータ(アカウント番号とサーバーアドレス)を取得します。
    • MT5WaitTerminalはMetaTrader 5ターミナルがブローカーのサーバーに接続するまで待ちます。
    • MT5CopyTicksFrom(symbol, from, count, flags)は、指定された日付から開始して、指定された数のティックをコピーします。日付は1970.01.01からのミリ秒単位で指定されます。
    • MT5CopyTicksRange(symbol, from, to, flags)は、指定された期間内からティックをコピーします。日付は1970.01.01からのミリ秒単位で指定されます。
    • MT5CopyRatesFromPos(symbol, from, to, flagsは、最後のバーを基準にして指定された位置から分足バーをコピーします。日付は1970.01.01からのミリ秒単位で指定されます。
    • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count)は、最後のバーを基準にして指定された位置から分足バーをコピーします。
    • MT5CopyRatesFromRange(symbol, timeframe, date_from, date_to)は、指定された期間内からバーをコピーします。日付は1970.01.01からのミリ秒単位で指定されます。

    サポートされるコマンドのリストはさらに拡張されます。

  6. ポジションを反対のポジションによって決済するためのClose Byダイアログを最適化しました。多数のポジションがあってもダイアログは遅くならなくなりました。
  7. 合成銘柄の計算エラーとそれによって生じるデータの省略を修正しました。
  8. カスタム銘柄が削除されると、ティックとバー履歴を格納するファイルも削除されるようになりました。これにより、ハードディスクに未使用のデータが蓄積されるのを防ぎます。
  9. High DPI画面での検索結果の表示を修正しました。

MQL5

  1. MQL5プログラムからの経済指標カレンダーへのアクセスを実装しました。

    新機能

    CalendarCountryById — 国の説明をIDによって取得します。
    bool CalendarCountryById(
       const long           country_id,    // 国ID
       MqlCalendarCountry&  country        // 国の説明
       );
    CalendarEventById — イベントの説明をIDによって取得します。
    bool CalendarEventById(
       const long           event_id,      // イベントID
       MqlCalendarEvent&    event          // イベントの説明
       );
    CalendarValueById — イベント値の説明をIDによって取得します。
    bool CalendarValueById(
       const long           value_id,      // 値ID
       MqlCalendarValue&    value          // 値の説明
       );
    CalendarEventByCountry — 国の利用できるイベントの配列を取得します。
    bool CalendarEventByCountry(
       string               country_code,  // 国コード
       MqlCalendarEvent&    events[]       // イベント配列
       );
    CalendarEventByCurrency — 影響された通貨の利用できるイベントの配列を取得します。
    bool CalendarEventByCurrency(
       string               currency,      // 通貨
       MqlCalendarEvent&    events[]       // イベント配列
       );
    CalendarValueHistoryByEvent — イベントIDによって指定された期間の値の配列を取得します。
    bool CalendarValueHistoryByEvent(
       ulong                event_id,      // イベントID
       MqlCalendarValue&    values[],      // 値の配列
       datetime             datetime_from, // 期間開始日
       datetime             datetime_to=0  // 期間終了日
       );
    CalendarValueHistory — 国および/または通貨によって絞り込まれた、指定された期間の値の配列を取得します。
    bool CalendarValueHistory(
       MqlCalendarValue&    values[],          // 値の配列
       datetime             datetime_from,     // 期間の開始日
       datetime             datetime_to=0,     // 期間の終了日
       string               country_code=NULL, // 国コード
       string               currency=NULL      // 通貨
       );
    CalendarValueLastByEvent — 最後のイベントの値をIDによって取得します。この関数は前回のリクエスト以降に現れた値のリクエストを可能にします。この操作には、入出力パラメータ「change_id」が追加で使用されます。

    カレンダデータベースが変更されるたびに、「change_id」プロパティ(最後の変更識別子)が更新されます。データのリクエスト中に「change_id」を指定すると、端末はそれ以降に発生したイベントと、次のリクエストに使用できる現在の「change_id」値を返します。最初の関数呼び出しでゼロ「change_id」を指定します。関数はイベントを返しませんが、それ以降の要求では現在の「change_id」を返します。
    bool CalendarValueHistory(
       ulong                event_id,          // イベントID
       ulong&               change_id,         // 最後のカレンダー変更ID
       MqlCalendarValue&    values[]           // 値の配列
       );
    CalendarValueLast — 国および/または通貨によって絞り込まれた、すべてのイベントの最後の値の配列を取得します。この関数は前回のリクエスト以降に現れた値のリクエストを可能にします。CalendarValueLastByEvent同様、「change_id」プロパティはリクエストに使用されます。
    bool CalendarValueHistory(
       ulong                event_id,          // イベントID
       ulong&               change_id,         // 最後のカレンダー変更ID
       MqlCalendarValue&    values[],          // 値の配列
       string               country_code=NULL, // 国コード
       string currency=NULL                    // 通貨
       );

    新しい構造体

    MqlCalendarCountry — 国の説明
    struct MqlCalendarCountry
      {
       ulong             id;                        // ISO 3166-1での国ID
       string            name;                      // 国名の文字列
       string            code;                      // ISO 3166-1 alpha-2での国ID
       string            currency;                  // 国の通貨コード
       string            currency_symbol;           // 国の通貨の記号/サイン
       string            url_name;                  // mql5.comのURLで使用される国名
      };
    MqlCalendarEvent — イベントの説明
    struct MqlCalendarEvent
      {
       ulong                          id;           // イベントID
       ENUM_CALENDAR_EVENT_TYPE       type;         // イベントタイプ
       ENUM_CALENDAR_EVENT_SECTOR     sector;       // イベントが所属するセクター
       ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // イベント発表頻度
       ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // イベント発表タイムモード
       ulong                          country_id;   // 国ID
       ENUM_CALENDAR_EVENT_UNIT       unit;         // イベント値の単位
       ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // イベント重要度
       ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // イベント重要度乗数
       uint                           digits;       // イベント値の小数点以下桁数
       string                         source_url;   // ソースURL
       string                         event_code;   // イベントコード
       string                         name;         // 端末限度でのイベント名の文字列
      };
    MqlCalendarValue — イベント値の説明
    struct MqlCalendarValue
      {
       ulong             id;                        // 値ID
       ulong             event_id;                  // イベントID
       datetime          time;                      // イベント日時
       datetime          period;                    // イベント発表期間
       int               revision;                  // 発表期間に関係する発表指標
       long              actual_value;              // 現在のイベント値
       long              prev_value;                // 前のイベント値
       long              revised_prev_value;        // 改正された前のイベント値
       long              forecast_value;            // イベント予想値
       ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // 通貨への潜在的な影響
      };

    新しい列挙型

    enum ENUM_CALENDAR_EVENT_FREQUENCY
      {
       CALENDAR_FREQUENCY_NONE            =0,   // 未使用
       CALENDAR_FREQUENCY_WEEK            =1,   // 週
       CALENDAR_FREQUENCY_MONTH           =2,   // 月
       CALENDAR_FREQUENCY_QUARTER         =3,   // 四半期
       CALENDAR_FREQUENCY_YEAR            =4,   // 年
       CALENDAR_FREQUENCY_DAY             =5,   // 日
      };
    
    enum ENUM_CALENDAR_EVENT_TYPE
      {
       CALENDAR_TYPE_EVENT                =0,   // イベント(会合、演説など)
       CALENDAR_TYPE_INDICATOR            =1,   // 指標
       CALENDAR_TYPE_HOLIDAY              =2,   // 祝日
      };
    
    enum ENUM_CALENDAR_EVENT_SECTOR
      {
       CALENDAR_SECTOR_NONE               =0,   // なし
       CALENDAR_SECTOR_MARKET             =1,   // 市場
       CALENDAR_SECTOR_GDP                =2,   // GDP
       CALENDAR_SECTOR_JOBS               =3,   // 職
       CALENDAR_SECTOR_PRICES             =4,   // 価格
       CALENDAR_SECTOR_MONEY              =5,   // 金
       CALENDAR_SECTOR_TRADE              =6,   // 取引
       CALENDAR_SECTOR_GOVERNMENT         =7,   // 政府
       CALENDAR_SECTOR_BUSINESS           =8,   // ビジネス
       CALENDAR_SECTOR_CONSUMER           =9,   // 消費者
       CALENDAR_SECTOR_HOUSING            =10,  // 家
       CALENDAR_SECTOR_TAXES              =11,  // 税
       CALENDAR_SECTOR_HOLIDAYS           =12,  // 祝日
      };
      
    enum ENUM_CALENDAR_EVENT_IMPORTANCE
      {
       CALENDAR_IMPORTANCE_NONE           =0,   // なし
       CALENDAR_IMPORTANCE_LOW            =1,   // 低
       CALENDAR_IMPORTANCE_MODERATE       =2,   // 中
       CALENDAR_IMPORTANCE_HIGH           =3,   // 高
      };
    
    enum ENUM_CALENDAR_EVENT_UNIT
      {
       CALENDAR_UNIT_NONE                 =0,   // なし
       CALENDAR_UNIT_PERCENT              =1,   // 割合
       CALENDAR_UNIT_CURRENCY             =2,   // 国の通貨
       CALENDAR_UNIT_HOUR                 =3,   // 時間数
       CALENDAR_UNIT_JOB                  =4,   // 職の数
       CALENDAR_UNIT_RIG                  =5,   // リグの数
       CALENDAR_UNIT_USD                  =6,   // 米ドル
       CALENDAR_UNIT_PEOPLE               =7,   // 人数
       CALENDAR_UNIT_MORTGAGE             =8,   // 住宅ローン数
       CALENDAR_UNIT_VOTE                 =9,   // 投票数
       CALENDAR_UNIT_BARREL               =10,  // バレル数
       CALENDAR_UNIT_CUBICFEET            =11,  // 立方フィート
       CALENDAR_UNIT_POSITION             =12,  // 就職口の数
       CALENDAR_UNIT_BUILDING             =13   // 建物の数
      };
      
    enum ENUM_CALENDAR_EVENT_MULTIPLIER
      {
       CALENDAR_MULTIPLIER_NONE           =0,   // なし
       CALENDAR_MULTIPLIER_THOUSANDS      =1,   // 千
       CALENDAR_MULTIPLIER_MILLIONS       =2,   // 百万
       CALENDAR_MULTIPLIER_BILLIONS       =3,   // 十億
       CALENDAR_MULTIPLIER_TRILLIONS      =4,   // 一兆
      };
      
    enum ENUM_CALENDAR_EVENT_IMPACRT
      {
       CALENDAR_IMPACT_NA                 =0,   // 使用不可
       CALENDAR_IMPACT_POSITIVE           =1,   // プラス
       CALENDAR_IMPACT_NEGATIVE           =2,   // マイナス
      };
    
    enum ENUM_CALENDAR_EVENT_TIMEMODE
      {
       CALENDAR_TIMEMODE_DATETIME         =0,   // ソースが正確な時刻を発表
       CALENDAR_TIMEMODE_DATE             =1,   // 終日イベント
       CALENDAR_TIMEMODE_NOTIME           =2,   // ソースが正確な時刻を発表しない
       CALENDAR_TIMEMODE_TENTATIVE        =3,   // ソースは日付のみを提供するが、正確な時刻を事前に公開していないため、イベントが発生したときに正確な時刻が追加される
      };

    新しいエラーコード

    ERR_CALENDAR_MORE_DATA             =5400,   // 結果全体として配列が小さい(配列に収まる値が渡された)
    ERR_CALENDAR_TIMEOUT               =5401,   // カレンダデータ要求への応答を待っている間にタイムアウトした
    ERR_CALENDAR_NO_DATA               =5402,   // データが見つからない

  2. ティックとバーの履歴に関する修正と操作速度の向上。
  3. カスタム取引銘柄のティックおよびバー履歴修正関数であるCustomTicks*および CustomRates *の修正と大幅な操作速度の向上。
  4. 新しいデータ変換関数。

    CharArrayToStructはuchar配列をPOD構造体にコピーします。
    bool  CharArrayToStruct(
       void&         struct_object,    // 構造体
       const uchar&  char_array[],     // 配列
       uint          start_pos=0       // 配列での開始位置
       );
    StructToCharArrayはPOD構造体をuchar配列にコピーします。
    bool  StructToCharArray(
       const void&  struct_object,     // 構造体
       uchar&       char_array[],      // 配列
       uint         start_pos=0        // 配列での開始位置
       );

  5. ushort、uint、ulong値のバイト位置を変更するMathSwap関数を追加しました。
    ushort MathSwap(ushort value);
    uint   MathSwap(uint   value);
    ulong  MathSwap(ulong  value);

  6. システムソケットを介してリモートホストへのTCP接続を作成するネットワーク関数を追加しました。

    • SocketCreate指定されたフラグを持つソケットを作成してハンドルを返します
    • SocketCloseはソケットを閉じます
    • SocketConnectはサーバーに接続し、タイムアウト管理を備えます
    • SocketIsConnectedはソケットが現在接続されているかどうかを確認します
    • SocketIsReadableソケットから読み込むことができるバイト数を取得します
    • SocketIsWritableこのソケットへのデータの書き込みが現在可能かどうかを確認します
    • SocketTimeoutsシステムソケットオブジェクトのデータ送受信タイムアウトを設定します。
    • SocketReadはソケットからデータを読み込みます
    • SocketSendはソケットにデータを書き込みます
    • SocketTlsHandshakeTLS Handshakeプロトコルを使用して、指定されたホストとの安全なTLS(SSL)接続を開始します
    • SocketTlsCertificate安全なネットワーク接続に使用される証明書に関する情報を受信します
    • SocketTlsRead安全なTLS接続からデータを読み込みます
    • SocketTlsReadAvailable安全なTLS接続から利用可能なすべてのデータを読み取ります
    • SocketTlsSend安全なTLS接続を使用してデータを送信します

    ネットワーク機能を使用した接続が確立されているホストのアドレスは、ターミナル設定の[list of allowed addresses](許可済みのアドレスリスト)に明示的に追加する必要があります。

    ネットワーク関数に新しいエラーコードが追加されました。

    • ERR_NETSOCKET_INVALIDHANDLE (5270): 無効なソケットハンドルが関数に渡されました
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271): 開いているソケットが多すぎます(最大128)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272): リモートホストへの接続中にエラーが発生しました
    • ERR_NETSOCKET_IO_ERROR (5273): ソケットとのデータ送受信中にエラーが発生しました
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274): セキュア接続確立エラー(TLS Handshake)
    • ERR_NETSOCKET_NO_CERTIFICATE (5275) — 安全な接続に使用される証明書に関するデータがない

  7. 新しい文字列操作関数を追加しました。

    StringReserve指定されたサイズのメモリバッファを文字列用に予約します。
    bool  StringReserve(
       string&        string_var,          // 文字列
       uint           new_capacity         // 文字列バッファサイズ
       );
    StringSetLengthは指定した文字列の長さを文字数で設定します。
    bool  StringSetLength(
       string&        string_var,          // 文字列
       uint           new_length           // 新しい文字列の長さ
       );

  8. 新しい配列操作関数を追加しました。

    ArrayRemove指定されたインデックスから始まる指定された数の要素を配列から削除します。
    bool  ArrayRemove(
       void&         array[],              // 任意の型の配列
       uint          start,                // 削除開始インデックス
       uint          count=WHOLE_ARRAY     // 要素数
       );
    ArrayInsertは、指定されたインデックスから開始して、ソース配列から指定された数の要素をターゲット配列に挿入します。
    bool  ArrayInsert(
       void&         dst_array[],          // ターゲット配列
       const void&   src_array[],          // ソース配列
       uint          dst_start,            // ターゲット配列で挿入を始めるインデックス
       uint          src_start=0,          // ソース配列でコピーを始めるインデックス
       uint          count=WHOLE_ARRAY     // 挿入された要素の数
       );
    ArrayReverseは指定されたインデックスで始まる指定された数の要素を配列内で反転します。
    bool  ArrayReverse(
       void&         array[],              // 任意の型の配列
       uint          start=0,              // 反転開始インデック
       uint          count=WHOLE_ARRAY     // 要素数
       );

  9. CustomRatesUpdateCustomRatesReplaceCustomTicksAddCustomTicksReplace関数に新しい"uint count"パラメータが追加されましたs。これによって、これらの関数に使用されるために渡される配列の要素数を指定できます。デフォルト値はWHOLE_ARRAYです。この場合配列全体が使用されます。
  10. カスタム銘柄のいた情報ステータスを渡すCustomBookAdd関数を追加しました。この関数を使用すると、あたかも価格がブローカーのサーバーから到着したかのようにいた情報をブロードキャストできます。
    int  CustomBookAdd(
       const string        symbol,            // 銘柄名
       const MqlBookInfo&  books[]            // DOM要素説明付きの配列
       uint                count=WHOLE_ARRAY  // 使用される要素の数
       );
  11. CustomSymbolCreate関数のオーバーロードを追加しました。これにより、既存の取引シンボルに基づいてカスタム取引シンボルを作成することができます。作成後、任意の銘柄プロパティは対応する関数を使用して編集できます。
    bool  CustomSymbolCreate(
       const string        symbol_name,       // カスタム銘柄名
       const string        symbol_path="",    // 銘柄が作成されるグループの名前
       const string        symbol_origin=NULL // カスタム銘柄作成の基盤となる銘柄の名前
       );
    作成されたカスタム銘柄のプロパティのコピー元となる銘柄の名前は、"symbol_origin"パラメータで指定されます。

  12. 日付/時刻付きの文字列を日時値に変換するStringToTime関数が更新されました。以下のデータ形式がサポートされます。

    • yyyy.mm.dd [hh:mi]
    • yyyy.mm.dd [hh:mi:ss]
    • yyyymmdd [hh:mi:ss]
    • yyyymmdd [hhmiss]
    • yyyy/mm/dd [hh:mi:ss]
    • yyyy-mm-dd [hh:mi:ss]

  13. ENUM_TERMINAL_INFO_INTEGER列挙型にターミナルがMetaTrader仮想ホストサーバー(MetaTrader VPS)上で実行されていることを示す新しいTERMINAL_VPSプロパティが追加されました。アプリケーションがホストサーバー上で実行されている場合、仮想サーバーにはグラフィカルユーザーインターフェイスがないため、すべての視覚機能を無効にします。
  14. ENUM_SYMBOL_INFO_INTEGER列挙型に、対応する名前の銘柄が存在することを意味する新しいSYMBOL_EXISTプロパティが追加されました。
  15. テンプレート関数の事前宣言を使用しているときのタイピングを修正しました。
  16. 取引口座を偏国するときの指標の最初期化を追加しました。
  17. StringSplit関数を最適化しました。
  18. 標準ライブラリ操作のエラーを修正しました。

テスター

  1. テストエージェントのエキスパートアドバイザーで早期シャットダウンをルーチン化するTesterStop関数を追加しました。指定された数の負け取引数や事前設定されたドローダウンレベルなどのの基準に達したときに、テストを強制的に停止できるようになりました。

    この関数を使用して完了したテストは成功したと見なされます。関数呼び出しの後、テスト中に取得された取引履歴とすべての取引統計がターミナルに渡されます。
  2. 「真のティック」モードでMQL5クラウドネットワークを介してエキスパートアドバイザーをテストおよび最適化する機能を無効にしました。このモードは、ローカルエージェントとローカルネットワークファームでのみ使用できます。
  3. ビジュアルテスト中の指標の処理を改善しました。視覚化速度が最大であっても、価格チャートと指標のラインが同期して描画されるようになりました。
  4. 最適化されたテストと最適化が大幅に加速されました。
  5. 履歴データ上の指標のデバッグを修正しました。OnInitとOnDeinitの指標関数は正しくデバッグされるようになりました。
  6. 複数通貨のエキスパートアドバイザーをテストする際の履歴データへのアクセスの高速化。
  7. 履歴データのデバッグ中にビジュアルテスターが時々フリーズするのを修正しました。
  8. エージェントによってタスクパッケージを処理するときに、最適化がより早く開始します。
  9. タスクパッケージをテストエージェントに配布するポリシーを変更しました。パッケージサイズが大きくなり、ネットワーク運用におけるリソース消費が大幅に削減されました。
  10. ローカルエージェント、ネットワークエージェント、クラウドエージェントの使用を可能にするオプションの動作を変更しました。オプションをオフにすると、エージェントは受信したタスクの処理を完了するが新しいタスクは割り当てられないようになりました。以前のバージョンでは、この動作は "Disable"コマンドと似ていて、エージェントの動作はすぐに停止されていました。




MetaEditor

  1. デバッガでの非ANSI文字のサポートを追加しました。変数名がキリル文字で指定されていても、式は正しく表示されるようになりました。
  2. High DPI画面での検索結果の表示を修正しました。

ユーザインターフェイスがクロアチア語でも利用できるようになりました。

ドキュメントが更新されました。