English Русский 中文 Español Deutsch Português
MT4TerminalSync - MetaTrader 4 ターミナルの同期のためのシステム

MT4TerminalSync - MetaTrader 4 ターミナルの同期のためのシステム

MetaTrader 4 | 15 3月 2016, 17:21
623 0
Valery V. Chesnokov
Valery V. Chesnokov

はじめに

数多くのトレーダーやトレーディングシステムの開発者は技術的な目的で MetaTrader 4 ターミナルのコピーを複数持っているものです。異なるチャートやアカウントはそこで開かれ、異なる戦略が検証されます。これと共にときどきターミナルの新バージョンが発表され、新しいインディケータや Expert Advisor が登場し、別の MQL コードが書かれます。

遅かれ早かれ通常の操作にはターミナルのコピーを使用した同期の問題に直面します。それにはこのタスクを行うテクニカルツールが必要です。本稿では、その作成手順を見、最終的にすぐに使えるツールを取得します。



本稿の対象者は?

本稿では複数のターミナルコピーの同期用プログラムシステム例を作成することを分析します。

したがって、読者としては、以下の 2 とおりの人が興味を持つことでしょう。
1. ユーザー、トレーダーは本稿のすぐに使えるプログラムシステムを利用できます。
2. プロの MQL コード以上のプログラムシステム開発者は個人的な学習のために本システムを分析することができます。おそらく有益なコメントを提供してくれることでしょう。



ターミナル同期システムの必要性

みなさんがターミナルのコピーを8件持っているとします。そして新に発表されたバージョンをダウンロードします。どのように?ダウンロードしたファイル https://www.metaquotes.net/files/mt4setup.exe を順番に8回クリックし、コピーのあるフォルダを指定しますか?まあ、それはむつかしいことではありません。

そして、新しいインディケータを3つ、Expert Advisor を2つ、ライブラリを1つ作成したとします。そうすると8個のターミナルコピーで異なる状況でそれらを検証する必要があります。MQL のソースファイルと ex4 のバイナリファイルを更新する必要があるということです。上で挙げたものをすべて1つのターミナルのソースコピーで作成しました。それらを別のコピーに複製する必要があります。ソースターミナルのサブフォルダを一つずつ開きます。エキスパート、それからexperts\indicators と experts\libraries です。そして、Windows エクスプローラーの各サブフォルダで必要なファイルをコピーし、更新したターミナルコピーそれぞれで同じフォルダを開き、そこにファイルをコピーするのです。各ソースサブフォルダと更新したターミナルの各類似サブフォルダに対して、この二巡を繰り返すのです。

そのような状況はおなじみのものですか?頻繁にあるなら、おそらくこの作業を簡素化することを考えたことがあるはずです。そのため、この作業を自動化できるツールが必要なのです。すなわち、ボタンを1つクリックすると更新がスタートする方がよいということです。そして、ソース制御ターミナルに対するのと同様に、この手順のためのパラメータ設定、ターミナル更新の数多くの方法、更新対象ファイルへのフィルター設定機能があるとひじょうに便利です。たとえば、同期システムはターミナルフォルダへのパスにエラーがあるかどうか表示してくれます。

それはこのツールが柔軟で効率的であることを意味します。そのようなツールを作成してみます。



技術規定

本稿は『オペレーションシステム関数やその他プログラム作成手法を使用してMQL4 プログラムの機能を広げる』がテーマです。使用されている手段が MetaTrader 4 ターミナルや MQL 言語に留まらないのはそのためです。

ここで作成し説明しているターミナルコピーのための同期システムには、操作のために以下のプログラム特性が必要です。
1. オペレーションシステム-Microsoft Windows 2000 SP4 以降、Microsoft Windows 2000、Windows XP、 Windows Server 2003、Windows Server 2003 R2、Windows Vista
2. プラットフォーム Microsoft .NET フレームワーク 2.0。以下のマイクロソフトのウェブサイトからダウンロード可能です。
2.1. http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 -x86 プロセッサ用ロシア語のディストリビューション(RUS)。ファイルdotnetfx.exe、サイズ 22 Mb
2.2. http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 -x86 プロセッサ用英語のディストリビューション(EN)。ファイル dotnetfx.exe、サイズ 22 Mb
2.3. http://www.microsoft.com/downloads/details.aspx?familyid=B44A0000-ACF8-4FA1-AFFB-40E78D788B00&displaylang=en -x64 プロセッサ用英語のディストリビューション(EN)。ファイル NetFx64.exe、サイズ 45 Mb
3. デスクトップシングル・ユーザー・データベース・サーバー Microsoft SQL サーバー 2005 コンパクトエディション。SQL サーバーのこの改訂は8個の dll ファイルで構成されています。それは以下でダウンロード可能です。http://www.microsoft.com/downloads/details.aspx?FamilyId=%2085E0C3CE-3FA1-453A-8CE9-AF6CA20946C3&displaylang=enSQLServerCE31-EN.msiファイルサイズ 1.7 Mb。詳しくは MSDN 記事 "Installing on a Desktop and a Tablet PC (SQL Server Compact Edition)" を参照ください。それは以下にあります。http://technet.microsoft.com/en-us/library/bb190958.aspx (EN)

以下は開発者向けの追加情報です。

指定の技術によって同様のシステムを作成したい場合、Microsoft Visual Studio 2005、たとえば C# または VB.NET 言語向け Visual Studio 2005 Express Editions の改訂版の一つが必要です。以下で Microsoft® Visual Studio® 2005 エキスプレス エディション サービスパック1 をダウンロートすることができます:/go?link=http://www.microsoft.com/en-us/download/details.aspx?id=804。また以下で Visual Studio 2005 のトライアルバージョンを注文することも可能です:http://www.microsoft.com/emea/msdn/visualstudio/ruru/getthetrials/。または、Visual Studio 'Orcas' のより新しいバージョンを使用することが可能です。これは本稿執筆中は Beta 1バージョンでした。その仮称 Orcas は Visual Studio 2008 になりました。Visual Studio およびその新バージョンについての更新情報は以下で入手可能です:http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx

すでに必要なファイルを2つ(dotnetfx.exe とx86 Windows バージョン向け SQLServerCE31-EN.msi)お持ちの方は、 Microsoft .NET 2.0 と SQL をインストールするのに2~3分しかかかりません。ファイルをダウンロートし、「次へ」と「完了」をクリックするだけです。



システムコンポーネント

列挙した外部ソフトウェア以外に、同期システム自体は以下に述べる数々のファイルで構成されています。

ここでファイル .exe と .dll はバイナリ実行可能コードで、ファイル config.xml はスタートシェル(詳しくは後に説明します) の設定ファイルです。ファイル MT4TerminalSync.sdf はシステムデータベース、ファイル Log.txt はシステム操作の全エラー記録を持ちます。

注意:ネットワークプログラム開発のイデオロギーにより、特ににターミナルサーバーにおける作業ではシステムは実行される元の現フォルダに記録をする権利がありません。そのため、ユーザーを個別に参照するすべての設定ファイル、エラーログファイル、その他はユーザープロフィールの Windows フォルダに保存する必要があります。ただし、実際には例であり値を完全に持つネットワークシステムのフレームワークであるこのシステムでは、それを参照しているファイルはすべて個別のユーザーによる利用を簡単にするため1つのフォルダに格納されています。

完全な同期システムをインストールする必要はありません。前に挙げた外部プログラムをインストールし、システムファイルをローカルハードディスクのフォルダにコピーすればよいだけです。



作成したシステムのイデオロギー

そのようなシステムを作成する方法はいろいろあります。開発者は各自独自の方法を見つけ出すことができます。提供する方法のメリットは、少なくとも実在しており動作している、ということです。

このソリューションに必要なものはすべて、スクリプト言語で利用可能です。たとえば VBS ファイルや xcopy のようなコマンドなどです。たぶん与えられたシステムよりも簡単に見えるでしょう。しかし私見では、その方法にはいくつかの欠点があります。

1. ソーススクリプトテキストにシステム設定(ソース/行先ターミナルへのパス、ファイル拡張子)をインクルードする必要がある。もしくは、.ini ファイルのパーサー(アナライザー)を自分で書く必要がある。

2. ファイルコピーエラーの制御がほとんどできない。のようなコマンドによってエラーがあるかどうか見つけるのはそんなに簡単ではありません。また、閲覧できるような単一形式でエラーを収集することもしかり、です。

よって、最大限の拡張の柔軟性のために全設定をデータベースに格納し、コンパイルしたシステムを作成することにしました。システム作成について、よくわかっているマイクロソフトの開発技術を利用しようと思いました。この範囲で以下のツールを選択しました。



システムデータベースの記述

システムパラメータ(パス、ファイルマスク等)を保存するには異なるバリアントが使用可能です。すべてをプログラムコードに書き、テキスト ini ファイル、XML ファイル、または DBMS を使用します。私は自分のメソッドを作り出すのではなく、DBMS の機能を利用するために、最後のバリアントを選択しました。

どの DBMS を選択するか?関連基準は2つあります。
1. おそらくシステムはコーポレートツールとして使用されます。すなわちそれはネットワーク・マルチユーザー・システムとなります。それはマイクロソフト アクセスファイルのデータベースまたはサーバーのデータベースとして取り入れることを意味します。ただしアクセスは誰にもインストールはできません。なぜならマイクロソフトオフィス・プロフェッショナル・エディション版にインクルードされているからです。2. システムは個人ユーザーによっても使用されます。それはシステムサイズが減らされ、展開プロセスが簡素化される必要があることを意味します。この観点から、SQL サーバーには無料改訂があります。エクスプレス・エディションとコンパクト・エディションです。私はサイズ最小化に SQL サーバー 2005 コンパクト・エディション改訂版を選びました。それをインストールするには1ファイルで1.7 Mb 取ります。

SQL 2005 コンパクト・エディションサーバーの改訂版により、これら基準をコンバインすることができます。-デスクトップ、ダウンロードに簡潔な バージョンの DBMS ですが、それは同期システムのコーポレート ネットワーク バージョンに移動する際、必要なオプションをすべて表示してくれます。 SQL サーバー 2005 -エクスプレス・エディションから始まる何か、のより強力な改訂版でデータベースを再作成する必要があります。

われわれはデータベースを選択しました。これから何を格納しようとしているのでしょうか?

注意:以降の項をより理解するには、データベースに対して構築された依頼の言語であるSQL -構造化照会言語に関する知識が必要です。 この言語について詳しくは以下のウィキペディアを参照ください:https://en.wikipedia.org/wiki/SQL

また以下は使用されているSQL データベースのテーブルのスクリーンショットです。

このテーブルは次のシステムパラメータについての情報を格納します。
1. テーブル CopyExtentions -コピーされたファイルのマスク。おそらく相対パスを持ちます。:*.ini, experts\*.mq?, experts\indicators\*.ex4.
2. テーブル DestiantionTerminal -ターミナルを更新する絶対パス。このターミナルコピーはテンプレートであるソースターミナルコピーから更新されます。各ユーザープロフィール(テーブル UserProfile を参照)に対しては、ターミナルの特定番号があります。
3. テーブル SourceTerminal -ソースターミナルコピーへの絶対パス。このソースターミナルはテーブル DestiantionTerminal からのターミナルコピーを更新するためのチェックテンプレートです。各ユーザーは自分のソースターミナルを持ちます。
4. テーブル UserProfile -システムユーザーリスト(ユーザーのプロフィール)。これはマルチユーザーシステムを作成するためのエレメントで、ここでは各ユーザーが自身のプロフィールへのリンクと共にターミナルパス設定を格納します。個人ユーザーは理論的にグループ化されたターミナル設定を異なるプロフィールに格納することができます。たとえば、それを2つのグループに分けることができるのです。一つは頻繁に更新され、もう一つはあまり更新されないものです。グループ間で切り替えをすると、どのグループを更新するか選択することができます。不要なプロフィールはブロックできます。システムに1つだけブロックされていないプロフィールがあれば、それはクライアントシステム項目で自動的に有効なものとして選択されます。

上に示した画像はデータベーステーブルの細かいスキームは表示していません。ですから、フィールドタイプを持つ SQL テーブルの画像をもう少し考察します。残念ながら、コンパクト・エディタにはデータベース図のオプションはないので、テーブルそれぞれが個別に表示されます。

以下がテーブル CopyExtentions のスキームです。

次はテーブル DestinationTerminal のスキームです。

次はテーブル SourceTerminal のスキームです。

そしてテーブル UserProfile のスキームです。

上の画像は全データベーステーブルの詳細スキームを表示しています。



システムのクライアント部分のイデオロギー作成

技術詳細を述べる本項は、おそらく一般ユーザーよりもプロのシステム開発者にとってより興味深い部分だろうと思います。

クライアント部分は実際 Windows Forms タイプのアプリケーションです。すなわちいわゆるファット .NET クライアントです。みなさんはクライアントをインストールする必要はありません。そのファイルをすべてローカルハードディスクのフォルダ1つにコピーすればよいだけです。

ここではそのシステムを開発する私のイデオロギーの短い説明をします。
私は、そのようなシステムはモジュール原理で作成するべきであると思っています。そこには少なくとも2つのメリットがあります。
1. レンガのようにモジュールで組み立てられた必要なすべての関数を持つ最終アプリケーションを取得します。ユーザーは何十という異なるプログラムを起動する必要がなく、つねに必要な関数すべてを持つプログラム1件だけ起動するのです。モジュールリストはポジションによってシステムユーザーごとに個別に調整可能です。2. 開発のモジュール原則により、システム開発プロセスを増減できます。すなわち、開発ボリュームを増やすことにより多くの開発者を魅了するのです。

私が提案することは正確にはどういうことでしょうか?私は、.NET アセンブリをダウンロードするための Windows Forms クラスのモジュール-アプリケーション-シェルを開始し、.NET コンポーネント(ユーザーコントロール)、すなわち、技術的に標準的な .NET 1.1 または 2.0 クラス System.Windows.Forms.UserControl から作成されるあらゆるクラスを起動する枠組みを作成したのです。

シェルは同じフォルダにある XML ファイルconfig.xml のコンテンツによって実行されます。以下がこのシェルです。

私は、そのメリットはプログラム言語と開発環境(IDE)の幅広い選択にあると思います。実際、それらは NET 1.1 下の Borland Developer Studio 2006 (BDS)、NET 1.1 下の Microsoft Visual Studio .NET 2003、.NET 2.0 下の Microsoft Visual Studio 2005、.NET 2.0 下の Visual Studio Orcas のような .NET Framework 1.1 および 2.0バージョンに対する .NET 互換のあらゆる IDE です。

そこでWindows コントロール ライブラリタイプとユーザーコントロール タイプのプロジェクトを作成できる CLR 互換言語はどんなものでも使用できますが、標準的プログラム言語からだと C# および VB.NETを持ちます。

以下はコンポーネント操作の一例です。それは Visual Studio .NET 2003 で作成され、シェルにロードされています。

Visual Studio Orcas March 2007 CTPで作成されたコンポーネントがもう一例あります。

これでクライアント部分を作成する手法を分析しました。ここからその作成に移ります。



システムのクライアント部

同期システムコンポーネント作成には Microsoft Visual Studio 2005 を利用します。
Windows コントロールライブラリタイプのプロジェクトを作成します。

システムコンポーネント(ユーザーコントロール)はすべて1つのプロジェクトにあることとなります。物理的な結果はプロジェクトフォルダのファイル MT4TSyncUCLib.dll に入ります。そこにはコンポーネントのバイナリコードがあります。適切なプログラムコンポーネントでプロジェクトを埋めます。

結果として、画像に示されている複数のファイルを取得します。

これらはデータベースに格納されるシステムエンティティそれぞれに対するコンポーネントであるとともにプロジェクトリソースでもあります。ソースターミナル、多くの宛先端末、多くのコピー済みファイルのマスク、同期実行のコンポーネントです。プロジェクトには、羅列された各エンティティ、データ私の手順と標準コンポーネント PropertyGrid (プロパティを持つテーブル)におけるそれらの変数に対するクラスもあります。

注意:本稿はプログラムシステムを開発するための細かな指導を目的としていません。そのため、クライアント部分については、チェックポイント-システムにインクルードされた実行可能なモジュール、の説明を確認してください。

以下はXML ファイル config.xml のコンフィギュレーションで、システムの可視コンポーネントすべての説明をしています。

ファイル config.xml のコンテンツからわかるように、私はユーザーメニューを2つのパートに分けました。同期開始プロパーとシステムセットアップの管理部分です。それは相対的な分割で、 XML テキストファイルを編集することでユーザーによって変更可能ですが、主要情報を乱すことはできません。タグ、 <menu>、セクション <items> に入り、タグ <item> の位置を属性 type="folder" および type="control"(最終のカスタムコンポーネント) で変更します。
システムはメニューのユーザープロフィールを2つインクルードします。『管理者(全)』と呼ばれるすべてのコンポーネントを持つ完全なものと、『同期開始』という名前で開始コンポーネントしか持たない短いものです。

それではシステム自体を示します。
以下の画像は下から上へメニューですべての可視システムコンポーネントを表示しています。

システムはすべて起動し、メニュープロフィール-全体またはシンプル版、を選択します。

以下は管理するユーザーのコンポーネントです。

ユーザープロフィールのブロックは、削除せず不要なプロフィールを無効にするためのものです。有効なプロフィールを1つ残すことで、プロフィールを選択する時間の節約になります。なぜなら、システム自体は残りのプロフィールを選択するためです。もちろんすべてのユーザープロフィールをブロックする必要はありません。システムは必要な処理を実行することを許可しないか、コンポーネント呼び出しにエラーを表示し、有効なプロフィールを選択することを要求します。

以下はコピー済みファイルのマスクを変数するコンポーネントです。

私は、コピー済みファイルは以下のマスクで構成されていると思います。

ここで、システム設定を簡素化するために私が作成した論理フィールド サブフォルダのインクルードに注目してください。実際、たとえばファイル *.mq4 および *.ex4 は異なるサブフォルダのターミナル-エキスパート、エキスポート/インディケータ等、に入っています。各サブフォルダを追加しなくていいように、ターミナルフォルダのルートから1レコードを指定することができます。すなわち、相対パスなしでサブフォルダで検索機能を有効にするのです。そうするとシステムは、ソースターミナルのサブフォルダをすべてチェックし、適切な宛先サブフォルダに同じマスクでファイルをコピーします。

そしてもう一つ秘密があります。マスクを見てください。ターミナルには拡張子 mq4、mqh、mqt を持つファイルがあります。それらすべてを指定しなくてすむように、以下のマスクのレコードを1件指定します。 *.mq? は前の3つのファイルタイプを持つものです。'?' はマスク内の記号を置き換えます。* は記号の空いている番号を置き換えます。マスク *.ex? についても同様です。これはバイナリ MQL ファイルであるファイル *.exe(ターミナルの実行可能ファイル) と *.ex4 に対するマスクです。便利ですよね?

以下は同期した宛先ターミナルの管理コンポーネントです。

ターミナルへのパスを選択するとき、右側のフィールドの端に3個の点があるボタンが表示されます。それをクリックすると、ディスク(「オープンし ダイアログ」)からファイルを選択するための標準的な Windows のウィンドウが開きます。必要なフォルダからファイ ルterminal.exe を指定します。

ソースターミナルのコンポーネントはほとんど宛先ターミナルの選択に類似しています。

なぜ私がデータベースでソースのテーブルと宛先ターミナルを分けたか不思議に思われるかもしれません。宛先ターミナルに対しては、ソースターミナルと分けることで、追加機能を指示することに注意します。たとえば、それらには基部に、更新後開始するというフィールドがあります。それは宛先ターミナルコンポーネントで確認できます。その作成のために、ファイルへの完全パスに対する手順作成と2行目にそれの開始、とコード行を2行書かなくてはいけないとしても、それはシステムでは処理されません。

その拡張の結果、システムは追加の機能と関数を取得するのです。

そして最終的に、同期の最後で最も重要なコンポーネントが起動します。それのためにこのシステムは作成されたのです。

前出のコンポーネントはすべてシステムパラメータ設定のために使用され、それが最大限柔軟になるようにしています。このコンポーネントでボタン 開始する をクリックし、同期プロセスを開始します。すなわち必要なファイルのコピーです。グループボックス 処理のログで、行った同期のチェックポイント、すなわちフォルダへのパスとコピー済みファイル数、を確認することができます。

コピーの途中でエラーがあれば、グループ エラーログ に赤で印がついて表示されます。それらはまたシステムフォルダのファイル Log.txt にも記録されます。その方法は情報を伝えるメッセージを重大なエラーメッセージと区別するのにも使われます。エラーの理由は、たとえばソースターミナルまたは宛先ターミナルへのパスが誤っている(基部に入れられるが、フォルダがハードディスクから削除された)、または読み込みのアクセスすらできない独占的ファイルのブロックにおけるエラーなどです。

このブロックには選択がありました。コピーを個別フローに選び出すか、システム処理の主要フローの境界内に残すかどちらかです。最初のバリアントは、コピーの手続き中、ユーザーのアクションに対するシステムの良い反応を返します。すなわちシステム『フェード』はありません。ただしフローの動作は優先順位が低くなり、おそらくコピー速度は落ちると思われます。私は、それをコンポーネント内のタイマーでハンドラとし、現在の主要フロー内部にコピーを残すこととしました。これにより、システムはタイマーイベントの期間中にのみマウスのクリックに応答することができるのです。停止する をクリックすることで同期処理を停止することができます。システムは、宛先ターミナルのリスト上を移動するとき、クリックを処理します。



おわりに

われわれはタスクをなんとかこなし、テクニカルツールを取得しました。それは、パラメータ設定、ログ、潜在的エラー表示などを行う同期システムです。ターミナルのルートフォルダのファイル INSTALL.LOG、セクション[CopyFiles]からコピー済みファイルに対するマスクを取り込みました。おそらく処理中、みなさんは同期すべきその他拡張子を持つファイルをもっと見つけることでしょう。本稿に対してコメントでみなさんの意見をシェアしていただけたら、他のユーザーにとってひじょうに有用で興味深いことでしょう。

既製バイナリプロジェクトとシステムモジュールのコード例は本稿に添付があります。ご活用ください。


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

添付されたファイル |
ctrlSync_cs.txt (11.84 KB)
MT4TerminalSync.zip (56.85 KB)
TestProject.zip (42.87 KB)
CSV ファイルを介した MetaTrader 4 と Matlab 間の連携 CSV ファイルを介した MetaTrader 4 と Matlab 間の連携
CSV ファイルを介した MetaTrader 4 と Matlab 間のデータ配列交換作成法の段階的手順。
非標準自動取引 非標準自動取引
詳しく市場分析をせず MT4 のプラットフォームで行う首尾よく快適な取引。そんなこと、できるのでしょうか?そのような取引を実際に実装することはできますか?私はできると思います。特に自動取引では!
楽になりエラーが少なくてすむように EA コードを短くする方法 楽になりエラーが少なくてすむように EA コードを短くする方法
本稿で述べられるシンプルなコンセプトにより、MQL4 で自動売買システムを作成する人が既存のトレーディングシステムをシンプルにすることができ、またコードが短くなることで新規にシステムを作成するのに必要な時間を削減することもできます。
効率的な Expert Advisor 操作のための仲介会社の自動選択 効率的な Expert Advisor 操作のための仲介会社の自動選択
効率的な Expert Advisor 操作のために適切な仲介会社を見つける必要がある、ということは秘密ではありません。本稿ではこの検索のシステム的アプローチを説明します。みなさんは異なるターミナルで作業しながら dll によってプログラムを作成する手順に詳しくなることでしょう。