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

ウェブプラットフォーム、デスクトップ版、モバイル版の更新履歴

20 12月 2017
MetaTrader 5ビルド1730: MetaEditorでのプロジェクトと合成金融商品

古い端末バージョンのサポートの終了

旧バージョンのデスクトップおよびモバイル端末のサポートは、新しいプラットフォームバージョンのリリースによって終了します。

  • クライアント端末:730(2012年9月23日)以前のバージョン
  • iPhone用モバイル端末:1171(2015年11月11日)以前のバージョン
  • Android用モバイル端末:1334(2016年8月5日)以前のバージョン

サポートされていない端末のビルドは、新しいサーバーバージョンに接続することはできません。事前に端末を更新することを強くお勧めします。

MQL5ストレージ運用プロトコルの変更

新しい共有プロジェクトをサポートするため、MQL5ストレージの運用プロトコルを更新しました。したがって、プラットフォームの更新後にはストレージからすべてのデータのチェックアウトを実行してください。更新中にMQL5ストレージに保存されたデータが失われたり影響を受けたりすることはありません。
プラットフォームを新しいバージョンに更新する前に、Commit操作を実行してすべてのローカル変更をMQL5ストレージに送信することをお勧めします。

ターミナル

  1. 取引プラットフォームで合成金融商品(1つまたは複数の既存の商品に基づく銘柄)を作成することができるようになりました。クオーツの計算式を設定すると、プラットフォームは実時間で合成製品のティックと分足の履歴を作成します。


    仕組み

    • 合成製品を作成し、価格計算の数式を設定します。
    • 数式で使用される少なくとも1つの製品の価格が変更された場合、プラットフォームは1秒あたり10回の頻度でティックを計算します。
    • プラットフォームはまた、過去2ヶ月間の分足の履歴を、数式で使用される製品の分足に基づいて計算します。合成製品の生成されたティックに基づいて、新しいバー(現在およびそれ以降のもの)はすべて実時間で描画されます。

    例えば ドルインデックス(USDX)を示す製品の作成が可能です。それには下記の数式が使われます。

    50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

    注:元のドルインデックス式でUSDEURとUSDGBPのペアが使用されます。プラットフォームでは逆ペアのみが使用可能であるため、合成銘柄式は負のパワーと、ビッドの代わりにアスクが使用されます。

    プラットフォームは、ブローカーによって提供された他の6銘柄のクオーツに基づいて、新しい製品の価格を実時間で計算します。価格の変更は[気配値表示]ウィンドウとチャートで視覚化されます。




    新しいカスタム銘柄を作成し、その仕様を開き、式を入力します。




    便宜上、数式エディタには銘柄や関数の名前を入力するときに可能なオプションのリストが表示されます。
    合成製品が[気配値表示]に追加されると、そのティックと分足バーの計算が開始されます。また、合成価格計算に必要な銘柄は自動的に[気配値表示]に追加されます。計算開始のエントリ("Synthetic Symbol USDX: processing started")がプラットフォームの操作ログに追加されます。
    • 合成製品が[気配値表示]から取り除かれると、その計算は停止されます。
    • 合成銘柄価格の計算に現在使用されている銘柄は、[気配値表示]で非表示にすることはできません。

    クオーツの実時間計算
    計算に使用される銘柄の価格が100ミリ秒ごとに(すなわち毎秒10回)確認されます。それらのうちの少なくとも1つが変更されると、合成銘柄の価格が計算され、新しいティックが生成されます。計算は、3つのスレッドで並列に実行され、ビッド、アスク、及びラストの価格で実行されます。たとえば、計算式がEURUSD*GBPUSDの場合、合成銘柄の価格は次のように計算されます。
    • Bid = bid(EURUSD)*bid(GBPUSD)
    • Ask = ask(EURUSD)*ask(GBPUSD)
    • Last = last(EURUSD)*last(GBPUSD)

    変更の可用性は価格ごとに個別に確認されます。たとえば、元の製品のビッドのみが変更された場合、合成製品の適切な価格だけが計算されます。

    分足の履歴の作成
    プラットフォームは、ティックを実時間で収集するだけでなく、合成製品の分足の履歴も作成します。通常の製品と同様に、合成製品チャートを表示したりオブジェクトや指標を使用してテクニカル分析を行うことができます。

    [気配値表示]に合成製品が追加されると、プラットフォームは計算された分足の履歴が存在するかどうかを確認します。存在しなければ、過去60日間の履歴が作成され、これには約5万のバーが含まれます。プラットフォーム設定の[Max. bars in chart](チャートでのバーの最大数) パラメータに値が指定されている場合は、その値が適用されます。

    この期間の一部のバーが既に作成された場合、プラットフォームは新しいバーを追加生成します。ユーザがより古い期間のチャートを表示しようとする(スクロールしたり、MQL5プログラムからアクセスしたりする)と、より古い履歴が作成されます。
    合成製品の分足の履歴は、その数式で使用される製品の分足(ティックではない)に基づいて計算されます。たとえば、合成銘柄の分足の始値を計算するには、プラットフォームはその数式で使用されている銘柄の始値を使用します。高値、安値、終値も同じように計算されます。
    必要なバーがいずれの製品でも利用できない場合、プラットフォームは前のバーの終値を使用します。たとえば、EURUSD、USDJPY、GBPUSDの3つの製品が使用されるとします。12:00に対応するバーの計算でUSDJPYの必要なバーが利用できない場合、以下の価格が計算に使用されます。

    • 始値:EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • 高値:EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • 安値:EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • 終値:EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    数式で使用されているすべての製品での分足が使用できない場合、合成製品の分足は計算されません。

    新しい分足の描画
    合成製品の新しいバー(現在および次のもの)はすべて生成されたティックに基づいて作成されます。バーを構築するのに使われる価格は[Chart mode](チャートモード)パラメーター値に基づきます。



    銘柄式で可能な操作
    ブローカーが提供する既存銘柄の価格データといくつかのプロパティは、合成価格の計算に使用できます。下記を指定します。
    • Symbol name - 計算する合成価格に応じて、指定された製品のビッド、アスク、またはラストが使用されます。たとえば、EURUSD*GBPUSDが指定されている場合、ビッドはbid(EURUSD)*bid(GBPUSD)として計算され、アスクはask(EURUSD)*ask(GBPUSD)となります。
    • bid(symbol name) - 指定された銘柄のビッド価格は強制的に、合成銘柄のビッド価格の計算に使用されます。このオプションは、前のタイプ(価格タイプが指定されていない場合)に似ています。
    • ask(symbol name) - 指定された銘柄のアスク価格が合成銘柄のアスク価格の計算に使用されます。指定された製品のビッド価格がアスクの計算に使用されます。指定された銘柄のラスト価格が、ラストの計算に使用されます。ask(EURUSD)*GBPUSDが指定されている場合は次の計算が使用されます。
      • Вid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • last(symbol name) — 指定された銘柄のラスト価格は、合成楽器のすべての価格(ビッド、アスク、ラスト)の計算に使用されます。last(EURUSD)*GBPUSDが指定されている場合は次の計算が使用されます。
      • Вid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • volume(symbol name) — 指定された銘柄のティック数量が計算式で使用されます。ブローカーがこの銘柄の数量情報を提供していることを確認してください。
    • point(symbol name) — 指定された製品の最低価格の変更が計算に使用されます。
    • digits(symbol name) — 指定された銘柄価格の小数点以下の桁数が数式で使用されます。

    銘柄名が複雑(ハイフン、ドットなどを含む)な場合は、引用符で囲みます(例:"RTS-6.17")。
    加算(+)、減算( - )、乗算(*)、除算(/)、除算残差(%)の演算では、以下の算術演算を使用できます。例えば、EURUSD+GBPUSDは価格がEURUSD及びGBPUSDの価格の和として計算されていることを意味します。また、単項マイナス演算子を使用して符号を変更することもできます(例:-10*EURUSD)。
    算術演算の計算優先順位に気を付けてください。
    • 乗算、除算、および剰余の演算が最初に実行され、次に加減算が実行されます。
    • 演算は左から右に実行されます。数式で同じ優先順位を持つ複数の演算(たとえば、乗算と除算)が使用されている場合は、左の演算が最初に実行されます。
    • 演算の優先獣医は括弧( と )を使用して変更できます。括弧内の演算の優先順位が計算の中で最も高くなります。左から右の原則もそれらに適用されます。左の括弧内の演算が最初に計算されます。

    数式で定数を使うことができます。

    • 数値(整数と浮動小数点数)(例:EURUSD*2+GBPUSD*0.7)。
    • _Digits 及び _Point.銘柄プロパティ:仕様からカスタム銘柄の適切な特性を数式に追加します。_Digitsは、銘柄価格の小数点以下の桁数を意味します。 _Pointは銘柄価格の最小変化を意味します。

    MQL5でサポートされた数学関数はMathSrand、 MathRand及びMathIsValidNumberを除いてすべて使用することができます。 fabs()、 acos()、asin()など、すべての関数の短い名前のみが使用されます。

  2. 新しいオプションが導入され、実時間でカスタム製品のクオーツを追加できます。指定したカスタム銘柄のクオーツを提供するMQL5エキスパートアドバイザーを開発することが可能になりました。これにはCustomTicksAdd関数が使用されます。
    int  CustomTicksAdd(
       const string           symbol,       // Symbol name
       const MqlTick&         ticks[]       // カスタム銘柄に適用する必要があるティックデータを持つ配列
       );
    CustomTicksAdd関数は、これらのクオーツがブローカーサーバから受信されたかのように提供することができます。データはティックデータベースに直接書き込まれるのではなく、[気配値表示]ウィンドウに送られます。ターミナルは次に、ティックを[気配値表示]からデータベースに保存します。1つの呼び出しで大量のデータが渡されると、リソースを節約するために関数の動作が変わります。256ティック以上送信された場合、データは2つの部分に分割されます。大きな部分はチックデータベースに直接記録されます(CustomTicksReplace同様)。最後の128ティックからなる第2の部分は[気配値表示]に送られ、そこからデータベースに保存されます。

  3. [気配値表示]ウィンドウに、高値と安値が追加されました。これらの列はデフォルトで非表示になっていて、コンテキストメニューを使用して有効にすることができます。



    銘柄チャートがビッド価格(仕様設定ごとに)を使用して作成されている場合、この銘柄の高ビッドと低ビッド価格が表示されます。ラスト価格を使用して作成されている場合、この銘柄の高ラストおよび低ラスト価格が表示されます。

    [気配値表示]にラストに基づいてチャートが描かれた銘柄が少なくとも1つ含まれている場合、高値と引く値に加えてラスト列も自動的に有効になります。
  4. カスタム金融商品のティック履歴を編集することができるようになりました。[気配値表示]のコンテキストメニューで[Symbols](銘柄)をクリックし、カスタム銘柄を選択し、[ティック]タブで必要なデータ間隔を要求します。

    • 値を変更するには、ダブルタップします。
    • エントリはコンテキストメニューを使用して追加または削除します。
    • 一度に複数のバー/ティックを削除する場合は、ShiftキーまたはCtrl + Shiftキーを押しながらマウスで選択します。




    便宜上、変更されたエントリは以下のように強調表示されます。

    • 緑色の背景 - 変更されたエントリ
    • 灰色の背景 - 削除されたエントリ
    • 黄色の背景 - 追加されたエントリ

    変更を保存するには、ウィンドウの下部にある[変更を適用]をクリックします。

  5. ナビゲータツリーに予備口座の表示を追加しました。

    実口座を開設するためのブローカーへの依頼はデスクトップターミナルから送信することができます。このためには、連絡先の詳細を記載した簡単なリクエストフォームに記入します。その後、トレーダーのために特別な予備口座が作成されます。ブローカーはトレーダーに連絡して関係を公式化し、予備口座を実口座に振り替えます。




  6. [Quotes](クオーツ)ウィンドウに時間のミリ秒表示を追加しました。



  7. 新規アカウントをを開くダイアログで利用可能なサーバーをスキャンする速度が向上しました。
  8. Ray LeftおよびRay Rightオプションが有効になっているときのトレンドライングラフィックスオブジェクトの表示を修正しました。
  9. 大量(数十万)の内部電子メールを伴う操作を最適化しました。
  10. 多数(5万以上)の取引商品を伴うターミナル操作を最適化しました。
  11. 履歴編集後に実行されるカスタム金融商品のティック履歴の最適化を追加しました。

MetaEditor

  1. MetaEditorでフル機能のプロジェクトを利用できるようになりました。プログラム開発プロセスがより便利になりました。
    現在、メインMQ5プログラムファイルはプロジェクトとして表示されません。このプロジェクトは、プログラム設定、コンパイルパラメータ、および使用されているすべてのファイルに関する情報を格納する別個の "MQPROJ"ファイルです。メインプロジェクト設定は別のダイアログボックスからアクセスできるため、ソースコードで#propertyで指定する必要はありません。

    プロジェクト内の作業で便利なように、[ナビゲータ]で別のタブが用意されています。インクルード、リソース、ヘッダー、その他のファイルなどのすべてのファイルが、カテゴリに整理されています。すべてのファイルが自動的にプロジェクトナビゲータに追加されます。たとえば、新しくインクルードしたMQHファイルは、ナビゲータの[Dependencies](依存ファイル)セクションに自動的に表示されます。.

    新規プロジェクトのサポートは、更新されたMQL5ストレージオンラインリポジトリにも実装されています。MQL5.comコミュニティの他のメンバーとのコラボレーションを通じた大規模なプロジェクトの開発がはるかに便利になりました。

    グループプロジェクトには新しい共有プロジェクトセクションが用意されています。このセクションで作成されたプロジェクトはすぐにストレージに送信されるため、他のユーザーに権限を与えればすぐにコラボレーションを開始できます。




    共有プロジェクトでプロジェクトをコンパイルすると、実行可能なEX5ファイルは、プログラムの種類に応じて自動的にローカルのエキスパート、指標またはスクリプトディレクトリにコピーされます。このため、手動でファイルをコピーすることなく、簡単にチャート上でプログラムを起動できます。


    MQL5ストレージ操作の新機能

    新しい共有プロジェクトのサポートを実装するために、MQL5ストレージ操作プロトコルを変更しました。したがって、プラットフォームの更新後にはストレージからすべてのデータのチェックアウトを実行してください。更新中にMQL5ストレージに保存されたデータが失われたり影響を受けたりすることはありません。

    プラットフォームを新しいバージョンに更新する前に、Commit操作を実行してすべてのローカル変更をMQL5ストレージに送信することをお勧めします。

    [Checkout from Storage](ストレージからチェックアウト)コマンドは使用できません。代わりに、[Activate MQL5 Storage](MQL5ストレージをアクティブ化)と [Update from Storage](ストレージからファイルを更新)コマンドを使用してデータを受け取ります。

    • 現在のMetaEditorインスタンスでMQL5ストレージが使用されていない場合は、ナビゲータウィンドウのコンテキストメニューで[Activate MQL5 Storage](MQL5ストレージをアクティブ化)をクリックします。ストレージ内で利用可能なすべてのカタログとファイルはローカルコンピュータにアップロードされます。
    • すでにストレージで作業している場合は、ナビゲータのルートMQL5要素のコンテキストメニューで[Update files from Storage](ストレージからファイルを更新)をクリックして、ストレージからデータを受け取ります。

    新規プロジェクト:作成および操作の詳細の例

    MetaEditorに新規プロジェクトエンティティが追加されました。プロジェクトとは、一般的なプログラムのプロパティと、使用されているすべてのファイルに関する情報を格納するmqprojファイルのことです。ソースコードで#propertyディレクティブを使用して手動で変更するのではなく、別のMetaEditorダイアログから便利にプログラムプロパティを管理できるようになりました。

    利用可能なコードがあれば、 [ソースから新規プロジェクトを作成]コマンドを使って簡単に新しいプロジェクトをテストすることができます。



    選択したファイルがあるディレクトリに、同じ名前とmqproj拡張子を持つ新しいプロジェクトファイルが作成されます。#propertyを介してソースコードで指定されたメインプログラムの名前、著作権、バージョン、開発者のサイトへのリンク、プログラムの説明などのプロパティは、プロジェクトに自動的に追加されます。

    プロジェクトファイル内のプログラムプロパティのセットの優先度は、プログラムコードで指定されたプロパティよりも高くなります。プロパティがプロジェクトとソースファイルの両方に指定されている場合は、プロジェクトのプロパティが使用されます。




    MQL5プログラムをコンパイルするための新しいオプションが2つ追加されました。

    • Enable additional optimization(追加の最適化を有効化):最適化を無効にしたアプリケーションのコンパイルは速くなりますが、実行は遅くなります。
    • Check floating point dividers(浮動小数点除数を確認):確認が無効になっていると、コード実行中にゼロ除算エラーが確認されないためアプリケーションは少し速く動作します。

    プロジェクトを操作するには、ナビゲータウィンドウで[プロジェクト]タブを使用します。このタブでは、プロジェクトで使用されるすべてのファイルが便利な形式で表示されます。プロジェクトがソースファイルから生成されると、使用されているすべてのインクルードファイル(メインのMQ5ファイルとインクルードファイルの#includeディレクトリを使用して指定)が自動的に[Dependencies](依存関係)セクションに追加されます。

    ソースコードに追加された新しいインクルードファイルは、プロジェクトナビゲータにも表示されます。使用されたヘッダーファイルはヘッダーセクションに追加されます。 プロジェクトでリソースとして使用される画像、音声、および他のMQL5プログラムは[リソース]セクションに追加されます。ソースコードを含むMQ5ファイルは[ソース]セクションに表示されます。[設定とファイル]セクションでは、テスト用のファイルとチャートテンプレートなど、他のファイルを追加できます。

    プロジェクトに既存のファイルを追加したり、そこからファイルを削除するには、コンテキストメニューコマンドを使用します。プロジェクトからファイルを削除する(バインディングを削除する)ことと、ハードディスクからファイルを完全に削除することが両方できるので、ファイルを削除するときは注意してください。




    新規プロジェクトの作成は、通常のMQL5プログラムの作成と同じくらい簡単です。[新しいプロジェクト]をクリックし、新しいプログラムのタイプを選択し、MQL5ウィザードでプロパティ(名前、イベントハンドラなど)を指定します。

    実行可能なEX5ファイルを作成するには、プロジェクトを開いてF7(コンパイルコマンド)を押すか、プログラムのメインMQ5ファイルを開いてコンパイルします。


    MQL5ストレージでの共有プロジェクト:操作の詳細

    共有プロジェクトは別の[共有プロジェクト]セクションから管理されます。まだストレージを接続していない場合は、目的のフォルダのコンテキストメニューから[Activate MQL5 Storage](MQL5ストレージをアクティブ化)コマンドを実行してください。MetaEditorは、ストレージに保存されたデータが含まれているかどうか、そして共有プロジェクトがあるかどうかを確認します。利用可能なすべてのデータがストレージから取得され、コンピュータにアップロードされます(チェックアウト操作)。 使用可能なグループプロジェクトが[共有プロジェクト]セクションに表示されます。プロジェクトを取得するには、コンテキストメニューの[Checkout from Storage](ストレージからチェックアウト)を実行します。

    新しいグループプロジェクトを作成するには、[共有プロジェクト]フォルダを選択して[新しいプロジェクト]をクリックします。





    次に、標準的なMQL5のステップを完了します。目的のプログラムのタイプ、名前、プロパティを設定します。グループプロジェクトの場合、他の参加者が簡単に見つけられるように、わかりやすくわかりやすい名前を使用する必要があります。 プロジェクト名にはスペースのないラテン文字のみ使用できます。

    作成されたオブジェクトはすぐにMQL5ストレージに追加されます。プロジェクトで使用されている標準ライブラリファイルはストレージに追加されないので、手動で追加することができます。

    他の参加者がプロジェクトで作業できるようにするには、そのプロパティを開きます。ここから、MQL5.communityログインを指定し、グループ作業の共通パラメータを設定することによって、選択したユーザに権限を与えることができます。

    • プライベートプロジェクト
    • 自由参加プロジェクト
    • リクエストによる参加プロジェクト




    グループプロジェクトをコンパイルすると、実行可能なEX5ファイルは、プログラムの種類に応じて自動的にローカルのエキスパート、指標またはスクリプトディレクトリにコピーされるため、適切なディレクトリに手動でそれをコピーすることなく、すぐにターミナルでプログラムを実行することができます。


    MQL5ストレージのパブリックプロジェクト:開発への参加

    上記のように、MQL5ストレージの各グループプロジェクトには共有設定があり、プロジェクトはプライベートにすることも、他のユーザーに公開することもできます。これで、自由に参加できるすべてのプロジェクトが別の[パブリックプロジェクト]タブに表示されます。

    誰もがエキサイティングなプロジェクトを見つけ、その開発に参加することができます。[Join](参加)をクリックし、ストレージからプロジェクトを受信するだけです。



    参加した各ユーザは読み取り専用権限を取得します。コードを送信するには、プロジェクトの作成者に連絡してください。作成者のログイン名は、コンテキストメニューからプロジェクトのプロパティを開くとわかります。

  2. プロパティとリソースをプログラムコードに簡単に挿入する機能が追加されました。たとえば、インクルードされたファイルをコードにすばやく追加することができます。"Insert—MQH as #incude"コマンドを使用して、所望されたインクルードファイルを選択します。選択したファイルへの正しいパスを含む#include指令がプログラムコードに挿入されます。



    同じメニューを使ってバイナリまたはテキスト配列の形式でプログラムコードファイルを追加することができます。とりわけ、エキスパートアドバイザーまたはインジケータを使用してチャートテンプレートを転送することができます。テンプレートをプログラムコードに配列として挿入し、ディスクに保存してからFileSave関数を使用します。その後、テンプレートは、ChartApplyTemplate関数を使用してエキスパートアドバイザーから適切なチャートに直接適用することができます。
    //+------------------------------------------------------------------+
    //| スクリプトプログラム開始関数                                     |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- バイナリ配列としてのテンプレートファイル
       unsigned char my_template[]=
         {
          0xFF,0xFE,0x3C, ... ,0x00 // この例のデータ配列は短くされている
         };
    //--- 保存及びテンプレートの適用
       if(FileSave("my_template.tpl",my_template))
         {
          Print("Custom template saved in \\MQL5\\Files");
          if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
             Print("Custom template applied to the current chart");
          else
             Print("Failed to apply custom template");
         }
       else
          Print("Failed to save custom template");
      }

  3. ASCII、HEX、およびBase64形式の間で文字列を変換するためのオプションを追加しました。ソースコード内の行を選択し、[編集 - 変換]メニューで目的のコマンドをクリックします。




  4. ファイル内の大文字と小文字を区別しない検索を修正しました。
  5. x.y[0][1].zと似た式を計算するときに発生する可能性のあるデバッガエラーを修正しました。
  6.  進むボタンと戻るボタンを使用したコードナビゲーションを修正しました。

MQL5:

  1. カスタム金融製品を使うための新しい関数を追加しました。

    関数 アクション
    CustomSymbolCreate 指定されたグループに指定された名前を持つカスタム銘柄を作成する
    CustomSymbolDelete 指定された名前を持つカスタム銘柄を削除する
    CustomSymbolSetInteger カスタム銘柄の整数型プロパティ値を設定する
    CustomSymbolSetDouble カスタム銘柄のreal型プロパティ値を設定する
    CustomSymbolSetString カスタム銘柄の文字列型プロパティ値を設定する
    CustomSymbolSetMarginRate 注文の種類と方向に応じてカスタム銘柄の証拠金率を設定する
    CustomSymbolSetSessionQuote 指定した銘柄と曜日の指定されたクオーツセッションの開始時刻と終了時刻を設定する
    CustomSymbolSetSessionTrade 指定した銘柄と曜日の指定された取引セッションの開始時刻と終了時刻を設定する
    CustomRatesDelete 指定された時間間隔でカスタムシンボルの価格履歴からすべてのバーを削除する
    CustomRatesReplace 指定された時間間隔内のカスタム銘柄の価格履歴を、MqlRates型配列のデータで完全に置き換える
    CustomRatesUpdate カスタム銘柄履歴に不足しているバーを追加し、既存のデータをMqlRates型配列のものに置き換える
    CustomTicksAdd MqlTick型の配列からカスタム銘柄の価格履歴にデータを追加する(カスタム銘柄は[気配値表示]ウィンドウで選択)
    CustomTicksDelete 指定された時間間隔でカスタムシンボルの価格履歴からすべてのティックを削除する
    CustomTicksReplace 指定された時間間隔内のカスタム銘柄の価格履歴を、MqlTick 型配列のデータで完全に置き換える

  2. 新しいオンラインサービスMQL5クラウドプロテクターがMQL5プログラムの追加保護を提供するために追加されました。保護は、売り手によって提出されたEX5製品ファイルがネイティブコードにさらにコンパイルされるという、最大規模の取引アプリケーションストア MetaTraderマーケットで使用されるオプションと同様です。

    この種の保護がすべてのプラットフォームユーザーによって利用できるようになりました。ファイルを保護するには、MetaEditorで [ツール]—[MQL5 Cloud Protector]コマンドを実行します。マーケットで使用されているメカニズムとの唯一のMQL5クラウドプロテクターの違いは、ファイルがユーザーのコンピュータにリンクされていないことです。MQL5クラウドプロテクターで保護されたファイルは、一般的なEX5ファイルと同様にコンピュータで実行できます。
    MQL5クラウドプロテクターは安全なサービスです。 追加の保護は、コンパイルされたファイルにのみ適用されます。ソースコードはこのサービスに渡されません。最初のステップでは、プログラムはユーザーのコンピュータ上のEX5ファイルにコンパイルされます。 その後、コンパイルされたファイルが暗号化されたチャネルを介してサービスに送信され、そこで保護され、ユーザに返されます。



  3. 標準ライブラリにジェネリックデータコレクションを追加しました。これにはテンプレートに基づいてコレクションを定義するためのクラスとインターフェイスが含まれています。この新しい厳密に型指定されたコレクションによって、アプリケーション開発の利便性と高いデータ処理パフォーマンスが提供されます。

    ライブラリは、ターミナル作業ディレクトリのInclude\Genericフォルダにあります。

  4. unionデータ型テンプレートのサポートを追加しました。
  5. SYMBOL_VISIBLE取引製品プロパティを追加しました。SymbolInfoInteger(symbol, SYMBOL_VISIBLE) の呼び出しは、指定された銘柄が[気配値表示]に表示されない場合にfalseを返します。
  6. 新しい CHARTEVENT_MOUSE_WHEELプロパティを追加しました。このイベントは、チャート上でマウスホイールがスクロールまたは押されると呼び出されます(チャートの CHART_EVENT_MOUSE_WHEEL=trueの場合)。
  7. 下記のチャートプロパティを追加しました。

    • CHART_EVENT_MOUSE_WHEEL — CHARTEVENT_MOUSE_WHEEL(マウスのスクロールとチャートのクリックイベント)の生成を有効/無効にします(可能な値は0と1)。
    • CHART_CROSSHAIR_TOOL — 中クリックでカーソルを十字線モードに切り替える機能を有効/無効にします(可能な値は0と1)。
    • CHART_CONTEXT_MENU — チャートのコンテキストメニューを表示するための右クリックの使用を有効または無効にします(可能な値は0と1)。

  8. DRAW_NONEスタイルの描画バッファは、指標ウィンドウのスケールを計算する際には考慮されないようになりました。
  9. チャートのCHART_SCALEFIX(固定スケール)プロパティを設定するときのCHARTEVENT_CHART_CHANGEイベント生成を追加しました。
  10. ArraySwap関数を追加し、動的配列の内容をすばやく交換することができるようにしました。
    bool  ArraySwap(
       void&  array1[],      // 1番目の配列
       void&  array2[]       // 2番目の配列
       );
    この関数は、同じ型および同じ次元の動的配列を受け入れます。多次元配列の場合、最初の次元を除くすべての次元の要素の数は一致する必要があります。

  11. 新しいプロパティTERMINAL_RETRANSMISSIONを追加しました。これは、TCP/IPプロトコル内の特定のコンピュータ上のすべての実行中のアプリケーションとサービスの再送ネットワークパケット(再送信)の割合です。パケットロスは、最速かつ正しく設定されたネットワークでも発生します。この場合、受信者と送信者との間のパケット配信の確認はありません。したがって、失われたパケットが再送信されます。

    ターミナルはこの値を計算しません。1分に1回オペレーティングシステムから要求されます。これは特定のターミナルと取引サーバー間の接続品質を示すものではありません。これは、システムとバックグラウンドのアクティビティを含むネットワークアクティビティ全体の割合が計算されるためです。

    TERMINAL_RETRANSMISSIONプロパティがENUM_TERMINAL_INFO_DOUBLE列挙体に追加され、 TerminalInfoDouble関数によって取得されます。
  12. 取引操作の操作を最適化しました。

シグナル

  1. シグナルに従って開かれたポジションの強制決済の場合の注文タイプの表示を修正しました。シグナルのコピーオプションに[Stop if the account is lower than XXX USD](アカウントがXXX USDより低い場合は停止する)オプションを用意しました。エクイティが特定のレベルを下回ると、取引シグナルのコピーが自動的に終了し、すべてのポジションが決済されます。以前は、強制決済の場合にポジションを決済する注文に対して誤ったタイプが設定されていました。ターミナルは、銘柄設定において許容されるタイプを確認し、適切なオプションを指示するようになりました。

Tester

  1. ストラテジーテスターのHistoryOrderSelect関数の動作がクライアント端末の同じ関数に対応するようになりました。
  2. ストラテジーテスターのCopyTicks関数とCopyTicksRange関数の動作がクライアント端末の同じ関数に対応するようになりました。
  3. 視覚テスト中のグラフィックオブジェクトの表示を最適化しました。
  4. テスト結果の表示(為替リスク管理モデル)を修正しました。現在、チャートにはエクイティのみが表示されていて、残高と預金額は表示されていません。そのような口座の取引状況は、エクイティレベルに基づいて評価されます。残高は口座にある金額のみを表示し、トレーダーの資産および負債は無視します。為替計算モードでは証拠金は資産/負債の現在の割引価格と等しく、資本とともに変化するため、預金積み増し(証拠金/エクイティ)は表示されません。

  • ユーザインターフェイスがオランダ語でも利用できるようになりました。
  • ドキュメントを更新しました。
  • 21 7月 2017
    MetaTrader 5プラットフォームビルド1640:カスタムシンボルの作成とテスト

    ターミナル

    1. ターミナルにカスタム金融商品を作成することができるようになりました。この新しいオプションを使用すると、任意のシンボルを作成してその設定を構成し、シンボルに価格データをインポートしてチャートを表示できます。

      カスタムシンボルの作成
      板情報コンテキストメニューを使用してシンボル管理ウィンドウを開き「カスタムシンボルの作成」をクリックします。


      多数のシンボルパラメータの設定が可能です。パラメータとその説明の完全なリストは ドキュメントでみられます。カスタムシンボルは、同様のシンボルのパラメータをコピーして変更することで素早く設定することができます。「コピー元」フィールドで既存のシンボルを選択します。
      カスタムシンボルの名前は、ブローカーによって提供されるシンボルの名前と同じであってはなりません。同じ名前のシンボルが存在するサーバーに接続すると、カスタムシンボルが削除されます。
      ここではパラメータのインポートとエクスポートのコマンドも利用できます。カスタムシンボルはターミナル間で簡単に共有または転送することができます。設定はJSONテキストファイルにエクスポートされます。
      カスタムシンボルの管理
      すべてのシンボルは、個別のカスタムグループに表示されます。シンボルを変更または削除する必要がある場合は、リストのコンテキストメニューを使用します。



      価格履歴のインポート
      価格データは、任意のテキストファイル、およびMetaTrader履歴ファイル(HSTとHCC )からカスタムシンボルにインポートすることができます。シンボルを選択して「バー」タブに移動します。


      インポートダイアログで、ファイルへのパスを指定し、必要なパラメータを設定します。

      • Separator — テキストファイルの要素セパレータ
      • Skip columns and rows — インポート中にスキップされる列(左から右)と行(上から下)の量
      • Shift — 時間単位の時間シフト。このオプションは、異なるタイムゾーンに保存されたデータをインポートするときに使用されます。
      • Use selected only — 行ビュー領域で強調表示された行のみをインポートします。行はCtrlキーまたはShiftキーを長押しすると強調表示できます。

      分足のファイルは「日付 時刻 始値 高値 安値 終値 ティックボリューム ボリューム スプレッド」の形式を持つはずです。例:
      2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
      2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
      2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
      2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41
      カスタムシンボルでは任意の既存製品のデータを使用することができます。データをエクスポートし(このオプションは以前のプラットフォームのバージョンで追加されました)、必要に応じて変更し、データをインポートし直します。
      価格履歴はMetaTrader 5に分足バーの形で保存され、他のすべての時間枠は、これらのバーに基づいて作成されます。また、より長い時間枠のデータをインポートすることもできますが、より短い時間枠のチャートではギャップが生じます。たとえば、時間足のデータをインポートすると、1時間に1つのバーがM1チャートに表示されます。
      カスタムシンボルの価格データは、下記のような別のカスタムディレクトリに保存されます(取引サーバのデータが保存されているディレクトリではありません)。
      C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

      カスタムシンボルの使用
      カスタムシンボルの使用は、ブローカーが提供する製品の使用に似ています。カスタムシンボルは板情報ウィンドウに表示され、 シンボルのチャートを開いたり、その上に指標や分析オブジェクトを適用することができます。カスタムシンボルは取引できません。

      カスタムシンボルのテスト戦略
      カスタムシンボルはストラテジーテスターでの自動売買ロボットや指標のテストに使用できます。これにより、ブローカーが現在提供できない銘柄についても戦略の最適化が可能になります。履歴を正しくインポートし、カスタムシンボルのプロパティを設定するだけです。



      ストラテジーテスターは証拠金と利益を計算するときには自動的に利用可能なクロスレートを使用します。 Forexタイプの証拠金計算を使用してAUDCAD.customシンボルを作成し、口座通貨をUSDにしたとします。この場合、テスターはForexシンボル名に基づいて次の順序で必要なシンボルを検索します。
      1.     まず、AUDUSD.custom(証拠金計算用)とUSDCAD.custom(取引利益計算用)のシンボルの検索が実行されます。
      2.     これらのシンボルがいずれも存在しない場合、必要な通貨ペアに対応する最初のシンボル(名前はそれぞれAUDUSDおよびUSDCAD)の検索が実行されます。たとえば、AUDUSD.bとNZDUSD.bのシンボルが見つかると、証拠金と利益を計算するためにはそれらのレートが使用されます。

      他種の証拠金計算を持つ製品(先物取引および証券取引所)では、商品通貨を預金通貨に変換するために通貨ペアが必要です。預金通貨がCHFであり、利益および証拠金通貨がGBPで表されるカスタムシンボルを作成したとします。この場合、テストシンボルの検索は次の順序で実行されます。
      1. GBPCHF(GBP対CHF)に対応する取引シンボルの存在が確認される。
      2. そのようなシンボルが存在しない場合、GBPCHFに対応する最初の取引シンボル(GBPCHF.bまたはGBPCHF.defなど)が検索される。

      カスタム製品を使用してアプリケーションをテストする場合は、取引口座に必要な通貨ペアがすべてあることを確認してください。ペアが欠如している場合、テスト中の取引結果と証拠金の計算は不可能です。

      今後のプラットフォームでは可能性がさらに広がる
      カスタムシンボルの開発はまだ完了しておらず、次のビルドでも多くの機能が追加される予定です。エキスパートアドバイザーからカスタムシンボルに直接履歴をインポートできるだけでなく、そのようなシンボルのデータ(クオーツを追加)を実時間でインポートすることもできます。

    2. Time&Sales機能にボリュームによるフィルタリングを追加しました。

      指定された値未満のボリュームを持つ取引は、Time&Salesテーブルから非表示にすることができます。このフィルタが適用されていると「Time&Sales」ウィンドウには大きな取引だけが表示されます。
      Time&Salesウィンドウの最初の行をダブルクリックして最小ボリュームを指定し、板情報の他の領域をクリックします。取引がフィルタリングされ、現在のフィルタ値がボリューム列ヘッダーに表示されます。


      Time&Salesのコンテキストメニューを使用して最小ボリュームを指定することもできます。

    3. 板情報をアクティブチャートにバインドするオプションを追加しました。金融商品のチャートに切り替えるたびに、板情報ウィンドウで同じ商品が自動的に有効になります。したがって、新しいシンボルごとに板情報ウィンドウを開く必要はありません。



    4. ターミナルウィンドウを最小化/最大化した後のツールバーのリフレッシュを修正しました。
    5. 取引チケットとポジションチケットが重なった場合のポジション取引履歴の生成を修正しました。

    MQL5

    1. MQL5プログラムを価格履歴でプロファイリングするオプションが追加されました。このオプションを使うと、新しいティックを待たずにプログラムの性能を確認することができます。
      実際のデータに基づいてプロファイリングする場合、プログラムはターミナルの通常のチャートで起動されます。多くのプログラム、特に指標は、新しいティックの到着時にのみ計算を実行するため(OnTickOnCalculate)、その性能を評価するためには、実時間で新しいティックを待たなければなりません。履歴データを使用したプログラムのテストでは、必要な負荷をすぐに提供できます。プロファイリングはストラテジーテスターのビジュアルモードで開始され、一度に多くの新しいティックイベントが受信されます。



    2. unionサポートを追加しました。unionは、同じメモリ領域を共有する複数の変数からなる特別なデータ型で、同じビットシーケンスを2つ(またはそれ以上)の異なる方法で解釈する能力を提供します。unionの宣言は 'union'キーワードで始まります。
      union LongDouble
      {
        long   long_value;
        double double_value;
      };
      構造体とは異なり、さまざまなunionメンバは同じメモリ領域に属します。この例では、LongDoubleのunionは、long型とdouble型の値が同じメモリ領域を共有するように宣言されています。long_valueとdouble_value変数が(メモリ内で)重複しているので、構造体とは異なり、long型の値とdouble型の実数値を同時に格納することはできません。一方、MQL5プログラムは、unionからのデータをいつでも整数(long)または実数(double)として 処理することができるため、unionでは、同じデータシーケンスを表す2つ(またはそれ以上)のオプションを受け取ることができます。

      unionの宣言中に、コンパイラは、変数unionに最大(サイズ)の型を格納するのに十分なメモリ領域を自動的に割り振ります。union要素にアクセスするためには、構造体要素にアクセスするのと同じ構文(点演算子)が使用されます。
      union LongDouble
      {
        long   long_value;
        double double_value;
      };
      //+------------------------------------------------------------------+
      //| スクリプトプログラム開始関数                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
      //---
         LongDouble lb;
      //--- 無効な-nan(ind)番号を取得して表示する
         lb.double_value=MathArcsin(2.0);
         printf("1.  double=%f                integer=%I64X",lb.double_value,lb.long_value);
      //--- 正規化された最大値l(DBL_MAX)
         lb.long_value=0x7FEFFFFFFFFFFFFF;
         printf("2.  double=%.16e  integer=%I64X",lb.double_value,lb.long_value);
      //--- 正規化された最小正 (DBL_MIN)
         lb.long_value=0x0010000000000000;    
         printf("3.  double=%.16e  integer=%.16I64X",lb.double_value,lb.long_value);
        }
      /*  実行結果
          1.  double=-nan(ind)                integer=FFF8000000000000
          2.  double=1.7976931348623157e+308  integer=7FEFFFFFFFFFFFFF
          3.  double=2.2250738585072014e-308  integer=0010000000000000
      */

    3. 構造物やクラスオブジェクトに対する暗黙のコピー演算子の自動生成を追加しました。コンパイラは自動的にコピー演算子を作成します。これにより、b = aのようなオブジェクトの単純なエントリを書くことができます。
      class Foo
        {
         int               value;
      public:
         string Description(void){return IntegerToString(value);};
         //--- デフォルトコンストラクタ
                           Foo(void){value=-1;};
         //--- パラメータ付きのコンストラクタ
                           Foo(int v){value=v;};
        };
      //+------------------------------------------------------------------+
      //|  Foo型オブジェクトを持つ構造体                           |
      //+------------------------------------------------------------------+
      struct MyStruct
        {
         string            s;
         Foo               foo;
        };
      //+------------------------------------------------------------------+
      //| スクリプトプログラム開始関数                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
      //---
         MyStruct a,b;
         Foo an_foo(5);
         a.s="test";
         a.foo=an_foo;
         Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
         Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
      //---
         Print("b=a");
         b=a;
      //---
         Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
         Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
      /*
         Execution result;
         a.s=test a.foo.Description()=5
         b.s= b.foo.Description()=-1
         b=a
         a.s=test a.foo.Description()=5
         b.s=test b.foo.Description()=5
      */
        }
      オブジェクトメンバ単位のコピーは暗黙の演算子で実行されます。

      • メンバがオブジェクトの場合、このオブジェクトに対応するコピー演算子が呼び出されます。
      • メンバがオブジェクトの配列である場合、各要素に対して適切なコピー演算子を呼び出す前に、ArrayResizeを使用して受信配列が必要なサイズに増減されます。
      • メンバが単純型の配列である場合、コピーにはArrayCopy関数が使用されます。
      • メンバがオブジェクトへのポインタである場合、コピーされるのはポインタでそれが指しているオブジェクトではありません。

      必要に応じて、オーバーロードを使用して暗黙のコピー演算子の代わりに動作をオーバーライドして独自のオプションを作成することができます。

    4. Copy*関数を使用してエキスパートアドバイザーから価格履歴にアクセスする際のメモリ使用量を最適化しました。大量のデータを扱う場合、メモリ消費量は何倍も削減されます。

    5. datetimeのMqlDateTimeへの変換が成功したかどうかをTimeToStruct関数が返すブール値で確認できるようになりました。
    6. 文字列、動的配列、オブジェクト、ポインタを含む構造体の FileWriteStruct および FileReadStruct 関数の使用を禁止しました。
    7. 以下の応答コードが追加されました。

      • TRADE_RETCODE_REJECT_CANCEL — 未決注文をアクティブにする要求が拒否され、注文がキャンセルされました。
      • TRADE_RETCODE_LONG_ONLY — シンボル に"Only long positions are allowed(買いポジションのみ)"が設定されているため、リクエストが拒否されました。
      • TRADE_RETCODE_SHORT_ONLY — シンボルに"Only short positions are allowed(売りポジションのみ)"が設定されているため、リクエストが拒否されました。
      • TRADE_RETCODE_CLOSE_ONLY — シンボルに"Only closing of existing positions is allowed(既存ポジションの決済のみ)"が設定されているため、リクエストが拒否されました。

    8. SYMBOL_ORDER_MODE パラメータを持つSymbolInfoInteger関数の新しい戻り値を追加しました。SYMBOL_ORDER_CLOSEBY — Close By操作(反対方向のポジションによるポジションの決済)の許可。
    9. SYMBOL_CUSTOMブール値プロパティがENUM_SYMBOL_INFO_INTEGER列挙に追加されました。このプロパティは、シンボルがカスタムであるかどうかを調べることができます。プロパティを取得するにはSymbolInfoInteger 関数を使用します。
    10. 注文、取引、ポジションの作成理由を取得できるようになりました。

      新しいプロパティ


      注文、取引、ポジション作成の理由
      取引操作の作成理由を得るための3つの変数が追加されました。
      ENUM_POSITION_REASON ENUM_DEAL_REASON ENUM_ORDER_REASON 理由の詳細
      POSITION_REASON_CLIENT DEAL_REASON_CLIENT ORDER_REASON_CLIENT この操作は、デスクトップターミナルから出された注文がアクティブ化された結果として実行されました。
      POSITION_REASON_MOBILE DEAL_REASON_MOBILE ORDER_REASON_MOBILE この操作は、モバイルアプリケーションから出された注文がアクティブ化された結果として実行されました。
      POSITION_REASON_WEB DEAL_REASON_WEB ORDER_REASON_WEB この操作は、Webプラットフォームから出された注文がアクティブ化された結果として実行されました。
      POSITION_REASON_EXPERT DEAL_REASON_EXPERT ORDER_REASON_EXPERT この操作は、MQL5プログラム(エキスパートアドバイザーまたはスクリプト)から出された注文がアクティブ化された結果として実行されました。
      - DEAL_REASON_SL ORDER_REASON_SL この操作は、ストップロスのアクティブ化の結果として実行されました。
      - DEAL_REASON_TP ORDER_REASON_TP この操作は、テイクプロフィットのアクティブ化の結果として実行されました。
      - DEAL_REASON_SO ORDER_REASON_SO この操作は、ストップアウトイベントの結果として実行されました。
      - DEAL_REASON_ROLLOVER - この約定は、ロールオーバのために実行されました。
      - DEAL_REASON_VMARGIN - この約定は、変動証拠金を課金した後に実行されました。
      - DEAL_REASON_SPLIT - この約定は、スプリットが公表された時にポジションが存在した株式または他の資産のスプリット(低下)の後に実行されました。

    11. 同期とティック履歴へのアクセスを最適化しました。
    12. CopyTicksRange関数でティックを統計配列に返すよう修正しました。以前のバージョンでは、この場合、常に0個のティックが返されました。
    13. ファジー論理ライブラリにさまざまな修正を加えました。

    シグナル

    1. 取引口座の接続がない場合、ウェブサイトからのシグナルが開かれる問題を修正しました。

    テスター

    1. 注文履歴及び約定履歴による作業を最適化して加速化しました。大量のデータ(数万回の履歴エントリ)を扱う場合の操作速度は何倍も向上しました。
    2. テストレポートのポジション保持時間の計算を修正しました。

    MetaEditor

    1. デバッガでの静的クラスメンバ配列の内容の表示を修正しました。
    2. デバッグされたプログラムにブレークポイントのリストを追加しました。このリストは「デバッグ」タブのコンテキストメニューを使用して開くことができます。


      ブレークポイントにジャンプするには、ブレークポイントをダブルクリックします。
    ドキュメントを更新しました。
    26 4月 2017
    MetaTrader 5プラットフォームビルド1596:価格履歴へのアクセス

    ターミナル

    1. バーとティック履歴へのアクセスを追加しました。現在、MQL5言語を使用するだけでなく、サーバーからトレーディングプラットフォームインターフェイスを介して完全な1分およびティック履歴をダウンロードすることも可能です。価格データへのアクセスは、カスタムデータフィード機能の開始の準備の一環として拡大されています。近い将来、プラットフォームはユーザーの価格データに基づいてチャートを作成し、合成銘柄を作成し、オフラインチャートを使用する可能性を提供します。
      データをダウンロードするには「気配値表示」ウィンドウのコンテキストメニューから銘柄管理ダイアログを開きます。


      このダイアログには "バー"と "ティック"の2つの新しいタブがあります。銘柄と希望の時間間隔を選択し「Request」をクリックします。プラットフォームはサーバーから利用可能なすべてのデータを要求し、既にダウンロードされている場合はすぐにデータを表示します。保存された価格データはCSVファイルにエクスポートできます。

    2. ポジション、取引、注文のミリ秒単位の時間表示を追加しました。



    3. 取引ダイアログで、Close Byリクエストの実行拒否に関する通知を修正しました。

    MQL5

    1. PositionSelect関数を修正しました。この関数は、最も低いチケット番号を有するものとは異なるポジションを時々選択することがあります。
    2. 非常に詳細なティック履歴データを要求するときCopyTicksおよびCopyTicksRange機能の動作を固定しました。

    シグナル

    1. 既存のポジションのサイズを増やす操作のコピーが修正されました。このエラーは、ネット決済の時折発生する可能性があります。

    テスター

    1. テスター:取引所製品のリミット注文の処理を修正しました。買値が市場価格よりも低い、または売値が市場価格を上回る注文は、スリッページなしで実行されます。市場価格より悪い注文は、直ちに注文時の市場価格で実行されます

    ドキュメントを更新しました。

    24 3月 2017
    MetaTrader 5プラットフォームビルド1570:マーケットショーケースの改善とMQL5テンプレート関数の拡張

    ターミナル

    1. アプリケーションの MetaTraderマーケットストアでのショーケースを更新しました。売買ロボットやテクニカル指標がより便利にブラウズできます。デザインが更新され、製品の選択が追加されました。

      • メインページには人気の高いエキスパート、指標、マーケットでの新製品、トップ無償アプリが登場するようになりました。
      • エキスパート、指標、ユーティリティのセクションには、グリッドとヘッジのロボット、トレンド指標と多通貨指標などのサブセクションが追加されました。




    2. Windowsアカウントの権限が限られている場合の、クライアント端末更新とマーケット、シグナル、仮想ホスティングでの内蔵された購入を修正しました。
    3. 時折見られたポジション履歴の間違った並び替えを修正しました。
    4. 「資産(Exposure)」タブの表示を修正して最適化しました。

    MQL5

    1. パラメータを使用したテンプレート関数オーバーロードのサポートを追加しました。例は、型キャストを使用して第1パラメータに第2パラメータの値を書き込むテンプレート関数です。MQL5はstringをboolに型キャストすることはできません。しかし、自分でやることは可能です。テンプレート関数のオーバーロードを作成しましょう。
      //+------------------------------------------------------------------+
      //| テンプレート関数                                                   |
      //+------------------------------------------------------------------+
      template<typename T1,typename T2>
      string Assign(T1 &var1,T2 var2)
        {
         var1=(T1)var2;
         return(__FUNCSIG__);
        }
      //+------------------------------------------------------------------+
      //| bool+stringのための特別のオーバーロード                             |
      //+------------------------------------------------------------------+
      string Assign(bool &var1,string var2)
        {
         var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0);
         return(__FUNCSIG__);
        }
      //+------------------------------------------------------------------+
      //| スクリプトプログラム開始関数                                        |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         int i;
         bool b;
         Print(Assign(i,"test"));
         Print(Assign(b,"test"));
        }
      コード実行の結果、Assign()テンプレート関数はint+stringのペアで使用され、オーバーロードされたバージョンは2回目の呼び出しでbool+stringペアですでに使用されていることがわかります。
      string Assign<int,string>(int&,string)
      string Assign(bool&,string)

    2. テンプレート関数を明示的に特殊化しました。これを行うには、呼び出しパラメーターのリストの前に型定義パラメーターを指定します。
      template<typename T>
      T Func() { return (T)0; }
        
        
      void OnInit()
        {
         Func<double>();   // 明示的テンプレート関数の特殊化
        }
      したがって、型定義は、呼び出しパラメータを使用するのではなく、型の明示的な指定によって実行されます。

    3. DRAW_ZIGZAG描画タイプを使用したカスタム指標の表示を最適化しました。
    4. ENUM_DEAL_TYPE取引タイプ列挙に新しい値を追加しました。

      • DEAL_DIVIDEND — 配当金操作
      • DEAL_DIVIDEND_FRANKED — フランク(課税対象外)配当操作(税金はクライアントではなく会社によって支払われます)
      • DEAL_TAX — 課税

    5. 描画タイプがDRAW_FILLINGのカスタム指標の表示が修正されました。上下の線の座標が一致する場合は、細い線が引かれます。
    6. CHART_SHOWパラメータが 'false'に設定されたときのBitmap Labelオブジェクトの座標計算が修正されました。このパラメータはChartSetInteger関数で設定され、すべての価格チャート要素を非表示にしてカスタムプログラムインターフェイスを作成できます。
    7. 24ビット画像をMQL5アプリケーションリソースに配置する際にの再エンコードを修正しました。
    8. ArrayPrint関数を使用した構造体の出力を修正しました。
    9. MQL5標準ライブラリを更新しました。

    MetaEditor

    1. マレー語へのUI翻訳を追加しました。

    シグナル

    1. 取引口座に接続されていない状態でMQL5.communityのWebサイトから移動したさいに端末のシグナルページを開くことを修正しました。

    テスター

    1. ストラテジーテスターのCopyTicks関数の操作を修正しました。
    2. レポートを生成する際の出金取引の並び替えを修正しました。
    3. 修正中の未決注文を修正しました。

    ホスティング

    1. 超高解像度スクリーン(4kb)での仮想ホスティングウィザードの表示を修正しました。

    ドキュメントを更新しました。

    17 2月 2017
    MetaTrader 5 プラットフォームビルド1545:ウィンドウ間の高速切り替えとマウスホイールでの価格変更

    ターミナル

    1. 「ツールボックス」と「ストラテジーテスター」ウィンドウ間を高速に切り替えます。



    2. 新しいオプションを使用して、マウスホイールで価格と注文量を編集できます。




    3. モバイルターミナルのダウンロードに切り替えるときにトレードサーバーのリストが記憶されます。その後、iPhoneやAndroidデバイスにMetaTraderをインストールすると、そのサーバーリストが表示されます。既存の取引口座にはすぐに接続することができます。モバイルターミナルでは現在接続されている口座のサーバーが最初に表示されます。




    4. 目に見えない(最小化された)チャートやオブジェクトによって生成されるターミナルへの負荷が大幅に軽減されました。
    5. トレール注文の不正なトリガが修正されました。
    6. 口座取引履歴での銘柄による取引のフィルタリングが修正されました。
    7. ポジション履歴での「タイプ」フィールドの表示が修正されました。
    8. ポジションの形での取引履歴の表示が修正されました。

    MQL5

    1. 色にCLR_NONEが使用されている場合の描画タイプがDRAW_COLOR_LINE、DRAW_COLOR_ZIGZAGおよびDRAW_COLOR_SECTIONであるカスタム指標の表示が修正されました。
    2. 定数ポインタを使用したテンプレートの型付けが修正されました。
    3. private及びprotectedクラスメンバへのアクセスの制御が修正されました。

    テスター

    1. テスター:注文商品の価格が現在の市場よりも悪い(買値が市場価格よりも高い、または売値が市場価格よりも低い)時の、取引所での指値注文のアクティブ化が修正されました。
    2. 64以上の入力パラメーターを持つカスタム指標のテストに関連する制限が削除されました。
    3. UIのヒンディー語への翻訳を追加しました。

    ドキュメントを更新しました。

    27 1月 2017
    MetaTrader 5 ビルド1525:ポジションとしての取引履歴の表示とテスターの改善

    ターミナル

    1. 取引履歴をポジションの形で表示することができるようになりました。ターミナルは、ポジションに関連した取引データ(ポジションの開始点、追加の数量、部分的および完全決済)を収集し、そのデータを1つのレコードにグループ化します。このレコードには、次の詳細が含まれます。

      • 最初と最後の取引によって決定されるポジションの開閉時間
      • ポジションの数量ポジションの一部が決済されている場合は決済された数量とソース数量
      • 加重平均されたポジションの始値と終値
      • ポジションに関連する取引の結果




      ヘッジアカウントでは、新しい履歴の形式はMetaTrader 4で使用されたアカウント履歴のものと似ています。




    2. 新しいコマンドが追加されました。これにより、銘柄チャートで取引を視覚化することができます。

      • 選択したポジション/銘柄の取引を表示する必要がある場合は「 [銘柄名] の取引を追加」をクリックします。適切な取引は選択された銘柄の現在開いているすべてのチャートに表示されます。銘柄のチャートが1つも開いていない場合は、新しいチャートが開きます。
      • アカウント履歴でのすべての銘柄の取引を表示するには「すべての取引を追加」をクリックします。対応する銘柄の取引がすべての開いているチャートに追加されます。




    3. 契約仕様書での取引製品の国際名の表示と、銘柄管理ダイアログでの国際名での検索を追加しました。




    4. ターミナルウィンドウの解像度設定のためのコマンドが追加されました。この機能は、動画を作成するのに役立ちます。このメニューではYouTubeのようなさまざまなビデオサービスで使用される最も一般的な解像度オプションが用意されています。



    5. チャートテンプレートとプロファイルが「ターミナルデータフォルダ\Profiles」から「ターミナルデータフォルダ\MQL5\Profiles」に移動されました。MQL5ストレージにテンプレートを簡単に追加して、どのPCからでもアクセスできるようになりました。

    MQL5:

    1. リソース変数のサポートが追加されました。そのような変数を使用することによって、いくつかのプログラムの開発を大幅に促進することができます。たとえば、OpenCLプログラムのコードを別のCLファイルに記述してMQL5プログラムリソースに文字列として含めることができます。更新前には、そのようなコードは1つの大きな文字列変数として記述される必要がありました。

      リソース変数の宣言
      #resource path_to_resource_file as type_of_resource_variable name_of_resource_variable

      機能
      • 文字列ファイルのエンコーディングはBOM(ヘッダ)に基づいて自動的に決定されます。BOMが存在しない場合、エンコーディングはファイルの内容によって定義されます。ANSI、UTF-8、UTF-16がサポートされています。すべての文字列はUnicodeに変換されます。
      • そのようなリソースのデータは、変数を介してのみアドレス指定することができます。":: <リソース名>"を使用した自動アドレス指定は使用できません。
      • 特別なビットマップリソース変数型は、コンパイラにリソースが画像であることを示します。この場合、リソース変数はuint型をもちます。
      • 24ビット画像を使用する場合、アルファチャンネルコンポーネントはすべての画像ピクセルに対して255に設定されます。
      • アルファチャンネルなしの32ビット画像を使用する場合、アルファチャンネルコンポーネントもまたすべての画像ピクセルに対して255に設定されます。
      • アルファチャンネルを使用して32ビット画像をロードすると、ピクセルはまったく処理されません。
      • ビットマップ型の配列リソース変数は2次元を持つことができます。この場合、配列のサイズは[image_height] [image_width]で定義されます。
      • 配列の1次元が指定されている場合、要素数は image_height*image_width となります。
      • リソースファイルのサイズが配列要素のサイズの倍数でない場合、残りのデータは切り取られます。たとえば、ファイルサイズが14バイトの場合、int 配列の要素数は3になりますが、他の2バイト(14 - sizeof(int)* 3)は捨てられます。

      使用例
      #resource "data.bin" as int ExtData[]             // data.binファイルのデータを含む数値配列の宣言
      #resource "data.bin" as MqlRates ExtData[]        // data.binファイルのデータを含む単純構造配列の宣言
      
      #resource "data.txt" as string ExtCode            // data.txtファイルのデータを含む文字列の宣言
      #resource "data.txt" as string ExtCode[]          // data.txtファイルのデータを含む文字列の宣言
      
      #resource "image.bmp" as bitmap ExtBitmap[]       // BMPファイルからのビットマップを含む1次元配列の宣言、array size = width * height
      #resource "image.bmp" as bitmap ExtBitmap2[][]    // BMPファイルからビットマップを含む2次元配列を宣言する、array size [hight][width]
      

    2. 新しいCHART_SHOWプロパティを使用すると、チャートの表示を無効にできます。プロパティを取得/設定するには、関数ChartGetInteger ChartSetInteger を使用します。

      falseの場合、時間および価格スケール、クイックナビゲーションバー、カレンダーイベントラベル、取引ラベル、インディケータおよびバーツールヒント、インディケータサブウィンドウ、ボリュームヒストグラムなど、価格チャート属性の描画は無効になり、すべてのチャートの境界インデントが削除されます。
      描画の無効化は、グラフィックリソースを使用してカスタムプログラムインターフェイスを作成するための完璧なソリューションです。

      グラフィックオブジェクトはCHART_SHOWプロパティの値に関係なく常に描画されます。

    3. 新しいCHART_KEYBOARD_CONTROLプロパティを使用すると、キーボードを使用してチャートコントロールを有効/無効にすることができます ("Home"、"End"、"PgUp"、"+"、"-"、"上矢印"など)。CHART_KEYBOARD_CONTROLをfalseに設定するとOnChartEvent()でキー押下イベントを受け取ることができますが、チャートのスクロールとスケーリングは無効になります。
      ChartGetIntegerChartSetInteger関数を使用するとプロパティを取得/設定できます。

    4. OpenCLを使用するための新しい関数が追加されました。

      メモリを操作するための新しいプロパティ
      CLGetInfoIntegrer によって、4つの新しいプロパティを受け取ることができます。
      • CL_DEVICE_MAX_WORK_GROUP_SIZE — OpenCLデバイスで使用可能なローカルワーキンググループの総数
      • CL_KERNEL_WORK_GROUP_SIZE — OpenCLプログラムで使用可能なローカルワーキンググループの総数
      • CL_KERNEL_LOCAL_MEM_SIZE — グループ内のすべての並列タスクを解決するためにOpenCLプログラムが使用するローカルメモリのサイズ(バイト単位)(使用可能な最大値を受け取るにはCL_DEVICE_LOCAL_MEM_SIZEを使用)
      • CL_KERNEL_PRIVATE_MEM_SIZE — OpenCLプログラムカーネルの各タスクで使用されるプライベートメモリの最小サイズ(バイト単位)

      bool CLExecutionStatus(int kernel)
      OpenCLプログラム実行ステータスを返します。 OpenCLプログラムのカーネルハンドルはパラメータとして渡されます。

      bool CLSetKernelArgMemLocal(int kernel_handle,int arg_index,ulong local_mem_size)
      ローカルバッファをカーネル関数の引数として設定します。OpenCLプログラムのカーネルハンドル、OpenCL関数の引数数、およびバッファサイズはパラメータとして渡されます。

    5. 新しいTRADE_RETCODE_LIMIT_POSITIONS応答コードが追加されました。口座に同時に存在するポジションの数は、サーバー設定によって制限されます。制限に達すると、サーバーは注文を出そうとするときにTRADE_RETCODE_LIMIT_POSITIONSエラーを返します。この制限の動作は、ポジション会計タイプによって異なります。

      • Netting — ポジション数が考慮されます。限界に達すると、プラットホームはその実行によってポジション数が増加する可能性がある新しい発注を無効にします。実際には、プラットフォームはすでにポジションを持っている銘柄だけを注文することができます。現在の未決注文は、その実行が現在のポジションの変更につながってもその数を増やすことはできないので、考慮されません。
      • Hedging — 未決注文のアクティベーションは常に新しいポジションを開くため、未決注文はポジションとともに考慮されます。制限に達すると、プラットフォームは、ポジションを開けるための成行注文と未決注文の両方を無効にします。

    6. ティック履歴でティックが抜かされるエラーを修正しました。
    7. 間接的なテンプレート入力エラーを修正しました。
    8. 数学統計関数ライブラリを更新しました。

    マーケット

    1. デモ版をダウンロードする際に開かれる製品ページを修正しました。

    テスター

    1. 最適化完了後、結果が「結果」列で自動的にソートされるようになりました。
    2. 最適化結果タブのコンテキストメニューの新しい「最適化結果に切り替える」コマンドを使用すると、最適化が完了したときに自動的に結果を開くことができます。
    3. ストラテジーテスターは、単一のテストを開始した後、最適化モードのままでいるようになりました。以前のバージョンでは、最適化結果タブから1テストを開始した場合、ストラテジーテスターは単一テストモードに切り替わりました。さらに最適化を行うには最適化モードを有効にする必要がありました。
    4. 入力パラメータのセットは、従来の.setファイルに加えて、コンテキストメニューから便利にアクセスできるローカルストラテジーテスター設定として保存できるようになりました。




    5. モンゴル語、ハンガリー語、ルーマニア語、ウルドゥー語へのUI翻訳を追加しました。
    6. デバッガウィンドウで監視された式の順序を変更する機能が追加されました。式はマウスで必要な位置にドラッグすることができます。




    MetaEditor

    1. デバッガウィンドウで監視された式の順序を変更する機能が追加されました。式はマウスで必要な位置にドラッグすることができます。



    2. ソースファイルのエンコーディングの決定を修正しました。
    3. UTF-8エンコーディングのファイルによる検索を修正しました。
    4. テキストがタブを含む場合のマウスによるテキスト選択を修正しました。
    5. ハンガリー語とルーマニア語へのUI翻訳を追加しました。

    ドキュメントを更新しました。

    9 12月 2016
    新しい MetaTrader 5 プラットフォームビルド1495:カスタムグラフィックを扱うためのMQL5の改良

    MQL5

    1. MQL5: CopyTicksRange 関数が追加されました。
    2. MQL5:CCanvasクラスに改良されたアンチエイリアス関数が追加されました。
    3. MQL5:MQL5リファレンスにグラフィカルライブラリの説明が追加されました。このライブラリは、価格チャート上でヒストグラム、分布グラフ、折れ線グラフを手早く作成することができます。
    4. MQL5:クライアントターミナルプロパティの定数リストにシステムキーの状態を表す識別子が追加されました。TerminalInfoInteger(TERMINAL_KEYSTATE_XXX)の呼び出しは、MSDNのGetKeyState()関数と同じキーの状態コードを返します。
    5. MQL5:string型のboolへのキャストのサポートを無効にしました。文字列をチェックするには、明示的な条件を使用する必要があります。たとえば、新しいビルドでは、次のコードをコンパイルするとエラーになります。
      string str;
      ...
      if(str)                        // 「Cannot convert type 'string' to 'bool(string型はboolに変換できません)」コンパイルエラーが発生する(以前のバージョンではエラーは表示されない)
         Print("str is true");
      明示的な条件の使用が必要です。
      string str;
      ...
      
      //--- 文字列が初期化されているかを確認する
      if(str!=NULL)
         Print("str is true");
      
      または
      
      //--- 文字列の値が「true」かどうかを確認する
      if(StringCompare(str,"true",false))
         Print("str is true");
      
      または
      
      //--- 文字列が整数でゼロと等しいかどうかを確認する「true」かどうかを確認する
      if((int)str!=0)
         Print("str is true");
    6. クラッシュログで修正されたエラーが修正されました。
    2 12月 2016
    メタトレーダー5 ウェブ・プラットフォーム:二要素認証とパスワード変更
    • ワンタイムパスワードを使用した二要素認証オプションが追加されました。これによって、不正アクセスに対するアカウントの保護が強化されます。二要素認証を有効にするには、メタトレーダー5モバイル版を起動します。ログインして、設定ウィンドウでワンタイムパスワード(OTP)ジェネレータオプションを選択します。OTPジェネレータを使用すると、取引アカウントをすべてバインドして、アカウントごとに固有の6桁のワンタイムパスワードを自動的に生成できます。ウェブ・プラットフォームにログインする際には生成されたパスワードを入力します。





    • あと一つの新しいオプションでは、マスターパスワードと投資家パスワードを変更することができます。この機会に覚えやすい個人IDを作成してください。
    • また、更新されたWebプラットフォームではデモアカウントが自動的に生成されます。メタトレーダー5 ウェブ・プラットフォームをどのブラウザからでも立ち上げ、すぐに外国為替、株、先物やの金融商品の取引を始めることができます。
    24 11月 2016
    MetaTrader 5 ビルド1485:新しいテストモードと標準ライブラリのグラフィックス

    ターミナル

    1. ターミナルとMetaEditorジャーナルのエントリの順序が変更されました。更新前には最新のログエントリが最初に表示されましたが、最も古いエントリーがジャーナルの最初に表示されるようになりました。より一般的な昇順での並べ替えは、ジャーナルの読解を容易にします。




      さらに、ジャーナルのコンテキストメニューを使用して、「時間」および「ソース」列を非表示にすることも可能になりました。

    2. ヘッジモードで、取引履歴の注文と取引に関連して決済されたポジションのチケットが表示されるようになりました。これにより、関連する開閉操作を簡単に見つけることができます。




    3. SL/TPを既存のポジションから同じ製品の新しいポジションにコピーする際に発生したエラーを修正しました。このエラーは(チャートまたは気配値表示ウィンドウなどからの)ワンクリック取引機能をヘッジモードで使用すると発生することがありました。
    4. 超高精細画面(4K)での矢印オブジェクトの表示を修正しました。

    MQL5

    1. 新しいArrayPrint 関数が追加され、単純な型と構造体が配列ログに出力されます。
      void  ArrayPrint(
         const void&   array[],             // 出力配列
         uint          digits=_Digits,      // 小数点以下の桁数
         const string  separator=NULL,      // 構造体フィールド間の区切り文字の値
         ulong         start=0,             // 初めに表示される要素のインデックス
         ulong         count=WHOLE_ARRAY,   // 表示される要素の数
         ulong         flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN    
         );
      
      ArrayPrintは構造体配列のすべてのフィールドをログに出力するものではありません。オブジェクトの配列フィールドとポインタフィールドは抜かされます。すべての構造体のフィールドを出力する必要がある場合は、希望の書式を使用して独自のマス出力関数を記述する必要があります。
      //--- 最後の10バーの値を出力する
         MqlRates rates[];
         if(CopyRates(_Symbol,_Period,1,10,rates))
           {
            ArrayPrint(rates);
            Print("Проверка\n[time]\t[open]\t[high]\t[low]\t[close]\t[tick_volume]\t[spread]\t[real_volume]");
            for(int i=0;i<10;i++)
              {
               PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i,
               TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS),
               rates[i].open,rates[i].high,rates[i].low,rates[i].close,
               rates[i].tick_volume,rates[i].spread,rates[i].real_volume);
              }
           }
         else
            PrintFormat("CopyRates failed, error code=%d",GetLastError());
      //--- ログの例
      /*
                          [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
         [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295         18110       10   17300175000
         [1] 2016.11.09 05:00:00 1.12296 1.12825 1.11930 1.12747         17829        9   15632176000
         [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744         13458       10    9593492000
         [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194         15362        9   12352245000
         [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172         16833        9   12961333000
         [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052         15933        8   10720384000
         [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528         11888        9    8084811000
         [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915          7284       10    5087113000
         [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904          8710        9    6769629000
         [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263          8956        7    7192138000
         Check
         [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
         [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000 
         [1] 2016.11.09 05:00:00 1.12296 1.12825 1.1193 1.12747 17829 9 15632176000 
         [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000 
         [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000 
         [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000 
         [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000 
         [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000 
         [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000 
         [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000 
         [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 
      */
      

    2. S1=S2+S1のように文字列の加算する際のエラーを修正しました。
    3. ArrayResize関数の動作が変更されました。reserve_sizeパラメータとして-1が渡された場合、この関数は配列サイズを増やさない場合にのみ未使用(予約済み)メモリを解放します。reserve_size=-1で新しい配列サイズを0に設定することはArrayFreeを呼び出すことと同じです。この新しい動作によってMQL5プログラムのメモリ使用量が最適化できます。
      void OnStart()
        {
         int arr[];
      //--- 最初に使用されるメモリの量 
         Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      //--- サイズ1の配列に使用されたメモリ量(リサーブ(予備)あり)
         ArrayResize(arr,1,1024*1024);
         Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      //--- 予備があるため、使用されたメモリの量は要素数の増加後には変更されない
         ArrayResize(arr,1024*512,1024*1024);
         Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      //--- メモリサイズは配列を縮小した後にも変更されない
         ArrayResize(arr,1);
         Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      //--- 未使用メモリは予備の削除後に解放される
         ArrayResize(arr,1,-1);
         Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
        }
      

    4. チャート描画関数が標準ライブラリに追加されました。この新機能を使用するには、プロジェクトにMQL5\Include\Graphics\Graphic.mqhを含めます。

      下記はGraphPlotを使用して3つのデータ系列に基づいてチャートをプロットします。
      #include <Graphics/Graphic.mqh>
      
      double Func1(double x) { return MathPow(x,2); }
      double Func2(double x) { return MathPow(x,3); }
      double Func3(double x) { return MathPow(x,4); }
      
      void OnStart()
        {
         GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
        }
      
      
      結果:


      下記はGraphPlotを使用してデータ配列に基づいてチャートをプロットします。
      #include <Math/Stat/Binomial.mqh>
      #include <Graphics/Graphic.mqh>
      
      void OnStart(void)
        {
         double    vars[101];
         double    results[101];
         const int N=2000;
      //---  
         MathSequence(0,N,20,vars);
         MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);
         ArrayPrint(results,4);
         GraphPlot(results);
      //---
        }
      
      結果:



    5. 標準ライブラリの数学統計を扱うための関数を更新しました。MQL5バージョンとソースR言語の両方で、すべての関数の品質と精度が完全に確認されました。精度とパフォーマンスの速度の制御を可能にするために、ユニットテストが静的ライブラリとともに配布されます。これらは\MQL5\Scripts\UnitTests\Statディレクトリにあります。

      • TestStat.mq5 - 計算結果を確認するためのメインテストスクリプト
      • TestPrecision.mq5 — 計算精度のテスト
      • TestBenchmark.mq5 — コンピューティングパフォーマンス測定のテスト

    テスター

    1. この更新には、テスト中に実行遅延を設定するための高度な設定機能が加わりました。これで、遅延がない理想的なケースやカスタム遅延セットを含めたさまざまな取引条件でエキスパートアドバイザーをテストすることができます。



      以前のバージョンではランダム遅延モードのみが使用できました。

    2. 「M1ベースのOHLC」モードでのバーのティックボリュームの生成を修正しました。
    3. ヘッジモードで取引する際の注文とポジションの開始時間をミリ秒単位までで指定できるように修正しました。
    4. 「リアルチック」モードでの複数通貨または複数時間枠テストで表示される「古いチック」エラーを修正しました。
    5. 要求されたティックがディスク上にあるデータベースから読み取られる際のCopyTicksのパフォーマンス速度が向上されました。

    MetaEditor

    1. ナビゲータとツールボックスのファイルコンテキストメニューに、バージョン管理された MQL5 Storage ソースコードリポジトリを操作するためのコマンドが追加されました。




    2. リポジトリ内で1024を超えるファイルを操作する際にローカルのMQL5ストレージデータベースの整合性を壊す可能性のあったエラーを修正しました。
    3. MQL5 Storageのファイルツリーの表示を修正しました。
    4. 大量のテキストを置換した後のファイルの表示を修正しました。

    ドキュメントを更新しました。

    14 10月 2016
    MetaTrader 5 build 1445:MQL5数学関数ライブラリ

    ターミナル

    1. トレードダイアログの買、売、及び決済ボタンにツールヒントが追加されました。ツールヒントには、初心者が取引プロセスを理解するために、操作中に売買される証券に関する情報が含まれています。




    2. Trade(取引)とHistory(履歴)タブ内で注文、約定及びポジションに新しいアイコンが追加されました。




    3. 更新されたターミナルは最適化されており、板情報、板情報でのティックチャート、Time&Sales infoの表示と更新が(最高4~5倍)より速くなります。
    4. 取引時間外のティック履歴の同期が修正されました。このプロセスは、場合によっては、多量のネットワークトラフィックを消費します。

    MQL5

    1. 標準ライブラリにALGLIB数値解析ライブラリのMQL5 版が追加されました。

      ライブラリ機能

      • 線形代数
      • 線形および非線形方程式のシステム
      • 補間
      • 最適化
      • 高速フーリエ変換
      • 数値積分
      • 線形および非線形最小二乗フィッティング
      • 常微分方程式
      • 特殊機能
      • 記述統計と仮説検定
      • データ分析 - 分類、回帰
      • 多倍長演算での線形代数、補間などのアルゴリズムの(MPFRを使用した)実装

      使用法

      ALGLIBファイルは \MQL5\Include\Math\Alglibに位置します。関数を使用するには、メインライブラリファイルをお使いのプログラムに追加なさってください。

      #include <Math\Alglib\alglib.mqh>

    2. 標準ライブラリに数理統計機能が追加されました。R言語機能がMQL5で提供されるようになりました。これは、統計データ処理と解析のための最良なツールのうちの1つです。

      ライブラリ機能

      統計ライブラリには、データの統計的特性を計算するための関数や統計分布と操作のための関数が含まれています。

      • 配列要素の統計的特性を計算するための関数
      • 正規分布、対数正規分布、ベータ分布などの統計分布と操作のためのオプション

      使用法

      統計ライブラリファイルは \MQL5\Include\Math\Stat に位置します。関数を使用するには、下記の例が示すように、必要な関数を含むファイルをお使いのプログラムに追加します。

      #include <Math\Stat\Binomal.mqh>
      #include <Math\Stat\Cauchy.mqh>
      
      
      

      ライブラリ関数の詳細はStatistical Distributions in MQL5 - Taking the Best of R(MQL5での統計的分布 - Rの活用)稿で説明されています。


    3. 標準ライブラリにファジィライブラリのMQL5 版が追加されました。ファジィライブラリはマムダニ及び菅野ファジィ推論法を実装します。

      ライブラリ機能

      • 13のメンバーシップ関数
      • ファジィシステムルールを開発するための柔軟なフォーム
      • マムダニ<ファジィ推論法
      • 菅野ファジィ推論法
      • 5つのマムダニシステムの非ファジィ化メソッド
      • 無制限の量の入力/出力変数

      使用法

      ファジィライブラリファイルは\MQL5\Include\Math\Fuzzyに位置します。関数を使用するには、下記の例が示すように、必要な関数を含むファイルをお使いのプログラムに追加します。

      #include <Math\Fuzzy\mamdanifuzzysystem.mqh>
      #include <Math\Fuzzy\sugenofuzzysystem.mqh>
      
      
      

      ライブラリの詳細はコードベースのファジィ - ファジィモデル開発のためのライブラリで参照できます。


    4. 新しいCHART_QUICK_NAVIGATIONプロパティが、チャートのナビゲーションバーの迅速な有効/無効化を可能にします。プロパティの状態を変更/アクセスする必要がある場合にはChartSetInteger及びChartGetInteger関数が使用されます。




      ナビゲーションバーは、Enterキーまたはスペースキーを押すことによって開かれます。チャート上での指定した日付への迅速な移動だけでなく、銘柄と時間枠の切り替えも可能です。お使いのMQL5プログラムがEnterキーまたはスペースキーの押下を処理する場合は、ターミナルによるこれらのイベントの傍受を避けるために CHART_QUICK_NAVIGATIONプロパティを無効になさってください。クイックナビゲーションバーは、ダブルクリックでも開くことができます。

    5. FileLoad及びFileSave関数が追加されました。これらは、ファイルの読み取りおよびファイルへに配列を保存する簡単な方法を提供します。FileRead*やFileWrite*と異なり、これらの関数は指標ハンドルを必要としません。FileLoadとFileSaveは数値型の配列ならびに文字列、動的配列やクラスオブジェクトを持たないシンプルな構造体の配列と動作します。
      long  FileLoad(
         const string filename,      // [in] ファイル名
         void         &buffer[],     // [out] ファイルが読み込まれる配列
         uint         common_flag=0  // [in] 0 - 端末のFilesフォルダでファイルを探す、FILE_COMMON - 端末の共通ディレクトリでファイルを探す
         );
      
      bool  FileSave(
         const string filename,      // [in] ファイル名
         const void   &buffer[],     // [in] ファイルが保存される配列
         uint         common_flag=0  // [in] 端末のFilesフォルダでファイルを作成する、FILE_COMMON - 端末の共通ディレクトリでファイルを作成する
         );
      
      
      ファイルにティックを書き込んでから読み取るメソッドの例:
      //--- 入力パラメータ
      input int      ticks_to_save=1000; // ティック数
      //+------------------------------------------------------------------+
      //| スクリプトプログラム開始関数                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         string  filename=_Symbol+"_ticks.bin";
         MqlTick ticks[];
      //---
         int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save);
         if(copied!=-1)
           {
            PrintFormat(" CopyTicks(%s) copied %d ticks",_Symbol,copied);
            //--- ティック履歴が同期されている場合はエラーコードは0に等しい
            if(!GetLastError()==0)
               PrintFormat("%s: Ticks are not synchronized. Error=",_Symbol,copied,_LastError);
            //---  ファイルにティックを書き込む
            if(!FileSave(filename,ticks,FILE_COMMON))
               PrintFormat("FileSave() failed, error=%d",GetLastError());
           }
         else
            PrintFormat("Failed CopyTicks(%s), Error=",_Symbol,GetLastError());
      //--- ファイルにティックを読み返す
         ArrayFree(ticks);
         long count=FileLoad(filename,ticks,FILE_COMMON);
         if(count!=-1)
           {
            Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags");
            for(int i=0;i<count;i++)
              {
               PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x",
               TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000,
               ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags);
              }
           }
        }
      
      

    6. DRAW_CANDLES描画モードを使用したカスタム指標の表示を修正しました。このモードでは1つから3つの色を設定することが可能です。ローソク足の表示は設定されている色の数に依存します。

      1色のみが指定されている場合はチャートのすべてのローソク足はこの色で塗られています。
      //--- 同じ色で塗られたローソク足 
      #property indicator_label1  "One color candles"
      #property indicator_type1   DRAW_CANDLES
      //--- 1色のみが設定されたのでローソク足の色はすべて同じ
      #property indicator_color1  clrGreen  
      
      
      2色が指定された場合は1番目の色がローソク足の輪郭、2番目が実体に適用されます。
      //--- ローソク足の実体の色は髭の色と異なる
      #property indicator_label1  "Two color candles"
      #property indicator_type1   DRAW_CANDLES
      //--- ローソクの輪郭と髭は緑で実体は白
      #property indicator_color1  clrGreen,clrWhite 
      
      
      3色が指定された場合は1番目の色がローソク足の輪郭、2、3番目の色が強気/弱気ローソク足の実体に適用されます。
      //--- ローソク足の実体の色は髭の色と異なる
      #property indicator_label1  "One color candles"
      #property indicator_type1   DRAW_CANDLES
      //--- ローソクの輪郭と髭は緑、強気ローソク足の実体は白、弱気ローソク足の実体は赤
      #property indicator_color1  clrGreen,clrWhite,clrRed
      
      
      DRAW_CANDLESスタイルはカスタムキャンドル着色を可能にします。また、すべての色はPlotIndexSetInteger function (composition_index_DRAW_CANDLES, PLOT_LINE_COLOR, modifier_index, color)関数を使用してインディケータの動作中に動的に変更することができ、ここでmodifier_indexの持つ値は次のいずれかです。
      • 0 – 輪郭と髭の色
      • 1 – 強気ローソク足の実体の色
      • 2 – 弱気ローソク足の実体の色
      //--- 輪郭と髭の色の設定
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
      //--- 強気ローソク足の実体の色の設定
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen);
      //--- 弱気ローソク足の実体の色の設定
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
      
      
    7. CopyTicks関数を使ったティック履歴操作がバグの修正とともに改善されました。
    8. この新しいビルドでは、インターフェイスでの演算子の使用が可能になりました(以前は不可能)。

    マーケット

    1. マーケットからの製品購入の際の繰り返したMQL5.communityへのサインインリクエストの原因となっていたエラーを修正しました。

    テスター

    1. UIのギリシャへ語、マレー語とヘブライ語への翻訳を追加しました。

    ドキュメントを更新しました。

    29 9月 2016
    メタトレーダー5 ウェブ・プラットフォームがより速くより便利に
    1. Market Watch(気配値表示)と価格チャートウィンドウなどのWebアプリケーションブロックのサイズを変える機能が追加されました。
    2. Toolbox (ツールボックス)ウィンドウのTrade(取引)とHistory(履歴)タブ内で列をソートする機能が追加されました。列の幅の変更も可能です。
    3. Details(詳細)タブと素早く銘柄を追加する機能が追加されました。
    4. コードの最適化によってウェブターミナルの動作速度を全体的に上げました。アカウントの初期化、銘柄の追加、そして取引自体がより高速に実行されるようになりました。


    16 9月 2016
    MetaTrader 5 build 1430: Exposureタブの更新

    ターミナル


    1. 株式市場の為の『資産』タブを形成する新しいアルゴリズムが実装されました。今後は、ターミナルは取引口座に使用されているリスク管理システムに応じて資産の表示を行います(リテールFX、先物または取引モデル)。

      『資産』セクションは、取引所でFXまたは先物取引をする方が、 市場での自分の現在の状況を理解するのに役立ちます。同じ通貨が様々なツールで見られます(通貨ペアのうちの1つとしてや基礎通貨としてなど)。例とし て、GBPUSD、USDJPY、GBPJYで多方向にポジションを保有することができます。この状況において、最終的にどの通貨をいくつ保有していて、 保有する必要があるのかを理解するのは非常に問題です。もっと難しいのは、このようなポジションが3つどころか、遥かに多く保有している場合です。このよ うな状況の口座の最終的な状態は、『資産』タブで簡単に参照することができます。
      これらの3つのポジションでの例を見てみましょう:

      Buy GBPJPY 1 lot at 134.027 — 100 000 GBPを買い、134 027 000 JPYを売りました
      Sell USDJPY 1 lot at 102.320 — 100 000 USDを売り、102 320 000 JPYを買いました
      Sell GBPUSD 1 lot at 1.30923 — 100 000 GBPを売り、103 920 USDを買いました

      私 達は同時に100 000 GPBを買い、売りました。合計としてGBPが0の場合、『資産』タブはこの通貨を表示しません。この場合ではUSDを売り、別の時に買いました。証拠金 通貨はUSDなので、資産タブは現在の残高で計算し合計をします。JPYは2つの取引に入っているので、タブも合計値を表示します。




      このセクションは取引モデルに沿って取引をする方が、資金の運用法を理解するのに役立ちます。前のモデルとの違いは、取引実行 時に資金がすぐに引き落とし/入金される点です。例えば、EURRUBの購入時にすぐにユーロを取得し、残高からは相当する額のルーブルが引き落とされま す。取引時に口座残高はマイナスになることがあります(借りている資金で取引を行っている場合に、補てんに取得した資産が使われる)。このような場合『資 産』タブで、口座の取引状況を簡単に理解することができます。

      ここでは追加でリクイディティ価格(口座上の資金の合計や市場価格による現在のポジション決済の価格/結果)が表示されます。





    2. 取引操作履歴での取引タイプの表示エラーを修正しました。
    3. 取引口座への再接続時にリスクに関する通知ウィンドウが再表示されるエラーを修正しました。
    4. 多数のシンボル(数千またはそれ以上)がある場合の取引銘柄の選択ダイアログの動作が修正および最適化されました。
    5. 移動平均をベースに計算を行う内蔵インディケータ(Bollinger Bands、Adaptive Moving Averageなど)のレベル表示が修正されました。サブウィンドウでインディケータを表示した際にエラーが発生していました。
    6. いくつかのケースで先物取引の発注を行うことができなくなるエラーを修正しました。注文価格が取引価格の上限/下限価格と一致する場合にエラーが発生していました。

    MQL5

    1. MQL5プログラムのコンパイルが高速化および最適化されました。
    2. クラス、構造体、関数の為のfinalとoverrideの修飾子のサポートが追加されました。

      クラスと構造体の為のfinal修飾子
      final 修飾子は、クラスまたは構造体の宣言時にそこからのさらなる継承を禁止します。クラス(構造体)がそこへ更なる変更を加える必要がないものである、または セキュリティ上の理由で変更が許可されていない場合は、それをfinal修飾子で宣言してください。また、全てのクラスのメソッドも暗黙的にfinalと みなされます。
      class CFoo final
        {
        //--- クラス本体
        };
       
      class CBar : public CFoo
        {
        //--- クラス本体
        };
      final修飾子を使用したクラスからの継承を試行すると、上記の例で示したように、コンパイルはエラーを出します。
      cannot inherit from 'CFoo' as it has been declared as 'final'
      see declaration of 'CFoo'

      関数の為のoverride修飾子
      override修飾子は、宣言される関数は必ず親クラスのメソッドをオーバーライ ドする必要があるということを意味しています。この修飾子を使用することで、オーバーライド時のメソッドシグネチャのランダムな変更といったエラーを回避 することができます。例として、基底クラスで引数としてint型変数を取るfuncメソッドを定義します。
      class CFoo
        {
         void virtual func(int x) const { }
        };
      次にメソッドを派生クラスでオーバーライドします:
      class CBar : public CFoo
        {
         void func(short x) { }
        };
      しかしエラーによって引数の型がintからshortに変わります。実際には、このような場合、オーバーライドではなくメソッドのオーバーロードが起こります。オーバーロードされた関数定義のアルゴリズムに従い、特定のケースにおいてコンパイラがオーバーライドされたメソッドの代わりに基底クラスで定義されたメソッドを選択することがあります。

      このようなエラーを回避する為には、明示的にオーバーライドメソッドにoverride修飾子を追加する必要があります。
      class CBar : public CFoo
        {
         void func(short x) override { }
        };
      オーバーライド時にメソッドシグネチャが変更された場合、コンパイラは親クラスで全く同じシグネチャを見つけることができず、コンパイルエラーを出します。
      'CBar::func' method is declared with 'override' specifier but does not override any base class method

      関数の為のfinal修飾子

      final修飾子は逆に、派生クラスでのメソッドのオーバーライドを禁止します。メソッドの実装が十分であり、完全に禁止されている場合、派生クラスで変更されないようにするためにfinal修飾子を使って宣言してください。
      class CFoo
        {
         void virtual func(int x) final { }
        };
       
      class CBar : public CFoo
        {
         void func(int) { }
        };
       
      final修飾子を使用したメソッドのオーバーライドを試行すると、上記の例で示したように、コンパイルはエラーを出します。
      'CFoo::func' method declared as 'final' cannot be overridden by 'CBar::func'
      see declaration of 'CFoo::func'
    3. デフォルトのパラメータを持つテンプレート関数のコンパイルエラーを修正しました。

    マーケット

    1. マーケットの製品のソートにおける一連のエラーを修正しました。

    テスター

    1. ビジュアルテストモードでの保有注文/ポジションの現在の市場価格の更新を修正しました。
    2. 取引銘柄でのテスト時のBuy LimitとSell Limit注文実行のスリッページが削除されました。
    3. いくつかのケースで『始値のみ』モードで、間違った価格が生成されていたエラーを修正しました。
    4. テスト時のOnTradeTransactionイベントの形成が修正されました。
    5. リアルティックに基づくテストの際に、既存の分足バーのlowまたはhighの数値とティック価格(bidかlastかはどの価格にバーが形成されているかによる)の不一致についての情報がテスターの操作ログに表示されます。

    メタエディター

    1. ソースコードのファイル上のデータプロファイリングの表示エラーが修正されました。

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

    19 8月 2016
    MetaTrader 5 build 1395:取引操作のスピードアップとビジュアルテストの改良

    ターミナル

    1. クライアントターミナルでの取引コマンドの送信が最適化され、大幅にスピードアップしました。
    2. Windows 10(build 1607)の32bit版での動作時にターミナルでMQL5プログラムの実行ができないエラーが修正されました。
    3. ナビゲーターに取引口座の動作モード(両建機能取引またはネッティング取引)の表示が追加されました。
    4. 選択した口座でウェブターミナルへ接続する為のコンテキストメニューのコマンドがナビゲーターに追加されました。
    5. 『ヘルプ』メニューが再編され、チュートリアルビデオのリンクが追加されました。
    6. 高解像度の画面での動作時の一連のインターフェイスのエラーを修正しました。
    7. ユーザーインターフェイスのペルシャ語の翻訳の誤りを修正しました。

    MQL5

    1. 抽象オブジェクトのコレクションを作成する'void *'ポインタが追加されました。このタイプの変数に任意のクラスのオブジェクトへのポインタを格納することができます。
      逆変換にはdynamic_cast<クラス名 *>演算子(void *ポインタ)を使用することをお勧めします。キャストができない場合、結果はNULLとなります。
      class CFoo { };
      class CBar { };
      //+------------------------------------------------------------------+
      //| Script program start function                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         void *vptr[2];
         vptr[0]=new CFoo();
         vptr[1]=new CBar();
      //---
         for(int i=0;i<ArraySize(vptr);i++)
           {
            if(dynamic_cast<CFoo *>(vptr[i])!=NULL)
               Print("CFoo * object at index ",i);
            if(dynamic_cast<CBar *>(vptr[i])!=NULL)
               Print("CBar * object at index ",i);
           }
         CFoo *fptr=vptr[1];  // ポインタを与えるエラー、vptr[1]はCFooオブジェクトではありません
        }
      //+------------------------------------------------------------------+
    2. インデックスの文字列からシンボルを取得する、文字列の為の[ ]演算子のサポートが追加されました。指定したインデックスが文字列の範囲外である場合、結果は0となります。
      string text="Hello";
      ushort symb=text[0];  // シンボル'H'のコードを返します
      
    3. INIT_SUCCEEDED (0)またはINIT_FAILED(もしくは任意のゼロの値)のコードを返す、int OnTesterInit(void)シグネチャを伴うTesterInitイベントハンドラの第二バージョンが追加されました。 OnTesterInitがゼロを返す場合、最適化は開始されません。
    4. ChartGetString関数の異なる負荷が異なる結果をもたらしていたエラーを修正しました。

    テスター

    1. ビジュアルテストの為の追加コマンドとホットキーが追加されました。これからはビジュアルテストのチャートをターミナルでも調整することができます(色の変更、各種項目の表示の管理、テンプレートの使用など)。




    2. 『始値のみ』モードでのSleep機能の動作が修正されました。
    3. W1やMN1の時間軸での動作時にバーの不正なステータスの形成をもたらしていたエラーを修正しました。

    メタエディター

    1. ユーザーインターフェイスの翻訳に繁体中国語が追加されました。

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

    15 7月 2016
    MetaTrader 5 build 1375:取引フィードとテスト時のティックへのアクセス

    ターミナル

    1. 板注文画面に時刻と出来高が追加されました。




      時刻と出来高とは
      リアルタイムモードの時刻と出来高では、取引所で行われる全ての取引の一覧が反映されます。取引ごとにそ の実行時間、方向(買い/売り)、価格、質量が表示されます。視覚的分析をしやすくする為に、取引の各方向は別々の色で表示されます(青は買い、ピンクは 売り、緑は不確定のもの)。取引の質量はヒストグラムとしても表示されます。

      時刻と出来高の表示で市場を読む
      時刻 と出来高の表示によって、市場をより詳細に分析することができます。時刻と出来高の表示では取引の方向を、その取引の実行者(買い手または売り手)である トレーダーに知らせます。実行取引の質量によって、これが大口であるか小口であるかやその活動性など、市場参入者の動向を知ることができます。特定の価格 条件下での取引実行速度とその質量では、それらの条件の重要性を結論付けることができます。

      データの使用方法
      表の視覚的分析の他に、取引ごとにデータをCSVファイルへアップロードすることができます。それから、そのデータをMS Excelなどの他のソフトウェアを使用して分析することができます。ファイル中の全てのデータはカンマで区切られます。
      Time,Bid,Ask,Last,Volume,Type
      2016.07.06 16:05:04.305,89360,89370,89370,4,Buy
      2016.07.06 16:05:04.422,89360,89370,89370,2,Buy
      2016.07.06 16:05:04.422,89360,89370,89370,10,Buy
      2016.07.06 16:05:04.669,89360,89370,89370,1,Buy
      2016.07.06 16:05:05.968,89360,89370,89360,7,Sell
      ファイルへデータを保存するには、コンテキストメニューを開いてください。



      取引の方向を正確に識別する為には、ブローカーの取引プラットフォームをバージョン1375にアップデートする必要があります。
    2. ティック取得/板注文画面の変更とOnTickおよびOnCalculateの入力ポイントの呼出の間の時間が大幅に短縮されま した。また、取引状態の変更イベントの取得とOnTradeおよび OnTradeTransactionの入力ポイントの呼出の間の時間が短縮されました。したがって、MQL5プログラムはより素早く市場イベントに反応 することができます。
    3. SSL証明書を使用した拡張認証利用時の取引リクエストの送信が早くなりました。
    4. ユーザーインターフェイスがペルシャ語へ翻訳されました。
    5. 両建モード動作時のチャートのコンテキストメニューのストップロス/テイクプロフィットの設定コマンドの表示が修正されました。

    テスター

    1. CopyTicks関数を使用したテスト時に、ティックヒストリーをリクエストする機能が追加されました。以前はこの関数はストラテジーテスターでは動作しませんでした。

      • 『全ティック』モードでは、関数は生成されたティックの履歴を返します。128000までの最新のティックをリクエストすることができます。
      • 『リアルティックに基づいたすべてのティック』モードでは、関数はリアルティックの履歴を返します。リクエストするデータの深度は、 そのデータの可用性にのみ制限されます。しかし、128000の最新ティックは、ストラテジーテスターによってキャッシュされ、これらのデータのリクエス トは迅速に実行される点についてご注意ください。より深い履歴は、ハードディスクから直接リクエストされるため、リクエストの実行には遥かに多くの時間が かかります。
      • 『始値のみ』と『1分足OHLC』モードでは、ティックヒストリーが作成されない為、関数は以前と同様に動作しません。

    2. ミリ秒のサポートが追加されました。以前のストラテジーテスターでは、時間量は1秒でした。

      • これからは、EventSetMillisecondTimerとSleep関数は、ストラテジーテスターでより正確に動作します。
      • 多通貨エキスパートアドバイザのテスト時のティックの供給精度が向上しました。以前は1秒に複数のティックが入る(分バーのティック ボリュームが60以上)場合、それらの全てに同じ時間がセットされていました。単一通貨エキスパートアドバイザのテスト時には、ティックはエキスパートア ドバイザに直接引き渡されるので、これは特に意味を持ちません。しかし、いくつかの通貨ペアのテスト時には、どの通貨ペアから最初にティックが入ったかを 知ることは重要です。以前は各シンボルごとにティックがエキスパートアドバイザに直接引き渡されていました(初めに1つのシンボルごとに全ての1秒の ティックが、それからもう1つのシンボルの全てのティックが)。これからはティックはミリ秒を考慮し引き渡されます。

        リアルティックでのテスト時には、ミリ秒はソースティックデータから取得されます。ティックの生成時、ミリ秒のセットはティックボリュームに応じて行われます。例えば、3つのティックが1秒に納まる場合、000、333、666ミリ秒がセットされます。

    3. 『始値のみ』や『1分足OHLC』モードでの未決注文やストップロス/テイクプロフィット注文の実行が、実行時の現在価格ではな く、リクエストした価格で実行されるようになりました。正確なモード(全ティックやリアルティック)で使用する市場価格で実行するアルゴリズムは、精度の 低いモードには適していません。中間ティックは生成されない為、注文のリクエスト価格と実行時の市場価格(始値またはOHLC)との差は重要になります。 『始値のみ』と『1分足OHLC』モードでのリクエスト価格による注文の実行は、正確なテスト結果を与えます。

    4. ビジュアルモードでのフォワードテストのサポートが追加されました。これからは、バックテストやフォワードテストの為に、様々な期間におけるエキスパートアドバイザの動作結果の比較をしやすくする、ビジュアルテストの2つの別々のウィンドウが開きます。




      フォワードテストのウィンドウは、主要期間のテストが完了した後にのみ表示されます。

    5. テストチャート上に証拠金維持率の代わりに、資金(margin/equity)に対する証拠金率として計算される証拠金への負荷が出力されます。


    6. テスト時の年率での手数料の計算が修正されました。

    7. テストの過程で作成されるチャート上の残高の計算および表示が修正されました。

    MQL5

    1. 注文の発注、変更、キャンセル時のOrderSend関数の動作が変更されました。変更は外部の取引システムへの注文の出力時にの み適用されます。以前は、OrderSend関数の制御は、ブローカーサーバーでの注文の配置(処理)が成功した後に返されていました。これからは、制御 はブローカーサーバーが外部取引システムから、そこで注文が正常に配置されたという通知を受け取った後にのみ返されます。

      以下の図では、関数の以前(赤の矢印)と現在の動きを概略図として表しています。




    2. MqlTradeResult取引結果の構造に、外部取引システムのエラーコードの欄retcode_externalが追加され ました。これらのエラーの種類と使用は、ブローカーや取引操作が送信される外部取引システムに依存します。例えば、モスクワ証券取引所で実行される retcode_external値は、DGCX(ドバイ金商品取引所)のものとは異なります。

    3. ENUM_CHART_PROPERTY_STRING列挙にCHART_EXPERT_NAMEと CHART_SCRIPT_NAMEプロパティが追加されました。これからは、ChartGetString関数を使用して、エキスパートアドバイザまた はchart_idパラメータで定義されたチャートに取りつけられたスクリプトの名前を判別することができます。

    シグナル

    1. いくつかのケースで反対ポジション(close by)の決済操作がコピーされなかったエラーが修正されました。
    2. RUBとRURを含む通貨ペアの自動比較が改善されました。

    マーケット

    1. 製品カテゴリーごとの並び替えが修正されました。

    メタエディター

    1. 置換えダイアログを開く際の、置換えテキストフィールドのフォーカス設定が修正されました。
    2. 現在の位置から上に検索をする場合のテキストの複数の置換が修正されました。
    ドキュメントが更新されました。

    5 7月 2016
    MetaTrader 5ウェブプラットフォーム:公式リリースが行われました

    公開テストから2か月後、MetaTrader 5マルチマーケットプラットフォームのウェブバージョンが公式にリリースされました。これはあらゆるOSのあらゆるブラウザから、金融市場取引が行えるものです。また、コンピュータにプログラムをインストールする必要がなく、任意のウェブブラウザとインターネット接続があれば十分です。

    アプリケーションは、ウェブソリューションのクロスプラットフォーム性と利便性を備え、デスクトップ版プラットフォームの主要な利点(スピー ド、マルチマーケット性、取引機能の拡張)を持つものです。リリースバージョンの重要な革新は、市場の深さを見ることができ、ワンクリックで成行/指値注 文を発注することができる板注文画面です。

    ウェブプラットフォームによって、デスクトップ版と同様に取引操作を行ったり、テクニカル分析を行うことができます。アプリケーションで利用できるもの:

    • 両建て取引機能
    • 30種類のテクニカルインディケータ
    • 24種類の分析オブジェクト
    • ワンクリック取引と取引注文のフルセット
    • 世界の41言語のプログラムインターフェイス
    13 5月 2016
    MetaTrader 5プラットフォームの新バージョンbuild 1340:モバイルへの便利な証明書の移動とテスターの改善

    ターミナル

    1. 高度なセキュリティモードへ接続する為の、デスクトップターミナルからモバイルターミナルへの証明書の移動が快適になりました。

      取 引プラットフォームには拡張認証がサポートされています。パスワードに加えて、口座は特別なSSL証明書によって保護されています。証明書は、口座の為に 取引サーバーで生成されたファイルです。このファイルは固有のものであり、これなしで口座へ接続することはできません。

      以前は、もし証明書がデスクトップターミナルを通じて要求および生成された場合、iPhone/iPadまたはAndroidでMetaTrader 5の口座を使用するには、そのファイルを手動でデバイスへ移動し、それからインストールする必要がありました。これからは証明書は快適に移動されます。

      どのように移動が行われるか
      証明書の移動は取引サーバーを介して行われます。

      • はじめに証明書はデスクトップターミナルで暗号化されます。口座の所有者は、証明書が安全なアルゴリズムAES-256を使用して暗号化されるパスワードを指定します。このパスワードはユーザーのみが知り得るもので、サーバーには送信されません。
      • 次に暗号化された証明書は、モバイルターミナルを介して取得されるまでの間(1時間以内)保存される取引サーバーに送信されます。
      • 証明書の取得の為には、ユーザーはモバイルターミナルを介して口座へ接続する必要があります。接続後すぐに証明書のインポートが提案されます。この為には、デスクトップターミナルで暗号化されたパスワードを入力する必要があります。

      証明書の移動は安全に行われます。取引サーバーは中間ストレージとして使用され、暗号化はクライアント側で行われ、証明書のパスワードは送信されたり、取引サーバーに保存されることはありません。

      証明書の移動方法
      デスクトップターミナルで口座へ接続し、コンテキストメニューの『証明書の移動』を選択してください。



      あなたが指示したことを承認する為に、口座のマスターパスワードを入力してください。次に、サーバーへの送信前に証明書が保護されるパスワードを設定してください。パスワードは8桁以上である必要があります。

      サーバーへの証明書の送信が成功した後、モバイルターミナルを開き口座へ接続してください。するとすぐに証明書のインポートを求められます。同意をして、デスクトップターミナルで指定したパスワードを入力してください。



      インポートした証明書は、『プログラムについてー証明書』で表示することができます。
      証明書の移動がサポートされた、iPhone/iPadまたはAndroid版MetaTrader 5モバイルターミナルは、近日リリースされます。

    テスター

    1. より正確なテストの為に、指値注文やストップロス/テイクプロフィット注文の実行および作動アルゴリズムが変更されました。ビジュアルテストの機能が拡張されました。

      株式商品に対して何が変わったのか
      実 際の市場では、株式商品のチャートの構築と注文の実行は、取引の終値(Last)で行われます。リミットオーダーの作動は、Bid/Ask価格で行われま す。全てのタイプの注文は、常に現在のBid/Ask価格で行われます。より実際の条件に近づけるようにストラテジーテスターに変更が加えられました。
        以前
      現在
      作動 Bid/Askによる全てのタイプの指値注文とストップロス/テイクプロフィット
      Bid/Askによるリミットオーダー
      Lastによるストップ、ストップリミット、ストップロス/テイクプロフィット注文
      実行 注文で指定された価格による全てのタイプの指値注文とストップロス/テイクプロフィット
      作動時のBid/Ask価格による全てのタイプの指値注文とストップロス/テイクプロフィット

      Si-6.16での例を見てみましょう。現在価格が、Bid=72570、Ask=72572、Last=72552で、バイストップオーダーが72580で発注されました。価格変動で新しい現在価格は、以下のようになりました。

      • Bid=72588
      • Ask=72590
      • Last=72580


      株式商品では、ストップオーダー作動のトリガーはLast価格です。従って、Last価格が72580になったことで、バイストップオーダーが有効になり ました。以前では、この72580という価格は、この注文の実行に使用されました。買い操作の実行の為のAsk=72580という価格は市場にはないの で、このような動作は正しくないものでした。


      更新されたテスターでは、現在の買い価格はAsk=72590で、バイストップオーダーはこの価格で実行されます。このように、テスターの新しい取引実行 アルゴリズムは、より正確に実際の市場に対応しています。以前のアルゴリズムでは、取引操作は非市場価格で実行され、不正確なテスト結果に繋がっていたこ とでしょう。

      株式商品以外に対しては何が変わったのか
      株式以外の商品に対しては、アルゴリズムは以前のまま作動し ます。全てのタイプの指値注文とストップロス/テイクプロフィットにBidとAsk価格を使用します。実行モードが変更されました。以前は注文で指定され た価格で行われていましたが、これからは注文作動時の現在のBidとAsk価格が使用されます。

      ビジュアルテストの新しい機能
      ビ ジュアルテストでは、これからはバーのAskの最大価格とBidの最小価格のラインが表示されます。このようなチャートでは、バーの構築と注文の作動が Last価格で行われ、注文の実行はBidやAsk価格で行われる、株式商品でのエキスパートアドバイザーのテストが簡単になります。



      ビジュアルテストのチャートには、指定した日付へのナビゲーションの機能が登場しました。チャート上でダブルクリックをし、必要な日付と時間を指定してく ださい。また、チャートはあらゆる注文や取引に移動させることができます。取引操作の『取引』、『履歴』または『操作』でダブルクリックをしてください。
    2. テスター:テスター起動前の価格/ティックヒストリーのダウンロードのジャーナルが拡張されました。これからは、操作ログには履歴のダウンロードの終了、ダウンロードデータのボリュームとダウンロードにかかった時間が表示されます。
      2016.05.10 12:47:53    Core 1    5.10 Mb of history processed in 0:00.842
      2016.05.10 12:47:53    Core 1    GBPUSD: history synchronization completed [5225 Kb]

    MQL5

    1. いくつかのケースでCopyTicks関数が要求したものよりも少ないティックを返すエラーを修正しました。
    2. テンプレート関数生成のエラーを修正しました。
    3. ドキュメントが更新されました。

    クラッシュログで報告された不具合を修正しました。

    12 5月 2016
    MetaTrader 5ウェブプラットフォーム:β版のテストができます

    トレーダーからの多数の要望により、MetaTrader 5取引プラットフォームのウェブ バージョンが開発されました。新製品はスピード、マルチマーケット性、取引機能の拡張といったデスクトップ版『5』の利点を持つ、ウェブプラットフォーム の利便性とクロスプラットフォーム性を兼ね備えたものとなっています。

    MetaTrader 5ウェブプラットフォームがMQL5.communityのサイトで利用可能になり、あらゆるOS(Windows、Mac、Linux)のあらゆるブラウザから金融市場取引を行うことができるようになりました。プログラムをインストールする必要はなく、インターネット接続があれば十分です。

    β版でトレーダーがすぐに利用できるもの:

    • 両建て取引機能
    • 30種類のテクニカルインディケータ
    • 24種類の分析オブジェクト
    • MetaTrader 5の取引注文のフルセット
    • 41言語のインターフェイス
    β版のリリースは幅広い公開テストを提供し、トレーダーが新しい機能を評価することができるようにするという目的を持っています。
    22 4月 2016
    MetaTrader 5 build 1325:ヘッジ取引と実際のティックによるテスト

    ターミナル

    1. リテールFXの可能性を拡大する為に、プラットフォームに2つ目の計算システムであるヘッジングが追加されました。これからは、シンボルごと に、反対方向のものを含む、多数のポジションを持つことができます。これによって、いわゆる『ロック』を使った取引戦略を実装することができ、つまり、も し価格がトレーダーに反する方向へ向かった場合、反対方向にポジションを開くことができます。

      新しい計算システムは、MetaTrader 4で使用されているものと同様なので、トレーダーに馴染みのあるものです。また、トレーダーは、複数の取引の実行(部分的なものも含む)や、MQL5 Cloud Networkのサポートを持つ多通貨・マルチスレッドテスターなど、第五世代プラットフォームの全ての長所を使用することができます。

      これからは、一つのシンボルにつき一つのポジションしか持つことができない、ネッティングを使用しているアカウントと同じアカウントで、株式取引を行うことができます。また、同じプラットフォームの他のアカウントで、FX取引やヘッジングを使用することもできます。

      ヘッジアカウントの取得方法とポジション計算タイプの参照場所
      ポジション計算のタイプはアカウントレベルで設定され、これはターミナルウィンドウのヘッダやログに表示されます。



      ヘッジングのデモアカウントを開設する為には、対応するオプションを有効にしてください。



      ネッティングシステム
      この計算システムは、アカウント上では一度に1つのシンボルにつき1つのポジションのみ開くことができるということを念頭に置いています。

      • ポジションを持っている場合、同じ方向での取引実行時にこのポジションのボリュームを増加させます。
      • 逆方向に取引が実行された場合、既存のポジションのボリュームを小さくし、これを閉じたり(現在のポジションボリュームと等しいボリュームでの取引実行時)反転させます(もし反対方向の取引のボリュームが現在のポジションよりも大きい場合)。

      この時、どのようなアクションの結果、反対方向に取引が行われるかや、市場の注文や指値注文の実行の結果は重要ではありません。

      以下に、0.5ロットのボリュームでのEURUSDの二つの買い取引の実行例を引用しました。


      これらの取引の実行結果は、1ロットのボリュームの1つの共通ポジションになりました。

      ヘッジングシステム
      この計算システムはアカウントに、同じシンボルに対し反対方向のものを含む、複数の取引ポジションを持つことを可能にします。

      取引シンボルに開いているポジションがあり、トレーダーが新しい取引を実行する(または指値注文が作動する)場合、新しいポジションが開かれます。既存のポジションは変化しません。

      以下に、0.5ロットのボリュームでのEURUSDの二つの買い取引の実行例を引用しました。


      これらの取引が実行された結果、2つの別個のポジションが開かれました。

      新しい取引操作タイプ Close By
      ヘッ ジングポジション計算のアカウントの為に、反対のポジションを閉じる新しいタイプの取引操作が追加されました。この操作によって、同じシンボルでの反対方 向の2つのポジションを同時に閉じることができます。もし相対するポジションが様々なロット数を持っている場合、2つのうちの1つの注文のみが開いたまま 残ります。このボリュームは、2つのクローズポジションのロット差と等しくなり、ポジションの方向とオープン価格は、クローズポジションのうちの(ボ リューム的に)大きい方と等しくなります。

      2つのポジションの単一のクローズと比較すると、相対クローズでは、トレーダーは1つのスプレッドを節約することができます。

      • 単一クローズの場合、トレーダーは2回スプレッドを払うことになります。より低い価格(Bid)で買いを閉じ、より高い価格(Ask)で売りを閉じます。
      • 最初のポジションを閉じる為の相対クローズでは、2つ目のポジションのオープン価格を使用し、2つ目のポジションには最初のポジションのオープン価格が使用されます。


      相対ポジションのクローズ時に、『close by』のタイプの注文が設定されます。閉じられるポジションのチケットが、コメントで指定されます。相対ポジションのペアのクローズは、『out by』タイプの2つの取引によって行われます。両方のポジションのクローズの結果によって得られる取引の利益/損失のサイズは、1つの取引でのみ指定され ます。


    2. プラットフォームのヘッジングサポートの、MetaTrader 4からのアカウントの転送機能が拡張されました。これからは、ブローカーはMetaTrader 5のアカウントを全ての操作と一緒に自動モードで転送することができます。(建玉、指値、全ての取引履歴)

      MetaTrader 4から転送されたアカウントへの最初の接続時に、ウェルカムページが表示されます。転送は安全に行われます。作業を開始する前に、以前に MetaTrader 4で使用していたアカウントのパスワードを入力し、それから新しいパスワードを設定してください。



      接続後は、MetaTrader 5で始めからアカウントを開いていたかのように通常モードで作業することができ、MetaTrader 4の全ての取引履歴は自動的に新しいアカウントに保存されます。
      インポート時に、注文とポジションのチケット(注文履歴を含む)は、MetaTrader 4の取引履歴の一つの記録は、MetaTrader 5の取引履歴の4つの記録までに相応するので保存されません。全ての取引記録には、新しいチケットが割り当てられます。

      アカウント番号は、ブローカーがインポートをする方法に応じて、保存されるか、または新しいものに置き換えられます。
    3. チャットが追加されました。これからは、取引プラットフォームで直にMQL5.communityの友人や仲間と交流することができます。チャットでは、MQL5アカウントの全ての個人メッセージが表示されます。交流の前に、チャット画面やプラットフォームの設定から自分のアカウントにログインしてください。(サービス->設定->コミュニティ)




    4. デモアカウント開設のダイアログが簡素化され、ヘッジ機能付きアカウントを開設することができるようになりました。これからは、長いアンケートを記入する必要はなく、主要データを表示し取引パラメータを選択するだけで十分です。



    5. プラットフォームを使った作業の迅速な開始の為に、デモアカウントの自動割り当てが追加されました。もし、プラットフォームにまだ一 つもアカウントがない場合、起動時に最初の利用可能な取引サーバでデモアカウントを割り当てます。開設に成功した後、アカウントはすぐに接続されます。

    6. これからは、各ポジションにはチケット(ユニークナンバー)があります。通常、ポジションが開かれた注文のチケットと一致します (サーバーでの操作の結果チケットが変更された場合を除く)。例えば、ポジションの再オープンによるスワップの加算です。ターミナルの新しいバージョンへ のアップデート後、以前に開かれたポジションには、チケットが自動的に割り当てられます。



    7. ポジションの方向転換をもたらす市場発注の際のストップロスとテイクプロフィットのレベル設定が修正されました。以前は、新しいポジションでは適切なレベルが設定されませんでした。
    8. ワンクリック注文パネルのコントロール要素で、小数点以下4桁以上を持つ価格の表示が修正されました。
    9. 印刷前のプレビューウィンドウのニュース表示のエラーを修正しました。
    10. ティックチャートの表示エラーを修正しました。
    11. ターミナルの強制終了後のマーケットデプスの開始が修正されました。
    12. ワンクリック注文パネルのコントロール要素の表示の際に、成行注文の許可のチェックが追加されました。
    13. 多数の開かれた注文やポジションがある場合の、マージンと利益の計算が最適化されました。
    14. ユーザーインターフェースのマレー語への翻訳が追加されました。
    15. マニュアルが全体的に更新されました。新しいデザイン、インタラクティブなスクリーンショット、そして内蔵されたビデオなど、これらは全てMetaTrader 5を使った取引の学習を最大限に簡単で便利なものにする為にあります。



    16. 『上からのチャート』モードでのグラフィックオブジェクトの表示が修正されました。

    テスター

    1. 取引ロボットとテクニカルインディケータの実際のティックヒストリーでのテストが可能になりました。

      実際ティックでのテストと最適化は実際の条件に最大限に近くなります。分足データをベースに生成されたものの代わりに金融商品ごとに証券会社によって収集された実際ティックが使用されます。これらのティックは、取引所や流動性プロバイダーからのものです。

      実際のティックによるテストもしくは最適化を開始する為には、ストラテジーテスターで適切なモードを選択してください。


      ティックデータは分足データよりも遥かに大きいサイズを持っています。初めにテストを起動する際には、これらのダウンロードに時間がかかる場合がありま す。ダウンロードされたティックデータは、月ごとにTKSファイル\bases\[取引サーバ名]\ticks\[シンボル名]に保存されます。

      実際ティックでのテストの特徴
      実際ティックでのテストの際には、スプレッドは分足バーの領域内で変わることがあり、その場合、1分間の中でのティックティック生成時に相応するバーで決まっているスプレッドが使用されます。

      も しシンボルによってマーケットデプスが中継される場合、バーはきっちりと最終取引(Last)実行価格で構築されます。他の場合では、テスターは初めに Lastの価格でバーを構築しようと試みますが、それがない場合にのみBid価格を使用します。そこにLast価格があったかどうかに関係なく、 OnTickの発生は全てのティックで起こります。

      チャートがLast値で構築されていたとしても、取引操作はいつもBidとAskの価 格によって行われる点にご注意ください。例えば、バーの始値を使用するエキスパートアドバイザは一つの価格(Last)に基づいてシグナルを取得します が、取引の実行は他の価格(BidまたはAsk)で行われます。『全ティック』生成モード使用時には、バーはBid価格で構築され、取引はBidやAsk 価格で実行されます。この時Askは、Bid+分足バーに相応する固定スプレッドで計算されます。

      もしシンボルの履歴に分足バーがある が、その分に対するティックデータがない場合、テスターは『全ティック』モードでティックを生成します。これによって、ブローカーに完全なティックデータ がない場合の、計画した期間中におけるエキスパートアドバイザのテストをすることが可能になります。もしシンボルの履歴に分足バーがないが、その分に対す るティックデータがある場合、これらのティックは無視されます。分足データはより信頼性が高いと考えられています。

      MQL5 Cloud Networkでの実際ティックによるテスト
      実際ティックでのテストは、ローカルやリモートエージェントだけでなく、MQL5 Cloud Networkを介しても利用することができます。数か月かかるストラテジーの最適化も、数千のコンピュータの計算能力を用いることで数時間で実行することができます。

      ネットワークを介したテストを行うには、クラウドエージェントの使用をオンにしてください。



      MQL5 Cloud Networkを介した実際ティック上でのテストでは、大量のインターネットトラフィックが転送されることがあります。これは、コンピュータネットワークの使用に対する最終コストに大きく影響を与えます。
    2. 取引シンボルの幾つかのタイプで手数料が計算されるエラーを修正しました。
    3. 対応するポジションのExpert欄の数値に応じた、SL/TPが作動した結果に起こる、取引注文のExpert欄の記入が修正されました。以前は記入されませんでした。
    4. 通常およびフォワード最適化の結果タブへの切り替えが修正されました。
    5. "Envelopes"インディケータの表示と計算が修正されました。
    6. ビジュアルテストの実行が最適化されました。
    7. 多数の開かれた注文やポジションがある場合の、マージンと利益の計算が最適化されました。
    8. 高頻度取引での取引操作の実行が最適化されました。
    9. 今後は履歴の同期は、現在の相場を必要としない、非主要シンボルのプロパティのリクエスト時に行われません。例えば、 SYMBOL_SELECT、SYMBOL_DIGITS, SYMBOL_SPREAD_FLOAT、SYMBOL_TRADE_CALC_MODE、SYMBOL_TRADE_MODE、 SYMBOL_TRADE_STOPS_LEVEL、SYMBOL_TRADE_FREEZE_LEVEL、SYMBOL_TRADE_EXEMODEな どです。以前は非主要シンボルのプロパティの任意のリクエスト時に現在のシンボルでの履歴の同期化が行われていました。
    10. 年率でのスワップ計算が修正されました。

    MQL5

    1. MQL5言語の新しい機能の追加とMetaTrader 5プラットフォームにヘッジングが登場したことに関連し、実行されるEX5ファイルのフォーマットが変更されました。以前のビルドのMetaEditor でコンパイルされた全ての古いEX5プログラムは、更新後に正常に動作するため、上位互換性は完全に確保されます。

      この時、1325以降のビルドでコンパイルされたEX5プログラムは、古いビルドのターミナルでは動作せず、下位互換性はありません。
    2. 抽象クラスと純粋仮想関数のサポートが追加されました。

      抽象クラスは、将来におけるより具体的な派生クラスを作成する一般的なエンティティを作成する為に作られています。抽象クラスは、いくつかの他のクラスの為に基底クラスとして使用することができるだけなので、抽象クラスのオブジェクトタイプを作成することはできません。

      純粋仮想関数を一つでも含むクラスは、抽象クラスとなります。したがって、抽象クラスから派生したクラスは、その純粋仮想関数を実装する必要があり、そうしないと、これらは同様に抽象クラスになります。

      仮 想関数は、純粋指定子構文を使用し、『純粋』として宣言されます。例として、共通機能を提供する為だけ型に作成されるCAnimalクラスを見てみましょ う。CAnimalのオブジェクト自体は、実際の使用には一般的すぎます。したがって、CAnimalクラスは、抽象クラスの為の良い例となります。
      class CAnimal
        {
      public:
                            CAnimal();     // 構造
         virtual void       Sound() = 0;   // 純粋仮想関数
      private:
         double             m_legs_count;  // 足数
        };
      ここでのSound()関数は、純粋仮想関数PURE(=0)の指定子で宣言されている為、純粋仮想となります。

      (=NULL)または(=0)と純粋指定子PUREが指定されている仮想関数のみが純粋仮想関数となります。抽象クラスの使用と宣言例:
      class CAnimal
        {
      public:
         virtual void       Sound()=NULL;   // PUREメソッドは派生クラスでオーバーライドする必要があり、CAnimalクラス自体は抽象クラスになり、作成されません
        };
      //--- 抽象クラスからの子孫
      class CCat : public CAnimal
       {
      public:
        virtual void        Sound() { Print("Myau"); } // PUREは再定義され、CCatクラスは抽象ではなく作成されません
       };
      
      //--- 誤用例
      new CAnimal;         // エラー『CAnimal』-コンパイラはエラー"cannot instantiate abstract class"を出します
      CAnimal some_animal; // エラー『CAnimal』- コンパイラはエラー『cannot instantiate abstract class』を出します
      
      //--- 正しい使用例
      new CCat;  // エラーはありません。CCatクラスは抽象ではありません
      CCat cat;  // エラーはありません。CCatクラスは抽象ではありません
      抽象クラス使用の制限
      純粋仮想関数(直接または間接)の抽象クラスのコンストラクタによる呼び出しの際、結果は未定義になります。
      //+------------------------------------------------------------------+
      //| 抽象基底クラス                                                     |
      //+------------------------------------------------------------------+
      class CAnimal
        {
      public:
         //--- 純粋仮想関数
         virtual void      Sound(void)=NULL;
         //--- 関数
         void              CallSound(void) { Sound(); }
         //--- コンストラクタ
         CAnimal()
          {
           //--- 仮想メソッドの明示的呼び出し
           Sound();
           //--- 暗黙的呼び出し(第三関数を介して)
           CallSound();
           //--- コンストラクタまたはデストラクタでは、常に自分の関数が呼び出されます
           //--- 仮想性や子孫を呼び出す関数に関わりません
           //--- もし呼び出される関数が純粋仮想である場合、
           //--- 呼び出しは重大な実行エラー"pure virtual function call"をもたらします
          }
        };
      しかしながら、抽象クラスのコンストラクタとデストラクタは、他のメンバー関数を呼び出すことができます。

    3. イベントモデルの構成の簡素化の為に、関数へのポインターのサポートが追加されました。

      関数へのポインターを宣言する為には、『関数へのポインター』のタイプを明確にしてください。
      typedef int (*TFunc)(int,int);
      これで、TFuncがタイプとなり、変数の関数ポインターを宣言することができます。
      TFunc func_ptr;
      func_ptr変数に、以後の呼び出しの為に、関数のアドレスを保存することができます。
      int sub(int x,int y) { return(x-y); }
      int add(int x,int y) { return(x+y); }
      int neg(int x)       { return(~x);  }
      
      func_ptr=sub;
      Print(func_ptr(10,5));
      
      func_ptr=add;
      Print(func_ptr(10,5));
      
      func_ptr=neg;           // エラー: negはint (int,int)型を持っていません
      Print(func_ptr(10));    // エラー: 二つのパラメータが存在する必要があります
      関数のポインターを保存し、パラメータとして引き渡すことができます。クラスの非静的メソッドにポインターを取得することはできません。

    4. MqlTradeRequestの取引リクエスト構造体に、二つの新しいフィールドが追加されました。

      • position — ポジションチケット。ヘッジ取引の際やポジションのクローズや変更時に、その明確な識別の為に記入する必要があります。ポジションの識別が取引シンボルの名前で行われる為、ネッティング計算システムでの取引時には、この欄の記入は意味を持ちません。
      • position_by — 相対ポジションのチケット。同じシンボルで、かつ反対方向に開かれた相対ポジションのクローズ時に使用されます。ヘッジポジション計算システムにのみ使用されます。

    5. ENUM_TRADE_REQUEST_ACTIONSの取引操作タイプにTRADE_ACTION_CLOSE_BY(相対ポジションクローズ)が追加されました。ヘッジポジション計算システムにのみ使用されます。

    6. 注文、取引、ポジションのプロパティに、取引操作に相応するチケットが追加されました。

      • ENUM_ORDER_PROPERTY_INTEGERにORDER_TICKET(注文のチケット)が追加されました。固有の番号が各注文に割り当てられます。
      • ENUM_DEAL_PROPERTY_INTEGERにDEAL_TICKET(取引のチケット)が追加されました。固有の番号が各取引に割り当てられます。
      • ENUM_POSITION_PROPERTY_INTEGERにPOSITION_TICKET(ポジションのチケット)が追加さ れました。固有の番号が各ポジションに割り当てられます。通常、ポジションが開かれた注文のチケットと一致します(サーバーでの操作の結果チケットが変更 された場合を除く)。例えば、ポジションの再オープンによるスワップの加算です。その注文によってポジションが開かれた注文を見つけるには、 POSITION_IDENTIFIERを使用する必要があります。POSITION_TICKETは MqlTradeRequest::positionと一致します。

    7. ENUM_ORDER_TYPEにORDER_TYPE_CLOSE_BY(相対するポジションによるポジションクローズ注文)が追加されました。
    8. ENUM_ORDER_PROPERTY_INTEGERに(ORDER_POSITION_BY_IDORDER_TYPE_CLOSE_BY注文の為の相対ポジションの識別子)が追加されました。
    9. ENUM_DEAL_ENTRYにDEAL_ENTRY_OUT_BY(相対ポジションをクローズした結果取引が行われた)が追加されました。
    10. 取引トランザクションの構造体MqlTradeTransactionに、2つの同様のフィールドが追加されました。

      • position — トランザクションによって影響を受けるポジションのチケット。市場注文の処理に関わるトランザクション (TRADE_TRANSACTION_ORDER_* ポジションチケットがまだ割り当てられていないTRADE_TRANSACTION_ORDER_ADD以外)と注文履歴 (TRADE_TRANSACTION_HISTORY_*)の為に記入します。
      • position_by — 相対ポジションのチケット。同じシンボルで、かつ反対方向に開かれた相対ポジションのクローズ時に使用されます。相対ポジションのクローズの注文 (close by)と相対ポジションのクローズの為の取引(out by)の為のみに記入されます。

    11. PositionGetTicket関数が追加されました。これはオープンポジションリスト内のインデックスによるポジションチ ケットを返し、PositionGetDouble、PositionGetInteger、PositionGetString関数を使用し、今後の作 業の為に自動的にこの関数を選択します。
      ulong  PositionGetTicket(
         int  index      // ポジションリスト内の番号
         );

    12. PositionSelectByTicket関数が追加されました。これは、指定されたチケットによって、今後の作業の為にオープンポジションを選択します。
      bool  PositionSelectByTicket(
         ulong   ticket     // ポジションのチケット
         );

    13. ENUM_SYMBOL_INFO_DOUBLEにSYMBOL_MARGIN_HEDGED(カバーされたポジション(一つのシンボルに異なる方向へのポジション)の一つのロットの契約またはマージンのサイズ)が追加されました。

      • 最初のマージンがシンボルの為に指定されている場合(SYMBOL_MARGIN_INITIAL)、ヘッジマージンは絶対値(金額での)として指定されます。
      • 最初のマージンが指定されていない(0と等しい)場合、SYMBOL_MARGIN_HEDGEDに、取引タイプ(SYMBOL_TRADE_CALC_MODE)に相応する式に基づくマージンの計算時に使用される契約サイズが表示されます。

      ヘッジポジションの為のマージン計算の特徴は、 MetaTrader 5取引プラットフォームのユーザーガイドに書かれています。

    14. ENUM_ACCOUNT_INFO_INTEGERに、ACCOUNT_MARGIN_MODE(現在の取引アカウントの為のマージン計算モード)が追加されました。

      • ACCOUNT_MARGIN_MODE_RETAIL_NETTINGは、『ネッティング』モード(1つのシンボルに対し、1つの ポジションのみ)でのポジション計算をする子場外市場の為に使用されます。シンボルタイプをベースにマージンが計算されます。 (SYMBOL_TRADE_CALC_MODE)
      • ACCOUNT_MARGIN_MODE_EXCHANGEは、株式市場の為に使用されます。シンボル設定で指定された割引に基づいてマージンが計算されます。割引はブローカーによって設定されますが、取引所によって決められた値よりも低くなることはありません。
      • ACCOUNT_MARGIN_MODE_RETAIL_HEDGINGは、独立したポジション計算(『ヘッジング』は1つのシンボ ルに対し、複数のポジションを有することができる)の際、市場外取引の為に使用されます。マージン計算はシンボルタイプ (SYMBOL_TRADE_CALC_MODE)とヘッジマージンのサイズ計算(SYMBOL_MARGIN_HEDGED)をベースに行われます。

    15. クライアントターミナルのプロパティENUM_TERMINAL_INFO_INTEGERに TERMINAL_SCREEN_DPI(画像の情報出力解像度は、DPIで測定される)が追加されました。このパラメータを知ることで、異なる解像度の モニターで同じように表示されるように、グラフィックオブジェクトのサイズを指定することができます。

    16. クライアントターミナルのプロパティENUM_TERMINAL_INFO_INTEGERにTERMINAL_PING_LAST(マイクロ秒単位の取引サーバーまでのPingの最新の既知値)が追加されました。1秒は100万マイクロ秒です。

    17. SendFTP関数呼び出し結果の送信が修正されました。以前は、送信に成功した際に、TRUEの代わりにFALSEが返されていました。
    18. 幾つかのケースで、"Access violation"エラーに繋がっていたStringConcatenate関数内のエラーを修正しました。
    19. テンプレート関数の動作のエラーを修正しました。
    20. Print、Alert、Comment関数は、4000以上の文字サイズの列を出力することができるようになりました。
    21. 配列同士(開始からの初期ポジションの異なるオフセット)の比較の際に起こっていたArrayCompare関数内のエラーを修正しました。
    22. スタンダードライブラリにヘッジ取引のヘルプが追加されました。

      CPosition
      以下のメソッドが追加されました。:

      • SelectByMagicは、以後の作業の為のシンボルとマジックナンバーによってポジションを選択します。
      • SelectByTicketは、以後の作業の為のチケットでポジションを選択します。

      CTrade
      以下のメソッドが追加されました。

      • RequestPositionは、ポジションのチケットを取得します。
      • RequestPositionByは、相対ポジションのチケットを取得します。
      • PositionCloseByは、反対方向のポジションチケットの指定によってポジションを閉じます。
      • SetMarginModeは、現在のアカウントの設定に応じて、マージンの計算モードを設定します。

      メソッドのオーバーロードを追加しました。

      • PositionCloseは、チケットによってポジションを閉じます。
      • PositionModifyは、チケットによってポジションを変更します。

      CAccountInfo
      以下のメソッドが変更されました。

      • MarginModeは、今後はマージンの計算モードを取得します。以前は、StopoutMode新メソッドと同様に動作しました。
      • MarginDescriptionは、今後は文字列としてマージン計算モードを取得します。以前は、StopoutModeDescription新メソッドと同様に動作しました。

      以下のメソッドが追加されました。

      • StopoutModeは、最小保証金レベルの指定モードを取得します。
      • StopoutModeDescriptionは、最小保証金レベルの指定モードを文字列として取得します。

      CExpert
      以下のメソッドが追加されました。

      • SelectPositionは、それを使用した今後の作業の為のポジションを選択します。

    23. MQL5のスタンダードライブラリにいくつかの改良が加えられました。
    24. DLLライブラリのアンロードエラーを修正しました。
    25. コンストラクタクラスのテンプレートサポートを修正しました。

    Signals

    1. 年率でのスワップ計算が修正されました。

    MetaEditor

    1. 『完全なワードのみ』モードにおけるファイルごとのワード検索が修正されました。
    2. 対応するファイルのコンパイル結果の列をダブルクリックすることでファイルへ移動することができるようになりました。
    3. Windows XPの幾つかのコントロールエレメントの表示が修正されました。
    ドキュメントが更新されました。
    31 3月 2016
    MetaTrader 5 build 1295

    ターミナル

    1. リテールFXトレーダーの可能性を拡大する為に、プラットフォームに2つ目の計算システムであるヘッジングが追加されました。こ れからは、シンボルごとに、反対方向のものを含む、多数のポジションを持つことができます。これによって、いわゆる『ロック』を使った取引戦略を実装する ことができ、つまり、もし価格がトレーダーに反する方向へ向かった場合、反対方向にポジションを開くことができます。

      新しい計算システムは、MetaTrader 4で使用されているものと同様なので、トレーダーに馴染みのあるものです。また、トレーダーは、複数の取引の実行(部分的なものも含む)や、MQL5 Cloud Networkのサポートを持つ多通貨・マルチスレッドテスターなど、第五世代プラットフォームの全ての長所を使用することができます。

      これからは、一つのシンボルにつき一つのポジションしか持つことができない、ネッティングを使用しているアカウントと同じアカウントで、株式取引を行うことができます。また、同じプラットフォームの他のアカウントで、FX取引やヘッジングを使用することもできます。

      ヘッジ機能つきアカウントの開設方法とポジション計算タイプの参照場所
      ポジション計算のタイプはアカウントレベルで設定され、これはターミナルウィンドウのヘッダやログに表示されます。



      ヘッジングのデモアカウントを開設する為には、対応するオプションを有効にしてください。




      ネッティングシステム
      この計算システムは、アカウント上では一度に1つのシンボルにつき1つのポジションのみ開くことができるということを念頭に置いています。

      • ポジションを持っている場合、同じ方向での取引実行時にこのポジションのボリュームを増加させます。
      • 逆方向に取引が実行された場合、既存のポジションのボリュームを小さくし、これを閉じたり(現在のポジションボリュームと等しいボリュームでの取引実行時)反転させます(もし反対方向の取引のボリュームが現在のポジションよりも大きい場合)。


      この時、どのようなアクションの結果、反対方向に取引が行われるかや、市場の注文や指値注文の実行の結果は重要ではありません。

      以下に、0.5ロットのボリュームでのEURUSDの二つの買い取引の実行例を引用しました。


      これらの取引の実行結果は、1ロットのボリュームの1つの共通ポジションになりました。

      ヘッジングシステム
      この計算システムはアカウントに、同じシンボルに対し反対方向のものを含む、複数の取引ポジションを持つことを可能にします。

      取引シンボルに開いているポジションがあり、トレーダーが新しい取引を実行する(または指値注文が作動する)場合、新しいポジションが開かれます。既存のポジションは変化しません。

      以下に、0.5ロットのボリュームでのEURUSDの二つの買い取引の実行例を引用しました。


      これらの取引が実行された結果、2つの別個のポジションが開かれました。

      新しい取引操作タイプ Close By
      ヘッ ジングポジション計算のアカウントの為に、反対のポジションを閉じる新しいタイプの取引操作が追加されました。この操作によって、同じシンボルでの反対方 向の2つのポジションを同時に閉じることができます。もし相対するポジションが様々なロット数を持っている場合、2つのうちの1つの注文のみが開いたまま 残ります。このボリュームは、2つのクローズポジションのロット差と等しくなり、ポジションの方向とオープン価格は、クローズポジションのうちの(ボ リューム的に)大きい方と等しくなります。

      2つのポジションの単一のクローズと比較すると、相対クローズでは、トレーダーは1つのスプレッドを節約することができます。

      • 単一クローズの場合、トレーダーは2回スプレッドを払うことになります。より低い価格(Bid)で買いを閉じ、より高い価格(Ask)で売りを閉じます。
      • 最初のポジションを閉じる為の相対クローズでは、2つ目のポジションのオープン価格を使用し、2つ目のポジションには最初のポジションのオープン価格が使用されます。


      相対ポジションのクローズ時に、『close by』のタイプの注文が設定されます。閉じられるポジションのチケットが、コメントで指定されます。相対ポジションのペアのクローズは、『out by』タイプの2つの取引によって行われます。両方のポジションのクローズの結果によって得られる取引の利益/損失のサイズは、1つの取引でのみ指定され ます。



    2. 取引ロボットとテクニカルインディケータの実際のティックヒストリーでのテストが可能になりました。

      実際ティックでのテストと最適化は実際の条件に最大限に近くなります。分足データをベースに生成されたものの代わりに、金融商品ごとにブローカーによって収集された実際のティックが使用されます。これらのティックは、取引所や流動性プロバイダーからのものです。

      実際のティックによるテストもしくは最適化を開始する為には、ストラテジーテスターで適切なモードを選択してください。



      ティックデータは分足データよりも遥かに大きいサイズを持っています。初めにテストを起動する際には、これらのダウンロードに時間がかかる場合がありま す。ダウンロードされたティックデータは、月ごとにTKSファイル\bases\[取引サーバ名]\ticks\[シンボル名]に保存されます。

      実際ティックでのテストの特徴
      実際ティックでのテストの際には、スプレッドは分足バーの領域内で変わることがあり、その場合、1分間の中でのティックティック生成時に相応するバーで決まっているスプレッドが使用されます。

      も しシンボルによってマーケットデプスが中継される場合、バーはきっちりと最終取引(Last)実行価格で構築されます。他の場合では、テスターは初めに Lastの価格でバーを構築しようと試みますが、それがない場合にのみBid価格を使用します。そこにLast価格があったかどうかに関係なく、 OnTickの発生は全てのティックで起こります。

      チャートがLast値で構築されていたとしても、取引操作はいつもBidとAskの価 格によって行われる点にご注意ください。例えば、バーの始値を使用するエキスパートアドバイザは一つの価格(Last)に基づいてシグナルを取得します が、取引の実行は他の価格(BidまたはAsk)で行われます。『全ティック』生成モード使用時には、バーはBid価格で構築され、取引はBidやAsk 価格で実行されます。この時Askは、Bid+分足バーに相応する固定スプレッドで計算されます。

      もしシンボルの履歴に分足バーがある が、その分に対するティックデータがない場合、テスターは『全ティック』モードでティックを生成します。これによって、ブローカーに完全なティックデータ がない場合の、計画した期間中におけるエキスパートアドバイザのテストをすることが可能になります。もしシンボルの履歴に分足バーがないが、その分に対す るティックデータがある場合、これらのティックは無視されます。分足データはより信頼性が高いと考えられています。
      現時点では、実際のティックでのテストと最適化は、ローカル及び遠隔のエージェントでのみ可能です。クラウドコンピューティングネットワークMQL5 Cloud Networkのサポートは近日追加予定です。

    3. チャットが追加されました。これからは、取引プラットフォームで直にMQL5.communityの友人や仲間と交流することができます。チャットでは、MQL5アカウントの全ての個人メッセージが表示されます。交流の前に、チャット画面やプラットフォームの設定から自分のアカウントにログインしてください。(サービス->設定->コミュニティ)




    4. デモアカウント開設のダイアログが簡素化され、ヘッジ機能付きアカウントを開設することができるようになりました。これからは、長いアンケートを記入する必要はなく、主要データを表示し取引パラメータを選択するだけで十分です。



    5. プラットフォームを使った作業の迅速な開始の為に、デモアカウントの自動割り当てが追加されました。もし、プラットフォームにま だ一つもアカウントがない場合、起動時に最初の利用可能な取引サーバでデモアカウントを割り当てます。開設に成功した後、アカウントはすぐに接続されま す。

    6. これからは、各ポジションにはチケット(ユニークナンバー)があります。通常、ポジションが開かれた注文のチケットと一致します (サーバーでの操作の結果チケットが変更された場合を除く)。例えば、ポジションの再オープンによるスワップの加算です。ターミナルの新しいバージョンへ のアップデート後、以前に開かれたポジションには、チケットが自動的に割り当てられます。




    7. ポジションの方向転換をもたらす市場発注の際のストップロスとテイクプロフィットのレベル設定が修正されました。以前は、新しいポジションでは適切なレベルが設定されませんでした。
    8. ワンクリック注文パネルのコントロール要素で、小数点以下4桁以上を持つ価格の表示が修正されました。
    9. 印刷前のプレビューウィンドウのニュース表示のエラーを修正しました。
    10. ティックチャートの表示エラーを修正しました。
    11. ターミナルの強制終了後のマーケットデプスの開始が修正されました。
    12. ワンクリック注文パネルのコントロール要素の表示の際に、成行注文の許可のチェックが追加されました。
    13. 多数の開かれた注文やポジションがある場合の、マージンと利益の計算が最適化されました。
    14. ユーザーインターフェースのマレー語への翻訳が追加されました。
    15. マニュアルが全体的に更新されました。新しいデザイン、インタラクティブなスクリーンショット、そして内蔵されたビデオなど、これらは全てMetaTrader 5を使った取引の学習を最大限に簡単で便利なものにする為にあります。




    MQL5

    1. 抽象クラスと純粋仮想関数のサポートが追加されました。

      抽象クラスは、将来におけるより具体的な派生クラスを作成する一般的なエンティティを作成する為に作られています。抽象クラスは、いくつかの他のクラスの為に基底クラスとして使用することができるだけなので、抽象クラスのオブジェクトタイプを作成することはできません。

      純粋仮想関数を一つでも含むクラスは、抽象クラスとなります。したがって、抽象クラスから派生したクラスは、その純粋仮想関数を実装する必要があり、そうしないと、これらは同様に抽象クラスになります。

      仮 想関数は、純粋指定子構文を使用し、『純粋』として宣言されます。例として、共通機能を提供する為だけ型に作成されるCAnimalクラスを見てみましょ う。CAnimalのオブジェクト自体は、実際の使用には一般的すぎます。したがって、CAnimalクラスは、抽象クラスの為の良い例となります。
      class CAnimal
        {
      public:
                            CAnimal();     // コンストラクタ
         virtual void       Sound() = 0;   // 純粋仮想関数
      private:
         double             m_legs_count;  // 足の数
        };
          
      <t0>ここでのSound()関数は、純粋仮想関数PURE(=0)の指定子で宣言されている為、純粋仮想となります。

      (=NULL)または(=0)と純粋指定子PUREが指定されている仮想関数のみが純粋仮想関数となります。抽象クラスの使用と宣言例:
      class CAnimal
        {
      public:
         virtual void       Sound()=NULL;   // PUREメソッドは派生クラスでオーバーライドする必要があり、CAnimalクラス自体は抽象クラスになり、作成されません
        };
      //--- 抽象クラスからの派生
      class CCat : public CAnimal
       {
      public:
        virtual void        Sound() { Print("Myau"); } // PUREはオーバーライドする必要があり、CCatクラスは抽象クラスではなく、作成することができます
       };
      
      //--- 間違った使用例
      new CAnimal;         //『CAnimal』エラーは、コンパイラは「抽象クラスをインスタンス化できません」というエラーを出します
      CAnimal some_animal; // CAnimal』エラーは、コンパイラは「抽象クラスをインスタンス化できません」というエラーを出します
      
      //--- 正しい使用例
      new CCat;  // エラーはなく、CCatクラスは抽象クラスではありません
      CCat cat;  // エラーはなく、CCatクラスは抽象クラスではありません
          
      抽象クラスの使用の制限
      純粋仮想関数(直接または間接)の抽象クラスのコンストラクタによる呼び出しの際、結果は未定義になります。
      //+------------------------------------------------------------------+
      //| 抽象基底クラス                                                     |
      //+------------------------------------------------------------------+
      class CAnimal
        {
      public:
         //--- 純粋仮想関数
         virtual void      Sound(void)=NULL;
         //--- 関数
         void              CallSound(void) { Sound(); }
         //--- コンストラクタ
         CAnimal()
          {
           //--- 仮想メソッドの明示的な呼び出し
           Sound();
           //--- 明示的ではない呼び出し(第三の関数を介した)
           CallSound();
           //--- コンストラクタまたはデストラクタは常に自分の関数を呼び出す
           //--- 派生クラスでの呼び出された関数によるオーバーライドや仮想性に関わらず
           //--- もし、呼び出される関数が純粋仮想の場合、
           //--- 呼び出しは重大なランタイムエラーをもたらします:『純粋仮想関数呼び出し』
          }
        };
          
      しかしながら、抽象クラスのコンストラクタとデストラクタは、他のメンバー関数を呼び出すことができます。

    2. イベントモデルの構成の簡素化の為に、関数へのポインターのサポートが追加されました。

      関数へのポインターを宣言する為には、『関数へのポインター』のタイプを明確にしてください。
      typedef int (*TFunc)(int,int);
      これで、TFuncがタイプとなり、変数の関数ポインターを宣言することができます。
      TFunc func_ptr;
      func_ptr変数に、以後の呼び出しの為に、関数のアドレスを保存することができます。
      int sub(int x,int y) { return(x-y); }
      int add(int x,int y) { return(x+y); }
      int neg(int x)       { return(~x);  }
      
      func_ptr=sub;
      Print(func_ptr(10,5));
      
      func_ptr=add;
      Print(func_ptr(10,5));
      
      func_ptr=neg;           // エラー: negはint (int,int)タイプを持っていません。
      Print(func_ptr(10));    // エラー:二つのパラメータがある必要があります
      
      関数のポインターを保存し、パラメータとして引き渡すことができます。クラスの非静的メソッドにポインターを取得することはできません。

    3. MqlTradeRequestの取引リクエスト構造体に、二つの新しいフィールドが追加されました。

      • position — ポジションチケット。ヘッジ取引の際やポジションのクローズや変更時に、その明確な識別の為に記入する必要があります。ポジションの識別が取引シンボルの名前で行われる為、ネッティング計算システムでの取引時には、この欄の記入は意味を持ちません。
      • position_by — 相対ポジションのチケット。同じシンボルで、かつ反対方向に開かれた相対ポジションのクローズ時に使用されます。ヘッジポジション計算システムにのみ使用されます。

    4. ENUM_TRADE_REQUEST_ACTIONSの取引操作タイプにTRADE_ACTION_CLOSE_BY(相対ポジションクローズ)が追加されました。ヘッジポジション計算システムにのみ使用されます。

    5. 注文、取引、ポジションのプロパティに、取引操作に相応するチケットが追加されました。

      • ENUM_ORDER_PROPERTY_INTEGERにORDER_TICKET(注文のチケット)が追加されました。固有の番号が各注文に割り当てられます。
      • ENUM_DEAL_PROPERTY_INTEGERにDEAL_TICKET(取引のチケット)が追加されました。固有の番号が各取引に割り当てられます。
      • ENUM_POSITION_PROPERTY_INTEGERにPOSITION_TICKET(ポジションのチケット)が追加さ れました。固有の番号が各ポジションに割り当てられます。通常、ポジションが開かれた注文のチケットと一致します(サーバーでの操作の結果チケットが変更 された場合を除く)。例えば、ポジションの再オープンによるスワップの加算です。その注文によってポジションが開かれた注文を見つけるには、 POSITION_IDENTIFIERを使用する必要があります。POSITION_TICKETは MqlTradeRequest::positionと一致します。

    6. ENUM_ORDER_TYPEにORDER_TYPE_CLOSE_BY(相対するポジションによるポジションクローズ注文)が追加されました。
    7. ENUM_ORDER_PROPERTY_INTEGERに(ORDER_POSITION_BY_IDORDER_TYPE_CLOSE_BY注文の為の相対ポジションの識別子)が追加されました。
    8. ENUM_DEAL_ENTRYにDEAL_ENTRY_OUT_BY(相対ポジションをクローズした結果取引が行われた)が追加されました。
    9. 取引トランザクションの構造体MqlTradeTransactionに、2つの同様のフィールドが追加されました。

      • position — トランザクションによって影響を受けるポジションのチケット。市場注文の処理に関わるトランザクション (TRADE_TRANSACTION_ORDER_* ポジションチケットがまだ割り当てられていないTRADE_TRANSACTION_ORDER_ADD以外)と注文履歴 (TRADE_TRANSACTION_HISTORY_*)の為に記入します。
      • position_by — 相対ポジションのチケット。同じシンボルで、かつ反対方向に開かれた相対ポジションのクローズ時に使用されます。相対ポジションのクローズの注文 (close by)と相対ポジションのクローズの為の取引(out by)の為のみに記入されます。

    10. PositionGetTicket関数が追加されました。これはオープンポジションリスト内のインデックスによるポジションチ ケットを返し、PositionGetDouble、PositionGetInteger、PositionGetString関数を使用し、今後の作 業の為に自動的にこの関数を選択します。
      ulong  PositionGetTicket(
         int  index      // ポジションリストの番号
         );
      

    11. PositionSelectByTicket関数が追加されました。これは、指定されたチケットによって、今後の作業の為にオープンポジションを選択します。
      bool  PositionSelectByTicket(
         ulong   ticket     // ポジションのチケット
         );
      

    12. ENUM_SYMBOL_INFO_DOUBLEにSYMBOL_MARGIN_HEDGED(カバーされたポジション(一つのシンボルに異なる方向へのポジション)の一つのロットの契約またはマージンのサイズ)が追加されました。

      • 最初のマージンがシンボルの為に指定されている場合(SYMBOL_MARGIN_INITIAL)、ヘッジマージンは絶対値(金額での)として指定されます。
      • 最初のマージンが指定されていない(0と等しい)場合、SYMBOL_MARGIN_HEDGEDに、取引タイプ(SYMBOL_TRADE_CALC_MODE)に相応する式に基づくマージンの計算時に使用される契約サイズが表示されます。

      ヘッジポジションの為のマージン計算の特徴は、 MetaTrader 5取引プラットフォームのユーザーガイドに書かれています。

    13. ENUM_ACCOUNT_INFO_INTEGERに、ACCOUNT_MARGIN_MODE(現在の取引アカウントの為のマージン計算モード)が追加されました。

      • ACCOUNT_MARGIN_MODE_RETAIL_NETTINGは、『ネッティング』モード(1つのシンボルに対し、1つの ポジションのみ)でのポジション計算をする子場外市場の為に使用されます。シンボルタイプをベースにマージンが計算されます。 (SYMBOL_TRADE_CALC_MODE)
      • ACCOUNT_MARGIN_MODE_EXCHANGEは、株式市場の為に使用されます。シンボル設定で指定された割引に基づいてマージンが計算されます。割引はブローカーによって設定されますが、取引所によって決められた値よりも低くなることはありません。
      • ACCOUNT_MARGIN_MODE_RETAIL_HEDGINGは、独立したポジション計算(『ヘッジング』は1つのシンボ ルに対し、複数のポジションを有することができる)の際、市場外取引の為に使用されます。マージン計算はシンボルタイプ (SYMBOL_TRADE_CALC_MODE)とヘッジマージンのサイズ計算(SYMBOL_MARGIN_HEDGED)をベースに行われます。

    14. クライアントターミナルのプロパティENUM_TERMINAL_INFO_INTEGERに TERMINAL_SCREEN_DPI(画像の情報出力解像度は、DPIで測定される)が追加されました。このパラメータを知ることで、異なる解像度の モニターで同じように表示されるように、グラフィックオブジェクトのサイズを指定することができます。

    15. クライアントターミナルのプロパティENUM_TERMINAL_INFO_INTEGERにTERMINAL_PING_LAST(マイクロ秒単位の取引サーバーまでのPingの最新の既知値)が追加されました。1秒は100万マイクロ秒です。

    16. SendFTP関数呼び出し結果の送信が修正されました。以前は、送信に成功した際に、TRUEの代わりにFALSEが返されていました。
    17. 幾つかのケースで、"Access violation"エラーに繋がっていたStringConcatenate関数内のエラーを修正しました。
    18. テンプレート関数の動作のエラーを修正しました。
    19. Print、Alert、Comment関数は、4000以上の文字サイズの列を出力することができるようになりました。
    20. 配列同士(開始からの初期ポジションの異なるオフセット)の比較の際に起こっていたArrayCompare関数内のエラーを修正しました。
    21. スタンダードライブラリにヘッジ取引のヘルプが追加されました。
      CPosition
      以下のメソッドが追加されました。:

      • SelectByMagicは、以後の作業の為のシンボルとマジックナンバーによってポジションを選択します。
      • SelectByTicketは、以後の作業の為のチケットでポジションを選択します。

      CTrade
      以下のメソッドが追加されました。

      • RequestPositionは、ポジションのチケットを取得します。
      • RequestPositionByは、相対ポジションのチケットを取得します。
      • PositionCloseByは、反対方向のポジションチケットの指定によってポジションを閉じます。
      • SetMarginModeは、現在のアカウントの設定に応じて、マージンの計算モードを設定します。

      メソッドのオーバーロードを追加しました。

      • PositionCloseは、チケットによってポジションを閉じます。
      • PositionModifyは、チケットによってポジションを変更します。

      CAccountInfo
      以下のメソッドが変更されました。

      • MarginModeは、今後はマージンの計算モードを取得します。以前は、StopoutMode新メソッドと同様に動作しました。
      • MarginDescriptionは、今後は文字列としてマージン計算モードを取得します。以前は、StopoutModeDescription新メソッドと同様に動作しました。

      以下のメソッドが追加されました。

      • StopoutModeは、最小保証金レベルの指定モードを取得します。
      • StopoutModeDescriptionは、最小保証金レベルの指定モードを文字列として取得します。

      CExpert
      以下のメソッドが追加されました。

      • SelectPositionは、それと共にフォローアップする為のポジションを選択します。

    22. MQL5のスタンダードライブラリにいくつかの改良が加えられました。

    シグナル

    1. 取引シグナルのリスト表示のエラーを修正しました。

    テスター

    1. 取引シンボルの幾つかのタイプで手数料が計算されるエラーを修正しました。
    2. 対応するポジションのExpert欄の数値に応じた、SL/TPが作動した結果に起こる、取引注文のExpert欄の記入が修正されました。以前は記入されませんでした。
    3. 通常およびフォワード最適化の結果タブへの切り替えが修正されました。
    4. "Envelopes"インディケータの表示と計算が修正されました。
    5. ビジュアルテストの実行が最適化されました。


    ターミナル

    1. 多数の開かれた注文やポジションがある場合の、マージンと利益の計算が最適化されました。
    2. 高頻度取引での取引操作の実行が最適化されました。
    3. 今後は履歴の同期は、現在の相場を必要としない、非主要シンボルのプロパティのリクエスト時に行われません。例えば、 SYMBOL_SELECT、SYMBOL_DIGITS, SYMBOL_SPREAD_FLOAT、SYMBOL_TRADE_CALC_MODE、SYMBOL_TRADE_MODE、 SYMBOL_TRADE_STOPS_LEVEL、SYMBOL_TRADE_FREEZE_LEVEL、SYMBOL_TRADE_EXEMODEな どです。以前は非主要シンボルのプロパティの任意のリクエスト時に現在のシンボルでの履歴の同期化が行われていました。

    MetaEditor

    1. 『完全なワードのみ』モードにおけるファイルごとのワード検索が修正されました。
    2. 対応するファイルのコンパイル結果の列をダブルクリックすることでファイルへ移動することができるようになりました。
    3. Windows XPの幾つかのコントロールエレメントの表示が修正されました。

     

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

     

    17 12月 2015
    MetaTrader 5プラットフォーム build 1240: 動作速度の改善と内蔵ビデオ


    ホスティング

    1. 仮想サーバのダイアログにチュートリアルビデオ『仮想プラットフォームをレンタルする方法』へのリンクが追加されました。このビデオは2分程度です。是非ご覧いただき、いかに年中無休のコピートレードや取引ロボットの起動が簡単かを知ってください。


      このビデオや、その他のビデオはYoutubeのMetaQuotes Software Corp.公式チャンネルにてご覧いただけます。
    2. エキスパートアドバイザから呼び出されるカスタムインディケータのEX5ライブラリ、またはカスタムインディケータの呼出時のホスティングへの移行のエラーを修正しました。

    ターミナル

    1. 高周波の取引操作(1秒に50以上の操作)を実行する際、開いている注文とポジションのリストの更新速度が速くなりました。
    2. ターミナル: 多くの(数万の)取引ツール数の時の取引サーバとターミナルの初期同期化が最適化され、遥かに速くなりました。これからは、接続後、もっと素早く活動を始めることができます。
    3. ターミナル: ターミナルのメモリの消費が遥かに少なくなり、最適化されました。
    4. ターミナル: ターミナルの開閉時にマーケットデプスの設定の保存と復元される機能が追加されました。
    5. ターミナル: ターミナルのウィンドウをドラッグする際、Windows 10で起こっていたアーティファクトを修正しました。
    6. ターミナル: コマンドやダイアログの為のコンテキストヘルプの動作が修正されました。ヘルプの呼出には、実際のエレメントにカーソルを合わせF1キーを押してください。
    7. ターミナル:高解像度の画面での動作へのインターフェースの適応作業を続けています。

    MQL5

    1. 注文と取引情報を取得する関数、OrderGetStringとHistoryOrderGetString、HistoryDealGetStringに新しいプロパティが追加されました。

      • ORDER_EXTERNAL_ID - 外部取引システムにおける注文の識別子。(株式市場)
      • DEAL_EXTERNAL_ID - 外部取引システムにおける取引の識別子。

    2. 構造体とクラスを伴う動作時の、関数ZeroMemoryの動作が修正されました。時折、メモリの解放が行われませんでした。
    3. 関数SendFTPの動作時のエラーコードが追加されました。関数は、設定ウィンドウの『FTP』タブで指定されたアドレスへファイルを送信します。

      • ERR_FTP_NOSERVER - 設定でftpサーバが指定されていません。
      • ERR_FTP_NOLOGIN - 設定でftpログインが指定されていません。
      • ERR_FTP_FILE_ERROR - ファイルが存在しません。
      • ERR_FTP_CONNECT_FAILED - ftpサーバへの接続に失敗しました。
      • ERR_FTP_CHANGEDIR - ftpサーバ上にファイルのアップロードの為のディレクトリが見つかりません。
      • ERR_FTP_CLOSED - ftpサーバへの接続が閉じています。

    4. 継承による継承先から継承元へのオブジェクトの移行の検証が修正されました。
    5. クラステンプレートの一連のエラーを修正しました。
    6. 関数CopyTicksによるティックの照会時のエラーを修正しました。連続同一取引ティック(1つのオブジェクトと1つのLast価格)のためのパラ メータCOPY_TICKS_TRADE指定時(取引ティックのみコピー)にそれらの内の始めのものだけが反応していました。
    7. カスタムタイプの変数のサイズ決定におけるエラーを修正しました。
    8.  開梱の無限サイクルを引き起こしていた、関数CryptDecodeのZLib使用時のエラーを修正しました。

    テスター

    1. テストの主要ツールとは異なる取引ツールによる価格履歴同期化のエラーを修正しました。
    2. OnTradeTransactionの処理での取引トランザクションTRADE_TRANSACTION_DEAL_ADD(取引の履歴への追加)のバックアップが修正されました。
    3. 遺伝的最適化の際のフォワードテストの実行が変更されました。これからは、フォワードテストには遺伝的最適化の後で得られたすべての唯一無二の結果が関係します。以前は4分の1の結果しか使われていませんでした。

    MetaEditor

    1. MQL5マスターにチュートリアルビデオ『MQL5マスターでの取引ロボットの作成方法』のリンクが追加されました。この3分程のビデオをご覧いただき、1つのコード配列を書くことなく、取引ロボットを作成してみてください。


      このビデオや、その他のビデオはYoutubeのMetaQuotes Software Corp.公式チャンネルにてご覧いただけます。
    2.  ウィンドウのうちの1つが完全に展開している場合に、開いているウィンドウの整理コマンドの動作を修正しました。『ウィンドウ』メニューから、開いているファイルをモザイク、垂直、水平、直列に配置することができます。
    3. インターフェースの高解像度の画面(4K)での動作の適応作業を続けています。
    ドキュメントが更新されました。
    1234567891011121314