void func(int &arr[ ][ ][ ][ ]) { }
struct MyStruct { string Array[]; }; void OnStart() { MyStruct a1,a2; ArrayResize(a1.Array,3); ArrayResize(a2.Array,1); a1=a2; }以前は、関数呼び出し後の「a1」配列サイズは3でした。サイズは1になります。
ドキュメントが更新されました。
ENUM_FP_CLASS MathClassify( double value // real number );列挙には次の値が含まれます。
if(MathClassify(value)>FP_ZERO) { Print("value is not a valid number"); }
残高とその他の2つの変数を含む最適化基準を改訂しました。基準では2番目の変数のみが考慮され、残高は無視されるようになりました。新しい最適化基準では分析が容易になります。
import sys chart_symbol='unknown' chart_tf=1 if len(sys.argv) == 3: chart_symbol, chart_tf = sys.argv[1:3]; print("Hello world from", chart_symbol, chart_tf) >> Hello world from T.NYSE 15
外部リソースからの検索結果は、MetaEditorツールボックスウィンドウに表示されます。
long DatabaseImport( int database, // DatabaseOpenで受け取られるデータベースハンドル const string table, // データ挿入先のテーブル名 const string filename, // データインポート元のファイル名 uint flags, // フラグの組み合わせ const string separator, // データ区切り記号 ulong skip_rows, // スキップする最初の行の数 const string skip_comments // コメントを定義する文字列 );
long DatabaseExport( int database, // DatabaseOpenで受け取られるデータベースハンドル const string table_or_sql, // テーブル名またはSQLクエリ const string filename, // データエクスポートのCSVファイル名 uint flags, // フラグの組み合わせ const string separator // CSVファイルのデータ区切り記号 );
long DatabasePrint( int database, // DatabaseOpenで受け取られるデータベースハンドル const string table_or_sql, // テーブルまたはSQLクエリ uint flags // フラグの組み合わせ );
int FileSelectDialog( string caption, // ウィンドウタイトル string initial_dir, // 初めのディレクトリ string filter, // 拡張子フィルタ uint flags, // フラグの組み合わせ string& filenames[], // ファイル名の配列 string default_filename // デフォルトファイル名 );この新しい関数により、MQL5プログラムとの効率的なユーザー対話が可能になります。
#property optimization_chart_mode "3d,InpX,InpY"このプロパティにより、最適化の最後に開くチャートのタイプ、およびX軸とY軸のプログラムパラメータを設定できます。
double MathArctan2( double y // 点のy座標 double x // 点のx座標 );
ユーザインターフェイスの翻訳にパンジャブ語(インド)を追加しました。
ドキュメントが更新されました。
クラッシュログに基づいた修正を加えました。
更新はLive Updateシステムを介して利用できるようになります。
class CFoo { public: struct Item { int x; }; }; //+------------------------------------------------------------------+ class CBar { public: struct Item { int x; }; }; CBar::Item item; // proper declaration of the Item structure from the Bar class Item item; // incorrect declarationMQL5アプリケーションでサードパーティのコード/ライブラリを使用する場合により多くの可能性を提供する名前空間サポートを追加しました。
#define PrintFunctionName() Print(__FUNCTION__) namespace NS { void func() { PrintFunctionName(); } struct C { int x; C() { PrintFunctionName(); }; }; } struct C { int x; C() { PrintFunctionName(); }; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void func() { PrintFunctionName(); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { func(); NS::func(); C c; NS::C ac; }実行の結果、次の結果が出力されます。
class A { void operator=(const A &)=delete; // prohibit object copying operator }; class B : public A { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { A a1,a2; B b1,b2; a1=a2; b1=b2; }この例では、コンパイラは「a1=a2」と「b1=b2」に対してエラーを返します。
input group "Signal" input int ExtBBPeriod = 20; // Bollinger Bands period input double ExtBBDeviation=2.0; // deviation input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15; // BB timeframe input group "Trend" input int ExtMAPeriod = 13; // Moving Average period input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15; // MA timeframe input group "ExitRules" input bool ExtUseSL = true; // use StopLoss input int Ext_SL_Points = 50; // StopLoss in points input bool ExtUseTP = false; // use TakeProfit input int Ext_TP_Points = 100; // TakeProfit in points input bool ExtUseTS = true; // use Trailing Stop input int Ext_TS_Points = 30; // Trailing Stop in points input group "MoneyManagement" sinput double ExtInitialLot =0.1; // initial lot value input bool ExtUseAutoLot =true; // automatic lot calculation input group "Auxiliary" sinput int ExtMagicNumber =123456; // EA Magic Number sinput bool ExtDebugMessage=true; // print debug messagesこのようなエキスパートアドバイザーがストラテジーテスターで起動されると、グループ名をダブルクリックすることで入力パラメーターブロックを縮小または展開でき、グループ内のすべてのパラメータは単一のチェックボックスで最適化のために選択できます。
#import "lib.dll" int func(); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int func() { return(0); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print( func() ); }以前のバージョンでは、コンパイル中に以下のエラーが発生しました。
'func' - ambiguous call to overloaded function with the same parameters could be one of 2 function(s) int func() int func()このバージョンでは、より高い優先度を持つ内蔵MQL5関数がデフォルトで使用されるようになったのでエラーは発生しません。インポートされた関数は、 スコープを明示的に指定することで呼び出すことができます。
void OnStart() { Print( lib::func() ); }
if(condition) { //--- }
// before styling ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop); // after styling ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);
// before styling if(x==1&y!=2) { int a=0; } // after styling if(x == 1 & y != 2) { int a = 0; }
ユーザインターフェイスが18言語で新たに利用できるようになりました。
プラットフォームインターフェイスは現在、50の言語で利用可能で、40億人以上に使用されています。
インターフェイスの言語を設定するには、ターミナルの上部にある[表示\言語]メニューに移動します。
ドキュメントが更新されました。
クラッシュログに基づいた修正を加えました。
更新はLive Updateシステムを介して利用できるようになります。
Pythonは、スクリプトやアプリケーションを開発するための現代の高水準プログラミング言語です。これには、機械学習、プロセスの自動化、およびデータ分析と視覚化のための複数のライブラリが含まれています。
MetaTrader Pythonパッケージは、MetaTrader 5ターミナルから直接プロセッサ間通信を介して交換データを効率的かつ迅速に取得するように設計されています。このルートで受信したデータは、統計計算や機械学習にも使用できます。
接続
関数
bool TesterDeposit( double money // 入金額 );
ドキュメントが更新されました。
更新はLiveUpdateシステムから利用できます。
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>(); }
ドキュメントを更新しました。