bool CalendarCountryById( const long country_id, // 国ID MqlCalendarCountry& country // 国の説明 );CalendarEventById — イベントの説明をIDによって取得します。
bool CalendarEventById( const long event_id, // イベントID MqlCalendarEvent& event // イベントの説明 );CalendarValueById — イベント値の説明をIDによって取得します。
bool CalendarValueById( const long value_id, // 値ID MqlCalendarValue& value // 値の説明 );CalendarEventByCountry — 国の利用できるイベントの配列を取得します。
bool CalendarEventByCountry( string country_code, // 国コード MqlCalendarEvent& events[] // イベント配列 );CalendarEventByCurrency — 影響された通貨の利用できるイベントの配列を取得します。
bool CalendarEventByCurrency( string currency, // 通貨 MqlCalendarEvent& events[] // イベント配列 );CalendarValueHistoryByEvent — イベントIDによって指定された期間の値の配列を取得します。
bool CalendarValueHistoryByEvent( ulong event_id, // イベントID MqlCalendarValue& values[], // 値の配列 datetime datetime_from, // 期間開始日 datetime datetime_to=0 // 期間終了日 );CalendarValueHistory — 国および/または通貨によって絞り込まれた、指定された期間の値の配列を取得します。
bool CalendarValueHistory( MqlCalendarValue& values[], // 値の配列 datetime datetime_from, // 期間の開始日 datetime datetime_to=0, // 期間の終了日 string country_code=NULL, // 国コード string currency=NULL // 通貨 );CalendarValueLastByEvent — 最後のイベントの値をIDによって取得します。この関数は前回のリクエスト以降に現れた値のリクエストを可能にします。この操作には、入出力パラメータ「change_id」が追加で使用されます。
bool CalendarValueHistory( ulong event_id, // イベントID ulong& change_id, // 最後のカレンダー変更ID MqlCalendarValue& values[] // 値の配列 );CalendarValueLast — 国および/または通貨によって絞り込まれた、すべてのイベントの最後の値の配列を取得します。この関数は前回のリクエスト以降に現れた値のリクエストを可能にします。CalendarValueLastByEvent同様、「change_id」プロパティはリクエストに使用されます。
bool CalendarValueHistory( ulong event_id, // イベントID ulong& change_id, // 最後のカレンダー変更ID MqlCalendarValue& values[], // 値の配列 string country_code=NULL, // 国コード string currency=NULL // 通貨 );
struct MqlCalendarCountry { ulong id; // ISO 3166-1での国ID string name; // 国名の文字列 string code; // ISO 3166-1 alpha-2での国ID string currency; // 国の通貨コード string currency_symbol; // 国の通貨の記号/サイン string url_name; // mql5.comのURLで使用される国名 };MqlCalendarEvent — イベントの説明
struct MqlCalendarEvent { ulong id; // イベントID ENUM_CALENDAR_EVENT_TYPE type; // イベントタイプ ENUM_CALENDAR_EVENT_SECTOR sector; // イベントが所属するセクター ENUM_CALENDAR_EVENT_FREQUENCY frequency; // イベント発表頻度 ENUM_CALENDAR_EVENT_TIMEMODE time_mode; // イベント発表タイムモード ulong country_id; // 国ID ENUM_CALENDAR_EVENT_UNIT unit; // イベント値の単位 ENUM_CALENDAR_EVENT_IMPORTANCE importance; // イベント重要度 ENUM_CALENDAR_EVENT_MULTIPLIER multiplier; // イベント重要度乗数 uint digits; // イベント値の小数点以下桁数 string source_url; // ソースURL string event_code; // イベントコード string name; // 端末限度でのイベント名の文字列 };MqlCalendarValue — イベント値の説明
struct MqlCalendarValue { ulong id; // 値ID ulong event_id; // イベントID datetime time; // イベント日時 datetime period; // イベント発表期間 int revision; // 発表期間に関係する発表指標 long actual_value; // 現在のイベント値 long prev_value; // 前のイベント値 long revised_prev_value; // 改正された前のイベント値 long forecast_value; // イベント予想値 ENUM_CALENDAR_EVENT_IMPACRT impact_type; // 通貨への潜在的な影響 };
enum ENUM_CALENDAR_EVENT_FREQUENCY { CALENDAR_FREQUENCY_NONE =0, // 未使用 CALENDAR_FREQUENCY_WEEK =1, // 週 CALENDAR_FREQUENCY_MONTH =2, // 月 CALENDAR_FREQUENCY_QUARTER =3, // 四半期 CALENDAR_FREQUENCY_YEAR =4, // 年 CALENDAR_FREQUENCY_DAY =5, // 日 }; enum ENUM_CALENDAR_EVENT_TYPE { CALENDAR_TYPE_EVENT =0, // イベント(会合、演説など) CALENDAR_TYPE_INDICATOR =1, // 指標 CALENDAR_TYPE_HOLIDAY =2, // 祝日 }; enum ENUM_CALENDAR_EVENT_SECTOR { CALENDAR_SECTOR_NONE =0, // なし CALENDAR_SECTOR_MARKET =1, // 市場 CALENDAR_SECTOR_GDP =2, // GDP CALENDAR_SECTOR_JOBS =3, // 職 CALENDAR_SECTOR_PRICES =4, // 価格 CALENDAR_SECTOR_MONEY =5, // 金 CALENDAR_SECTOR_TRADE =6, // 取引 CALENDAR_SECTOR_GOVERNMENT =7, // 政府 CALENDAR_SECTOR_BUSINESS =8, // ビジネス CALENDAR_SECTOR_CONSUMER =9, // 消費者 CALENDAR_SECTOR_HOUSING =10, // 家 CALENDAR_SECTOR_TAXES =11, // 税 CALENDAR_SECTOR_HOLIDAYS =12, // 祝日 }; enum ENUM_CALENDAR_EVENT_IMPORTANCE { CALENDAR_IMPORTANCE_NONE =0, // なし CALENDAR_IMPORTANCE_LOW =1, // 低 CALENDAR_IMPORTANCE_MODERATE =2, // 中 CALENDAR_IMPORTANCE_HIGH =3, // 高 }; enum ENUM_CALENDAR_EVENT_UNIT { CALENDAR_UNIT_NONE =0, // なし CALENDAR_UNIT_PERCENT =1, // 割合 CALENDAR_UNIT_CURRENCY =2, // 国の通貨 CALENDAR_UNIT_HOUR =3, // 時間数 CALENDAR_UNIT_JOB =4, // 職の数 CALENDAR_UNIT_RIG =5, // リグの数 CALENDAR_UNIT_USD =6, // 米ドル CALENDAR_UNIT_PEOPLE =7, // 人数 CALENDAR_UNIT_MORTGAGE =8, // 住宅ローン数 CALENDAR_UNIT_VOTE =9, // 投票数 CALENDAR_UNIT_BARREL =10, // バレル数 CALENDAR_UNIT_CUBICFEET =11, // 立方フィート CALENDAR_UNIT_POSITION =12, // 就職口の数 CALENDAR_UNIT_BUILDING =13 // 建物の数 }; enum ENUM_CALENDAR_EVENT_MULTIPLIER { CALENDAR_MULTIPLIER_NONE =0, // なし CALENDAR_MULTIPLIER_THOUSANDS =1, // 千 CALENDAR_MULTIPLIER_MILLIONS =2, // 百万 CALENDAR_MULTIPLIER_BILLIONS =3, // 十億 CALENDAR_MULTIPLIER_TRILLIONS =4, // 一兆 }; enum ENUM_CALENDAR_EVENT_IMPACRT { CALENDAR_IMPACT_NA =0, // 使用不可 CALENDAR_IMPACT_POSITIVE =1, // プラス CALENDAR_IMPACT_NEGATIVE =2, // マイナス }; enum ENUM_CALENDAR_EVENT_TIMEMODE { CALENDAR_TIMEMODE_DATETIME =0, // ソースが正確な時刻を発表 CALENDAR_TIMEMODE_DATE =1, // 終日イベント CALENDAR_TIMEMODE_NOTIME =2, // ソースが正確な時刻を発表しない CALENDAR_TIMEMODE_TENTATIVE =3, // ソースは日付のみを提供するが、正確な時刻を事前に公開していないため、イベントが発生したときに正確な時刻が追加される };
ERR_CALENDAR_MORE_DATA =5400, // 結果全体として配列が小さい(配列に収まる値が渡された) ERR_CALENDAR_TIMEOUT =5401, // カレンダデータ要求への応答を待っている間にタイムアウトした ERR_CALENDAR_NO_DATA =5402, // データが見つからない
bool CharArrayToStruct( void& struct_object, // 構造体 const uchar& char_array[], // 配列 uint start_pos=0 // 配列での開始位置 );StructToCharArrayはPOD構造体をuchar配列にコピーします。
bool StructToCharArray( const void& struct_object, // 構造体 uchar& char_array[], // 配列 uint start_pos=0 // 配列での開始位置 );
ushort MathSwap(ushort value); uint MathSwap(uint value); ulong MathSwap(ulong value);
bool StringReserve( string& string_var, // 文字列 uint new_capacity // 文字列バッファサイズ );StringSetLengthは指定した文字列の長さを文字数で設定します。
bool StringSetLength( string& string_var, // 文字列 uint new_length // 新しい文字列の長さ );
bool ArrayRemove( void& array[], // 任意の型の配列 uint start, // 削除開始インデックス uint count=WHOLE_ARRAY // 要素数 );ArrayInsertは、指定されたインデックスから開始して、ソース配列から指定された数の要素をターゲット配列に挿入します。
bool ArrayInsert( void& dst_array[], // ターゲット配列 const void& src_array[], // ソース配列 uint dst_start, // ターゲット配列で挿入を始めるインデックス uint src_start=0, // ソース配列でコピーを始めるインデックス uint count=WHOLE_ARRAY // 挿入された要素の数 );ArrayReverseは指定されたインデックスで始まる指定された数の要素を配列内で反転します。
bool ArrayReverse( void& array[], // 任意の型の配列 uint start=0, // 反転開始インデック uint count=WHOLE_ARRAY // 要素数 );
int CustomBookAdd( const string symbol, // 銘柄名 const MqlBookInfo& books[] // DOM要素説明付きの配列 uint count=WHOLE_ARRAY // 使用される要素の数 );
bool CustomSymbolCreate( const string symbol_name, // カスタム銘柄名 const string symbol_path="", // 銘柄が作成されるグループの名前 const string symbol_origin=NULL // カスタム銘柄作成の基盤となる銘柄の名前 );作成されたカスタム銘柄のプロパティのコピー元となる銘柄の名前は、"symbol_origin"パラメータで指定されます。
ユーザインターフェイスがクロアチア語でも利用できるようになりました。
ドキュメントが更新されました。
#import "TestLib.dll" //+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { int x=41; TestClass::Inc(x); Print(x); }TestClassのInc関数のC#コードは下記のとおりです。
public class TestClass { public static void Inc(ref int x) { x++; } }実行されると、スクリプトは42を返します。
struct MqlTick
{
datetime time; // 最後の価格更新時刻
double bid; // 現在の売値
double ask; // 現在の買値
double last; // 現在の最終約定値
ulong volume; // 現在の最終約定ボリューム
long time_msc; // 最後の価格更新時刻(ミリ秒単位)
uint flags; // ティックフラグ
double volume_real; // 高精度の現在の最終約定ボリュー
};
struct MqlBookInfo { ENUM_BOOK_TYPE type; // ENUM_BOOK_TYPE列挙体からの注文タイプ double price; // 価格 long volume; // ボリューム double volume_real; // 高精度ボリューム };
//+------------------------------------------------------------------+ //| デフォルトのパッキング | //+------------------------------------------------------------------+ struct A { char a; int b; }; //+------------------------------------------------------------------+ //| パッキングの指定 | //+------------------------------------------------------------------+ struct B pack(4) { char a; int b; }; //+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { Print("sizeof(A)=",sizeof(A)); Print("sizeof(B)=",sizeof(B)); } //+------------------------------------------------------------------+結論:
sizeof(A)=5 sizeof(B)=8構造体内のアラインメントについての詳細は、MSDNをご覧ください。
enum Main { PRICE_CLOSE_, PRICE_OPEN_ }; input Main Inp=PRICE_CLOSE; //+------------------------------------------------------------------+ //| 開始関数 | //+------------------------------------------------------------------+ void OnStart() { }コンパイラは下記の警告を表示します。
class X { }; void f(int) { } template<typename T> void a(T*) { new T(2); } // 以前はコンパイラがここでエラーを生成した template<typename T> void a() { f(0); } void OnInit() { a<X>(); }
ドキュメントを更新しました。
ドキュメントが更新されました。
ドキュメントが更新されました。
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番目の配列 );この関数は、同じ型および同じ次元の動的配列を受け入れます。多次元配列の場合、最初の次元を除くすべての次元の要素の数は一致する必要があります。
この新しいバージョンでは、取引実行モードで取引されている金融商品の市場統計を表示することができます。統計を表示するには、気配値表示で任意の銘柄のメニューを開いて「統計」を選択します。
「取引」タブでのポジション操作がより便利になりました。ポジションや注文をシングルタップすると、ポジション銘柄のチャートを開くだけでなく、ポジションボリュームを決済する、変更する、または増やすなどの詳細な情報と利用可能なアクションが表示されます。
Android用のMetaTrader5では、予備の口座を簡単に作成できます。 メニューから"ライブアカウントを開設"を選択し、サーバーのリストの中からブローカーを見つけてください。 IDの書類と銀行口座の明細の二つが必要です。 リクエストはブローカーに送信され、口座開設に必要な追加情報を求められます。
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 | - | この約定は、スプリットが公表された時にポジションが存在した株式または他の資産のスプリット(低下)の後に実行されました。 |
iOS版 MetaTrader 5 ビルド1605では仮取引口座を簡単に開設することが可能です。口座を新規開設するには、メニューから「リアル口座を開く」を選択し、ブローカーをサーバーのリストから探し、個人情報を記入して身元と住所を確認するための2つの書類を添付して送信します。ブローカーはリアル口座を開設して必要に応じて追加情報を要求します。
この新バージョンのもう一つの特徴は、最適化され再設計された電子メールセクションです。
ドキュメントを更新しました。
Android版 MetaTrader
5は取引履歴をポジションの形で表示することができるようになりました。履歴タブには今までには注文と約定のみが表示されていましたが、取引がポジションの形で分析できるようになりました。1つのポジションの全ての取引データが1つのレコードに結合されて、下記が表示されます。
このビルドで一番革新的なのは、ポジションの形での取引履歴の表示です。履歴タブには今までには注文と約定のみが表示されていましたが、これにポジションが加わりました。取引プラットフォームは、ポジションの取引データを収集し、そのデータを1つのレコードに結合します。レコードには以下が含まれます。
//+------------------------------------------------------------------+ //| テンプレート関数 | //+------------------------------------------------------------------+ 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]
ドキュメントを更新しました。