English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
新しいMetaTrader 5 とMQL5の登場

新しいMetaTrader 5 とMQL5の登場

MetaTrader 5 | 13 8月 2015, 09:08
2 311 0
Yuriy Zaytsev
Yuriy Zaytsev

簡単に紹介します。

図 1. これはPhotoshopではありません。MQL5です。

MQL5とMT5で興味深かったほとんどの事がとても高いレベルで実行されています。

MQL5の基本的な変更点はオブジェクト指向プログラミングの見え方にあります。OOPについては深く掘り下げません。 ただ単に専門的な知識のあるプログラマーには応用が増えます。MQL4が気に入っていた人でOOP開発者を知らない人は OOPなしでMQL4スタイルを使ってMQL5に書ける可能性ができました。違いは再度学ばなければならない関数にあります。

簡単な例を取りあげてみましょう。 AskとBidはもう存在しません。売値Bidを手に入れるには下の関数が呼び出されなければなりません。

SymbolInfoDouble(Symbol(),SYMBOL_BID);

もうよく使われていたLow[0] や iLow ( Symbol(), PERIOD_D1, 0 )はありませんが、簡単にもう一度作ることが可能です。ヒストリーデータを組み込んだ新しい関数によって、あるポイントから別のポイント、あるバーから別のバー、またはある時間から別の時間におけるヒストリーデータをメモリーに読み込むことが可能になりました。以前のデータシリーズでは全可視範囲の読み込みがメモリーにロードされました。それが必要か否かにかかわらず読み込まれました。そしてM1を読み込む必要がある場合、1999 (ヒストリーがあった場合) から現在の日時分まで読み込まれました。

今は必要な範囲だけが読み込まれます。これでかなりの時間とメモリが節約できます。

MqlRates rates_arrayG[];
    Int Bar=30; // read only 30 bars stating from the zero one
iCopBar=CopyRates(Symbol(),PERIOD_M1,0,Bar,rates_arrayG);

この特徴は時間とお金の両方を節約します。

このような関数の変更に脅かされることはありません。ただ単に新しいアナログ関数を学ぶ時間が必要なだけです。

私が待ち望んでいたMQLの革新的な関数はこちらになります。

  • OnTimer() - タイマーイベントを処理する関数 (もうExpert Advisorにループをかけて入ってくるTickのある一定の独立した周期性と働くようにする必要がありません);
  • OnTrade() - レードイベントを処理する関数 - トレードポジションオープニング、 クロージングやボリューム変更
  • OnChartEvent() - マウスやキーボードによるイベント処理。

もう少し詳しく見ていきましょう。

OnTimer() 関数はタイマーがOnInit プリセット関数 (EA初期化イベントのプロセッサー)で先に初期化されている場合に呼ばれます。

例:

//+------------------------------------------------------------------+
    //|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1); //each second we'll refer to OnTimer()
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit()
  {
   EventKillTimer(); // canceling of timer reference must be called at exit
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime str1;
   TimeGMT(str1); // new function to get GMT time
   Comment(str1.hour
           ,str1.min
           ,str1.sec
           ,str1.day
           ,str1.mon
           ,str1.year
           ,str1.day_of_year
           ,OrdersTotal()
           ,PositionsTotal()
           );
  }

そのため、以前のようにティック受け取り時だけでなくリアルタイムプログラムを可能にしたタイマーからもコントロールできます。この可能性によりもっと精巧なシステムを作ることができます。

私はOnTrade() 関数が好きです。この関数は次の取引イベントのいずれかがあった時に呼ばれます。オーダーの発注、ストップロスまたはテイクプロフィットの起動、 ストップロスまたはテイクプロフィットレベルの変化、指値注文の発注/削除。

これで取引オプションに関連したイベントをモニターすることがより簡単になりました。これでティックやバーにおけるオーダー状況をループでチェックする必要がなくなりました。このようなループはMQL4に使われていますが、このことによって最適化に重要なプログラムのパーフォーマンスがかなり落ちます。

OnChartEvent() 関数を見てみましょう。この関数の呼び出しはいくつかのイベントによって実行されます。すべての関数をテストすることはできませんでしたが、リストは素晴らしいものでした。:

  • CHARTEVENT_KEYDOWN — キー押下イベント;
  • CHARTEVENT_OBJECT_CLICK — チャートに属するグラフィカルオブジェク上のマウスクリックのイベント;
  • CHARTEVENT_OBJECT_DRAG — マウスが行うグラフィカルオブジェクト移動イベント;
  • CHARTEVENT_OBJECT_ENDEDIT — テキスト編集エンドのイベント;
  • CHARTEVENT_CUSTOM+n — カスタマイズの識別子イベント;
  • CHARTEVENT_CUSTOM_LAST — 最後のもの。

新しい機能性レベルでのトレーディングとグラフィックを管理する可能性 - これが開発者が約束した事だ。

新しいグラフィカルオブジェクト、ボタン、入力スペース登場。チャート管理が素晴らしくなりました。ファイルから画像を挿入することもできます。- スペシャルデザインを好む人には多くの可能性を与えます。これはPhotoshopではなく、MQL5とMetaTrader 5がこなした成果です。 新しい特徴として自分のボタンと追加入力スペースを作れます。すべてのオーダーをクローズするボタンやプリセットストップとtakeパラメーター付きの クイック売り、買いボタンがその例です。


図2. グラフィカルオブジェクトで情報パネルを作ることができます。

図2. グラフィカルオブジェクトで情報パネルを作ることが可能

好ましくない事実が一つあります。インディケーターからオブジェクトを作ることはできません。インディケーターのパフォーマンスを速くするために意図的になされたことです。うれしいことに彼らはそれをわかっていて、おそらくいくつかのExpert Advisorを一つのチャートで開始できるようにするでしょう。こうしてトレーディングなくオブジェクト付きでEA-インディケーターを作れるようになります。このようなインディケーターは今でも作れます。それはインディケーターのように操作します。今や、トレーディング EAを一つのチャートで開始し、EAが2つ目でオブジェクトを作成し、2つの間でエクスチェンジを実行することでタスクが解決されます。

例えば私はMQL4とMQL5から数時間かけてなんとかブレイクスルー インディケーターを変換させることができました。ほとんどの時間が関数の学習とデバッグに取られました。MQL5ではコードが短くなりました。

ターミナルについてはタイムフレームの数に感心しました。私の意見では多すぎるくらいです。でも分のタイムフレームがたくさんあることはトレーダーの方によっては便利かもしれません。タイムフレームを自由に作成するステップが今は1つしかありません。今やすべてのデータが分タイムフレームとして保存されるので、異なったタイムフレームの同期にもう問題がありません。これは重要な技術的ソルーションです。

HISTORYカタログにはもう別のタイムフレームのファイルがありません。


図 3. ヒストリー全体が一つのファイルに保管されています。

もう一つの良い点は今やログをクリアできることです。

図 4. ボタンひとつでEAジャーナルをクリア、不要なメッセージを全て削除します。

これはMetaTrader5のただの簡単なレビューです。このような短時間ではシステムのすべての特徴を述べることができません。2009年9月9日に試用を開始しました。これはシンボル的な日付でラッキーナンバーになると信じています。ベータ版のMetaTrader5とMQL5を手に入れて数日が経ちました。まだ全ての特徴を使ってはいませんが、すでに関心させられました。

MetaQuoteのマジシャンは素晴らしい製品を作りました。私は25年の経験がある開発者で多くのプロジェクトの始まりを見てきましたから断言できます!

敬具
Yuriy Zaytsev

Skype: yurazyuraz
yzh@mail.ru

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1

新しいレールへの第一歩: MQL5内のカスタムインディケーター 新しいレールへの第一歩: MQL5内のカスタムインディケーター
新しいターミナルと言語のすべての可能性と特徴をリストすることはしません。それらはあまりにも多くありすぎ、新規の特徴によっては別の記事で説明するに値します。またここにはオブジェクト指向プログラミングで書かれたコードがありません。開発者にとってさらに有利になる点として、ただ単に言及するにはあまりにも真剣なトピックです。本記事ではインディケーターとその構造・図面・タイプ・プログラミング の詳細についてMQL4と比較しながら考察します。初心者にも経験のある開発者にも本記事が有益となる事を願います。おそらく何か新しく学べることがあると思います。
EAのパラメータの選択における テスト(最適化) テクニックとその基準 EAのパラメータの選択における テスト(最適化) テクニックとその基準
テストにおける聖杯を見つけることは難しくありませんが、取り除くことは非常に困難です。この記事では、ユーザーの負荷を最小に抑え、最大の効果を得られるように、自動化されたグループとEAの選定について説明します。
MQL5: 自分のインディケーターの作成 MQL5: 自分のインディケーターの作成
インディケーターとは何でしょう?スクリーン上に便利な方法で表示したい計算値の一式です。値の一式は配列としてプログラムに表されます。そのため、インディケーターの作成は配列 (価格配列) を取り扱い、他の配列 (インディケーター 値)に結果を記録するアルゴリズムを書くことを意味します。True Strength Indexの作成について説明することで、MQL5でどのようにインディケーターを書くか説明します。
1分でできるデータ品質評価 1分でできるデータ品質評価
1分でできるデータ品質評価