ドキュメントが更新されました。
ドキュメントが更新されました。
datetime iTime( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
double iOpen( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
double iHigh( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
double iLow( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
double iClose( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
long iVolume( string symbol, // 銘柄 int timeframe, // 期間 int shift // シフト );
int iBars( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe // 期間 );
int iBarShift( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 datetime time, // 時間 bool exact=false // モード );
int iLowest( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int type, // 時系列ID int count, // 要素数 int start // インデックス );
int iHighest( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int type, // 時間series identifier int count, // 要素数 int start // インデックス );
long iRealVolume( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
long iTickVolume( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
long iSpread( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
void TesterHideIndicators( bool hide // フラグ );
ドキュメントが更新されました。
クラッシュログで報告されたエラーを修正しました。
MetaTrader 5ビルド1745は、Microsoft Windows XP /2003/Vistaをサポートする最後のプラットフォームバージョンとなります。
当社は数ヶ月前に古いオペレーティングシステムサポートの終了(英語)を発表しました。Windows
2003、Windows Vista、特にMicrosoft Windows
XPは、古いオペレーティングシステムです。技術的な制限によってWindows
XPでの潜在的なハードウェア機能の実現が難しくなったため、マイクロソフトは3年前にこのオペレーティングシステムのサポートを終了しました。
MetaTrader 5ビルド1745およびそれ以前のバージョンは、上記のオペレーティングシステムで引き続き動作しますが、アップデートを受け取ることはできません。また、インストーラはこれらのオペレーティングシステムでは動作しなくなります。
MetaTrader 5を実行するために最低限必要なオペレーティングシステムのバージョンはWindows 7となりますが、Windows 10の64ビット版の使用が強く推奨されます。
旧バージョンのデスクトップおよびモバイル端末のサポートは、新しいプラットフォームバージョンのリリースによって終了します。
サポートされていない端末のビルドは、新しいサーバーバージョンに接続することはできません。事前に端末を更新することを強くお勧めします。
新しい共有プロジェクトをサポートするため、MQL5ストレージの運用プロトコルを更新しました。したがって、プラットフォームの更新後にはストレージからすべてのデータのチェックアウトを実行してください。更新中にMQL5ストレージに保存されたデータが失われたり影響を受けたりすることはありません。
プラットフォームを新しいバージョンに更新する前に、Commit操作を実行してすべてのローカル変更をMQL5ストレージに送信することをお勧めします。
仕組み
例えば ドルインデックス(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銘柄のクオーツに基づいて、新しい製品の価格を実時間で計算します。価格の変更は[気配値表示]ウィンドウとチャートで視覚化されます。
int CustomTicksAdd( const string symbol, // Symbol name const MqlTick& ticks[] // カスタム銘柄に適用する必要があるティックデータを持つ配列 );CustomTicksAdd関数は、これらのクオーツがブローカーサーバから受信されたかのように提供することができます。データはティックデータベースに直接書き込まれるのではなく、[気配値表示]ウィンドウに送られます。ターミナルは次に、ティックを[気配値表示]からデータベースに保存します。1つの呼び出しで大量のデータが渡されると、リソースを節約するために関数の動作が変わります。256ティック以上送信された場合、データは2つの部分に分割されます。大きな部分はチックデータベースに直接記録されます(CustomTicksReplace同様)。最後の128ティックからなる第2の部分は[気配値表示]に送られ、そこからデータベースに保存されます。
MetaEditorでフル機能のプロジェクトを利用できるようになりました。プログラム開発プロセスがより便利になりました。
現在、メインMQ5プログラムファイルはプロジェクトとして表示されません。このプロジェクトは、プログラム設定、コンパイルパラメータ、および使用されているすべてのファイルに関する情報を格納する別個の
"MQPROJ"ファイルです。メインプロジェクト設定は別のダイアログボックスからアクセスできるため、ソースコードで#propertyで指定する必要はありません。
プロジェクト内の作業で便利なように、[ナビゲータ]で別のタブが用意されています。インクルード、リソース、ヘッダー、その他のファイルなどのすべてのファイルが、カテゴリに整理されています。すべてのファイルが自動的にプロジェクトナビゲータに追加されます。たとえば、新しくインクルードしたMQHファイルは、ナビゲータの[Dependencies](依存ファイル)セクションに自動的に表示されます。.
新規プロジェクトのサポートは、更新されたMQL5ストレージオンラインリポジトリにも実装されています。MQL5.comコミュニティの他のメンバーとのコラボレーションを通じた大規模なプロジェクトの開発がはるかに便利になりました。
グループプロジェクトには新しい共有プロジェクトセクションが用意されています。このセクションで作成されたプロジェクトはすぐにストレージに送信されるため、他のユーザーに権限を与えればすぐにコラボレーションを開始できます。
共有プロジェクトでプロジェクトをコンパイルすると、実行可能なEX5ファイルは、プログラムの種類に応じて自動的にローカルのエキスパート、指標またはスクリプトディレクトリにコピーされます。このため、手動でファイルをコピーすることなく、簡単にチャート上でプログラムを起動できます。
MQL5ストレージ操作の新機能
新しい共有プロジェクトのサポートを実装するために、MQL5ストレージ操作プロトコルを変更しました。したがって、プラットフォームの更新後にはストレージからすべてのデータのチェックアウトを実行してください。更新中にMQL5ストレージに保存されたデータが失われたり影響を受けたりすることはありません。
[Checkout from Storage](ストレージからチェックアウト)コマンドは使用できません。代わりに、[Activate MQL5 Storage](MQL5ストレージをアクティブ化)と [Update from Storage](ストレージからファイルを更新)コマンドを使用してデータを受け取ります。
新規プロジェクト:作成および操作の詳細の例
MetaEditorに新規プロジェクトエンティティが追加されました。プロジェクトとは、一般的なプログラムのプロパティと、使用されているすべてのファイルに関する情報を格納するmqprojファイルのことです。ソースコードで#propertyディレクティブを使用して手動で変更するのではなく、別のMetaEditorダイアログから便利にプログラムプロパティを管理できるようになりました。
利用可能なコードがあれば、 [ソースから新規プロジェクトを作成]コマンドを使って簡単に新しいプロジェクトをテストすることができます。
選択したファイルがあるディレクトリに、同じ名前とmqproj拡張子を持つ新しいプロジェクトファイルが作成されます。#propertyを介してソースコードで指定されたメインプログラムの名前、著作権、バージョン、開発者のサイトへのリンク、プログラムの説明などのプロパティは、プロジェクトに自動的に追加されます。
MQL5プログラムをコンパイルするための新しいオプションが2つ追加されました。
プロジェクトを操作するには、ナビゲータウィンドウで[プロジェクト]タブを使用します。このタブでは、プロジェクトで使用されるすべてのファイルが便利な形式で表示されます。プロジェクトがソースファイルから生成されると、使用されているすべてのインクルードファイル(メインの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](参加)をクリックし、ストレージからプロジェクトを受信するだけです。
//+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ 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"); }
関数 | アクション |
---|---|
CustomSymbolCreate | 指定されたグループに指定された名前を持つカスタム銘柄を作成する |
CustomSymbolDelete | 指定された名前を持つカスタム銘柄を削除する |
CustomSymbolSetInteger | カスタム銘柄の整数型プロパティ値を設定する |
CustomSymbolSetDouble | カスタム銘柄のreal型プロパティ値を設定する |
CustomSymbolSetString | カスタム銘柄の文字列型プロパティ値を設定する |
CustomSymbolSetMarginRate | 注文の種類と方向に応じてカスタム銘柄の証拠金率を設定する |
CustomSymbolSetSessionQuote | 指定した銘柄と曜日の指定されたクオーツセッションの開始時刻と終了時刻を設定する |
CustomSymbolSetSessionTrade | 指定した銘柄と曜日の指定された取引セッションの開始時刻と終了時刻を設定する |
CustomRatesDelete | 指定された時間間隔でカスタムシンボルの価格履歴からすべてのバーを削除する |
CustomRatesReplace | 指定された時間間隔内のカスタム銘柄の価格履歴を、MqlRates型配列のデータで完全に置き換える |
CustomRatesUpdate | カスタム銘柄履歴に不足しているバーを追加し、既存のデータをMqlRates型配列のものに置き換える |
CustomTicksAdd | MqlTick型の配列からカスタム銘柄の価格履歴にデータを追加する(カスタム銘柄は[気配値表示]ウィンドウで選択) |
CustomTicksDelete | 指定された時間間隔でカスタムシンボルの価格履歴からすべてのティックを削除する |
CustomTicksReplace | 指定された時間間隔内のカスタム銘柄の価格履歴を、MqlTick 型配列のデータで完全に置き換える |
ライブラリは、ターミナル作業ディレクトリのInclude\Genericフォルダにあります。
bool ArraySwap( void& array1[], // 1番目の配列 void& array2[] // 2番目の配列 );この関数は、同じ型および同じ次元の動的配列を受け入れます。多次元配列の場合、最初の次元を除くすべての次元の要素の数は一致する必要があります。
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 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 */
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 */ }オブジェクトメンバ単位のコピーは暗黙の演算子で実行されます。
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 | - | この約定は、スプリットが公表された時にポジションが存在した株式または他の資産のスプリット(低下)の後に実行されました。 |
ドキュメントを更新しました。
//+------------------------------------------------------------------+ //| テンプレート関数 | //+------------------------------------------------------------------+ 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)
template<typename T> T Func() { return (T)0; } void OnInit() { Func<double>(); // 明示的テンプレート関数の特殊化 }したがって、型定義は、呼び出しパラメータを使用するのではなく、型の明示的な指定によって実行されます。
ドキュメントを更新しました。
ドキュメントを更新しました。
#resource path_to_resource_file as type_of_resource_variable name_of_resource_variable
#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]
ドキュメントを更新しました。
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");
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 */
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"); }
#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); }結果:
#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); //--- }結果:
ドキュメントを更新しました。
トレードダイアログの買、売、及び決済ボタンにツールヒントが追加されました。ツールヒントには、初心者が取引プロセスを理解するために、操作中に売買される証券に関する情報が含まれています。
標準ライブラリにALGLIB数値解析ライブラリのMQL5 版が追加されました。
ライブラリ機能
使用法
ALGLIBファイルは \MQL5\Include\Math\Alglibに位置します。関数を使用するには、メインライブラリファイルをお使いのプログラムに追加なさってください。
標準ライブラリに数理統計機能が追加されました。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の活用)稿で説明されています。
標準ライブラリにファジィライブラリのMQL5 版が追加されました。ファジィライブラリはマムダニ及び菅野ファジィ推論法を実装します。
ライブラリ機能
使用法
ファジィライブラリファイルは\MQL5\Include\Math\Fuzzyに位置します。関数を使用するには、下記の例が示すように、必要な関数を含むファイルをお使いのプログラムに追加します。
#include <Math\Fuzzy\mamdanifuzzysystem.mqh> #include <Math\Fuzzy\sugenofuzzysystem.mqh>
ライブラリの詳細はコードベースのファジィ - ファジィモデル開発のためのライブラリで参照できます。
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); } } }
//--- 同じ色で塗られたローソク足 #property indicator_label1 "One color candles" #property indicator_type1 DRAW_CANDLES //--- 1色のみが設定されたのでローソク足の色はすべて同じ #property indicator_color1 clrGreen2色が指定された場合は1番目の色がローソク足の輪郭、2番目が実体に適用されます。
//--- ローソク足の実体の色は髭の色と異なる #property indicator_label1 "Two color candles" #property indicator_type1 DRAW_CANDLES //--- ローソクの輪郭と髭は緑で実体は白 #property indicator_color1 clrGreen,clrWhite3色が指定された場合は1番目の色がローソク足の輪郭、2、3番目の色が強気/弱気ローソク足の実体に適用されます。
//--- ローソク足の実体の色は髭の色と異なる #property indicator_label1 "One color candles" #property indicator_type1 DRAW_CANDLES //--- ローソクの輪郭と髭は緑、強気ローソク足の実体は白、弱気ローソク足の実体は赤 #property indicator_color1 clrGreen,clrWhite,clrRedDRAW_CANDLESスタイルはカスタムキャンドル着色を可能にします。また、すべての色はPlotIndexSetInteger function (composition_index_DRAW_CANDLES, PLOT_LINE_COLOR, modifier_index, color)関数を使用してインディケータの動作中に動的に変更することができ、ここでmodifier_indexの持つ値は次のいずれかです。
//--- 輪郭と髭の色の設定 PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue); //--- 強気ローソク足の実体の色の設定 PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen); //--- 弱気ローソク足の実体の色の設定 PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
ドキュメントを更新しました。
class CFoo final { //--- クラス本体 }; class CBar : public CFoo { //--- クラス本体 };final修飾子を使用したクラスからの継承を試行すると、上記の例で示したように、コンパイルはエラーを出します。
class CFoo { void virtual func(int x) const { } };次にメソッドを派生クラスでオーバーライドします:
class CBar : public CFoo { void func(short x) { } };しかしエラーによって引数の型がintからshortに変わります。実際には、このような場合、オーバーライドではなくメソッドのオーバーロードが起こります。オーバーロードされた関数定義のアルゴリズムに従い、特定のケースにおいてコンパイラがオーバーライドされたメソッドの代わりに基底クラスで定義されたメソッドを選択することがあります。
class CBar : public CFoo { void func(short x) override { } };オーバーライド時にメソッドシグネチャが変更された場合、コンパイラは親クラスで全く同じシグネチャを見つけることができず、コンパイルエラーを出します。
class CFoo { void virtual func(int x) final { } }; class CBar : public CFoo { void func(int) { } };final修飾子を使用したメソッドのオーバーライドを試行すると、上記の例で示したように、コンパイルはエラーを出します。
ドキュメントが更新されました。
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オブジェクトではありません } //+------------------------------------------------------------------+
string text="Hello"; ushort symb=text[0]; // シンボル'H'のコードを返します
ドキュメントが更新されました。
テスト時の年率での手数料の計算が修正されました。
テストの過程で作成されるチャート上の残高の計算および表示が修正されました。
公開テストから2か月後、MetaTrader 5マルチマーケットプラットフォームのウェブバージョンが公式にリリースされました。これはあらゆるOSのあらゆるブラウザから、金融市場取引が行えるものです。また、コンピュータにプログラムをインストールする必要がなく、任意のウェブブラウザとインターネット接続があれば十分です。
アプリケーションは、ウェブソリューションのクロスプラットフォーム性と利便性を備え、デスクトップ版プラットフォームの主要な利点(スピー ド、マルチマーケット性、取引機能の拡張)を持つものです。リリースバージョンの重要な革新は、市場の深さを見ることができ、ワンクリックで成行/指値注 文を発注することができる板注文画面です。
ウェブプラットフォームによって、デスクトップ版と同様に取引操作を行ったり、テクニカル分析を行うことができます。アプリケーションで利用できるもの: