FX自動売買「Dr.EAのブログ」

最新情報

Build600以降の新MQL4



ビルド600からMQL4の仕様が大きく変わりました。
ビルド509以前のMT4はいずれ利用できなくなるので
新旧MQL4の変更点などを確認しておきましょう。


MQL4 ReferenceのUpdated MQL4の和訳


■MQL4の新機能

ビルド600からMQL4プログラミング言語は完全に改訂され、MQL5レベルに達しています。今あなたは統合されたメタエディタ・ライブラリー・デバッグツールを使用してMQL4/5で売買ロボットを開発することができます。

MQL4は、学習のしやすさとメタトレーダー4ターミナルを使用している何年もの間に生成されたコードが膨大な量のため、自動システムの開発者の間で人気があります。しかし、言語はその主な利点から生じるいくつかの欠点を持っています - 簡単なプログラミング言語は、複雑なシステムの開発を許可せず、また高レベル言語からデバッグライブラリの移植を妨げます。そのため、我々はそれにMQL5言語の関数を最大限実装して完全にMQL4の機能を維持することを決定しました。つまり、OOP(オブジェクト指向プログラミング)とネイティブコードコンパイラを含むすべての強力なMQL5機能は、MQL4で利用できるようになります。

これを達成するために、我々はMQL4とMQL5の両方の言語を自動的にサポートする統一されたコンパイラを開発しました。 メタエディターもメタトレーダー4とメタトレーダー5プラットフォーム用の両方の統一されたアプリケーションとなります。このように、いずれかのバージョンからMQL4とMQL5の両方をコンパイルすることが可能となります。MQL5ストレージも利用可能になります。

MQL4アプリケーションの保護は、MQL5レベルに上昇。新しいEX4/EX5ファイルは、重大かつ完全に改訂された保護を備えています。これは安全なEX4アプリケーションマーケットもメタトレーダー4で利用可能になることを意味しています。

また、MQL4は現在新しいグラフィカル・オブジェクトとチャートを操作するための新しい関数を備えています。MQL5標準ライブラリはMQL4に移植され、独自のグラフィカル・インターフェースと取引のライブラリを作成する際に新たな可能性を開発者に提供します。今あなたはリソースを使用してメタトレーダー4で本格的なアプリケーションを作成することができます。


■MQL4言語の変更点

新しいデータ型char, short, long, uchar, ushort, uint, ulong, doubleが追加された。これは他のC++のような言語からのコード転写を可能にします。様々な種類のデータが異なる速度で処理される。整数データが最も速く処理される。特別なコプロセッサは、倍精度浮動小数点数型を処理するために使用される。しかし、浮動小数点型の内部表示の複雑さにより整数よりも遅く処理される。型キャストも実装されている。

文字列は、以前はANSI形式(シングルバイト)であったが、現在、Unicode形式で表示されます。プログラムがDLLを使用し、それらに文字列変数を渡した場合、それは考慮されるべきである。

定義済みのボリュームの変数はlong型になりました。ボリュームにアクセスするための時系列もlong型の配列で構成されています。オーバーフローエラーを回避するために、古いMQL4プログラムではターゲットの型にこのタイプを持っているデータという明示的なキャストを使用することをお勧めします。

構造体、クラス、オブジェクトポインタ、void型、オブジェクトが自分自身への参照ができるthisキーワードが追加されました。次のようにすべてのオブジェクト指向プログラミングの標準がサポートされています。

・カプセル化およびタイプの拡張性
・継承(インヘリタンス)
・多相性(ポリモーフィズム)
・多重定義(オーバーロード)
・仮想関数
http://docs.mql4.com/basis/oop

OOPではクラスを使用してプログラムを開発することができます。これは、デバッグや大規模なアプリケーションの開発を容易にするだけでなく、継承(インヘリタンス)によって以前に生成されたコードを何度も再利用する機能を提供します。しかし、それは以前のように手続き指向のスタイルではMQL4コードが生成できないことを意味するものではありません。新しい機能を必要としない場合は、あなたが過去に行ったようにプログラムを開発することができます。

定義済みの関数init(), deinit(), start()は互換性のため残っていますが、現在 OnInit(), OnDeinit(), OnStart(), OnCalculate(), OnTick()が代わりに使用できます。また、新しい定義済みのハンドラ関数 OnTimer(), OnChartEvent(), OnTester()が実装されています。以前のMQL4では、定義済みの関数は任意のパラメータと任意の戻り値の型を持つことができ、シグネチャではなく名前で呼び出すことができた。新しいMQL4では、すべての定義済みの関数が厳密に呼び出し形式に対応する必要があります。言い換えれば、正確にパラメータや戻り値の型のセットを定義している必要があります。

現在、変数名は特殊文字とポイントを含めることはできず、新しいMQL4言語のキーワードは、名前として使用することはできません。古いMQL4プログラムは、コンパイラのメッセージを従いうことで簡単にすべてのそのようなエラーを補正するために新しいコンパイラで再コンパイルすることができます。

優先順位のルールは現在のC言語の標準と一致します。よくわからない場合は、明らかに信頼性を高めるために優先順位を示すため古いMQL4アプリに括弧を挿入することができます。

現在、すべての式が計算され、チェックが実行される古いMQL4のバージョンとは違って、短縮された条件チェックが論理演算に使用されている。下記のような論理「AND」を使用した2つの条件のチェックがあるとします。

if(condition1 && condition2)
{
// some block of statements
}

もし、式condition1がfalseの場合、「false && true」は依然として「false」に等しいので、式condition2の計算は行われません。

ArrayCopyRates()は動作が変更されました。double[][6]配列への仮想コピーの代わりに、現在はMqlRates[]配列への仮想コピーを実行します。double[][6]配列へのコピーは互換性のためそのまま残っていますが、そのコピーは実際であって仮想ではありません。

ファイル操作では、同時に開くことのできるファイル数は現在64に達しています。古いMQL4では32でした。最近まで、ファイルは常にFILE_SHARE_READまたはFILE_SHARE_WRITEモードで開かれていました。現在、必要なオープンモードが明示的に指定されている必要があります。

関数の働き、変数の有効範囲、ローカル配列のメモリ開放についても変更されました。変更数が大きいので、以前のアプローチでのMQL4プログラム開発との互換性を最大限提供するため、新しく「#property strict」プロパティーが導入されました。MQLウィザードを使用して新しいMQL4アプリケーションを作成する場合、このプロパティは常にテンプレートに追加されます。

下記のように、DateTime型の文字列表現は、コンパイルモードによって異なります。

datetime date=D'2014.03.05 15:46:58';
string str="mydate="+date;
//--- str="mydate=1394034418" - 旧コンパイラ/新コンパイラ #property strictなし
//--- str="mydate=2014.03.05 15:46:58" - 新コンパイラ #property strictあり

下記の表は、旧MQL4・新MQL4(strict指定なし)・新MQL4(strict指定あり)の違いを含んでいます。

※strict指定の仕方
#property strict

コンパイラーによる違いの表

1.は、旧MQL4について
2.は、新MQL4(strict指定なし)について
3.は、新MQL4(strict指定あり)について

1.init(), start(), deinit()のエントリポイントは任意のパラメータと任意の戻り値の型を持ってもよい
2.init(), start(), deinit()は、互換性の為そのまま残っているが、新たなOnInit(), OnStart(), OnCalculate(), OnTick(), OnTimer(), OnChartEvent(), OnTester(), OnDeinit()は厳密に呼び出し形式に対応している必要がある
3.同上

1.事実上(予約語を除く)任意の変数名には、特殊文字やポイントなどが可能である
2.変数名は特殊文字や点を持つことはできません。予約語のリストが拡張されました。そのため、short, long, constなどのような広範囲にわたる単語が名前として使用することができません
3.同上

1.変数の有効範囲は(ネストされたブロック内でも)宣言からその関数の終わりまで
2.同上
3.変数の有効範囲は宣言からその変数を宣言したブロックの終わりまで

1.(グローバルでもローカルでも)全ての変数が0に暗黙的に初期化される
2.同上
3.グローバル変数のみ初期化されます。ローカル変数では、文字列のみ暗黙的に初期化される

1.ローカル配列はその関数を終えても開放されません
2.ローカル配列はその関数を終えると開放されます
3.ローカル配列は{}のブロックを終えると開放されます

1.範囲外配列の参照はクリティカルエラーを起こしません
2.同上、構造体とクラスについては重要なエラーなので除きます
3.範囲外配列の参照はプログラム停止のクリティカルエラーを起こします

1.構造体とクラスはありません
2.構造体とクラスが存在する。追加のデータ型が実装されている
3.同上

1.文字列はシングルバイトです。datetime型は32ビットの整数です。定義済みのボリュームの変数はdouble型です
2.文字列はUnicodeです。datetime型は64ビットの整数です。定義済みのボリュームの変数はlong型です
3.同上

1.ArrayCopyRates()は、double[][6]配列への仮想コピーが行われる
2.ArrayCopyRates()はMqlRates[]配列への仮想コピーが行われる。double[][6]配列へのコピーは互換性のためそのまま残っていますが、そのコピーは実際であって仮想ではありません
3.同上

1.関数は型を持っていても値を返さなくてもよい。こうするため、return(0)が自動的に関数の最後にコンパイラによって挿入されている
2.同上
3.任意の型の関数は値を返す必要があります

1.同時オープンファイル数は32
2.同時オープンファイル数は64
3.同上

1.ファイルは常にFILE_SHARE_READまたはFILE_SHARE_WRITEモードで開かれる
2.FILE_SHARE_READおよび/またはFILE_SHARE_WRITEを明示的に指定する必要があります
3.同上

※範囲外配列のエラーに特別な注意を払ってください - 多くの古いカスタムインジケータはチャート上で起動した際、新コンパイラのstrictモードではこのエラーが表示されます。原因を見つけて、それを排除することをお勧めします。
※※新しいMQL4とMQL5では、FILE_SHARE_READとFILE_SHARE_WRITEフラグがファイル共有使用モードを担当しています。

■ファイル構造の変更点

メタトレーダー4クライアントターミナルのビルド509以前のビルドでは、下記のように全てのMQL4アプリケーションが<ターミナルインストールフォルダ>\experts\ルートディレクトリのサブディレクトリに格納されていました。

・\experts - エキパートアドバイザー (取引ロボット)
・\experts\indicators - カスタムインジケータ
・\experts\scripts - スクリプト (チャート上で1回実行されるMQL4アプリケーション)
・\include - 他のプログラムに実装する MQH と MQ4 ファイルのソースコード
・\libraries - MQ4形式のソースコードと、それらからコンパイルされたEX4形式の実行可能ファイルのライブラリ。これらは他のMQL4プログラムによってそこに含まれる関数の動的呼び出しのために使用される
・\files - 特別な「ファイルのサンドボックス」。MQL4アプリケーションでは、このディレクトリ内のみファイル操作を実行することが許可されています。

新しいMQL4バージョンでは、ソースコードを格納するためのファイル構造が変更されました。現在、すべてのMQL4のアプリケーションは<data_folder>\ MQL4\ディレクトリの適切なフォルダに配置する必要があります。

・\Experts - エキパートアドバイザー (取引ロボット)
・\Indicators - カスタムインジケータ
・\Scripts - スクリプト (チャート上で1回実行されるMQL4アプリケーション)
・\Include - 他のプログラムに実装する MQH と MQ4 ファイルのソースコード
・\Libraries - MQ4形式のソースコードと、それらからコンパイルされたEX4形式の実行可能ファイルのライブラリ。これらは他のMQL4プログラムによってそこに含まれる関数の動的呼び出しのために使用される
・\Images - リソースに使用するための画像ファイル
・\Files - 特別な「ファイルのサンドボックス」。MQL4アプリケーションでは、このディレクトリ内のみファイル操作を実行することが許可されています。

ビルド509からさらに新しいバージョンにメタトレーダー4ターミナルを更新する際に、以前のバージョンの標準のルートディレクトリにある全てのMQ4, MQH, EX4ファイルは自動的にコピーされ、適切なフォルダに再配置されます。ユーザーによって追加されたサブフォルダ及びそこに含まれるファイルは(コピー)処理されません。必要に応じてそれらを手動で新しい場所に再配置する必要があります。

どのファイルやフォルダも、更新時に削除されません!使用されているファイルのパスを含むすべてのファイルコピー操作は、更新中はターミナルの実行記録で固定されている。

古いEX4ファイルの新しいバージョンへの自動再コンパイルは更新中には実行されません。ユーザーは、どのソースコードを新しいEX4バージョンにコンパイルされるべきかを自由に決定できます。すべての古いEX4は、新たなメタトレーダー4ターミナルで動作します。新しいコンパイラでコンパイルEX4ライブラリはまた、新しいバージョンでコンパイルされているEX4プログラムから呼び出すことができます。新しいコンパイラでコンパイルされたEX4ライブラリは、新しいバージョンでコンパイルされているEX4プログラムからのみ呼び出すことができます。

いくつかのケースでは、ソースファイルで(相対パスが変更されている場合)#includeでインクルードされているファイルのパスを編集する必要があるかもしれません。メタエディタのルートディレクトリは現在<data_folder>\MQL4\であることに注意してください。すべてのプログラムは、正しいサブディレクトリに配置する必要があります。

お使いのコンピュータ上でメタトレーダー4ターミナルの各コピー用のデータフォルダ(<data_folder>)は、ターミナルまたはMetaEditorの「ファイル」→「データフォルダを開く」で見つけることができます。

2014年5月24日|コメント (9)

カテゴリー:MQL言語リファレンス

カスタムインジケータの値を出力するEA


iCustom()関数でカスタムインジケータを使ってEAを作る際、カスタムインジケータのラインインデックスが何番のものを使えばよいかは、インジケータ設定ダイアログの「色の設定」でなんとなくわかります。

下の図は、VQの「色の設定」タブで、#0(インデックス0番)の幅を最大にして表示させた状態のものです。

vq_index.png

色や幅で、下記の表の通りの番号になることがわかります。

0番Yellowライン
1番Green上昇ライン
2番Red下降ライン
3番Yellow↑矢印
4番Aqua↓矢印

使用する番号がわかったら、次にその番号がどのようになればシグナルとするかを知る必要があります。

CustomChecker_EAv2

パラメータIndicatorNameにカスタムインジケータ名を入力すれば、#0~#7までの3本前・2本前・1本前・現在の値をチャート上に出力してくれるEAです。

→CustomChecker_EAv2ダウンロード

下の図をみてください。

vq_index2.png

もし、現在の足の始値の時点で売りシグナル発生にしたい場合は、「4番のShift1がEMPTY_VALUEではない」という条件にすればよいですね。

   double vq4_1 = iCustom(NULL, 0, "VQ", ・・・, 4, 1);

   int sign = 0;
   if(vq4_1 != EMPTY_VALUE) sign = -1;

という感じです。

もし、矢印を使わず赤色ライン確定で売りシグナルにしたい場合はもう少し複雑になります。

   double vq2_1 = iCustom(NULL, 0, "VQ", ・・・, 2, 1);
   double vq2_2 = iCustom(NULL, 0, "VQ", ・・・, 2, 2);
   double vq2_3 = iCustom(NULL, 0, "VQ", ・・・, 2, 3);

   int sign = 0;
   if(vq2_3 == EMPTY_VALUE &&
      vq2_2 != EMPTY_VALUE &&
      vq2_1 != EMPTY_VALUE) sign = -1;

という感じです。

ラインの場合は矢印等とは違い、各バーの間の部分を直線でつないで表示するようになっています。

なので、上記売りシグナルの条件の意味は「3本前と2本前の間は表示なし、かつ、2本前と1本前の間は表示あり」ということになります。

複数のラインインデックスで1本のラインを描画するインジケータの場合で重なって表示している場合は、インデックスの大きいほうが優先して表示され小さいほうは後ろに隠れてしまうので注意してください。(VQの#0黄色ラインのように。)

カスタムインジケータをEAにする方法の関連記事

2014年1月15日|コメント (6)

カテゴリー:MetaTrader EA

MetaTrader 4 IEDのbeta版について


こんにちわ!
メルマガ、再開しました!

再開第1号は、以下のような内容です。


最近、MetaTrader 4 の仕様変更スピードがあがってきているように感じます。

これからもっと、大きな変更がありそうです。

重要そうな記事を訳してみますので、間違っていたら連絡ください^^;


■記事URL
http://forum.mql4.com/57476

------------------------------------------------------------------------
新しいMQL4コンパイラとエディタを含むメタトレーダー4 IDE(統合開発環境)のベータ版
------------------------------------------------------------------------

メタクォーツ社 2013.08.26 14:12


次のトピックの続き:

・今後のメタトレーダー4とMQL4のアップグレード - 大きな変更が進行中(MQL4フォーラム)
→http://forum.mql4.com/56885

・興味深いニュース:今後のメタトレーダー4とMQL4のアップグレード - 大きな変更が進行中(MQL5フォーラム)
→http://www.mql5.com/en/forum/13116


メタトレーダー4/MQL4とメタトレーダー5/MQL5に共通のIDEのベータ版を、以下に添付します。
これは、みんなの情報のための暫定版です。


旧MQL4バージョンとの違い:

・AND/OR理論演算の優先順位を変更しました。現在、すべてが標準C/C++に似ています。

・論理式の短縮評価を導入しました。現在、論理式がその最後に到達する前に評価された場合、C/C++と同じように、後の残りの式は評価されません。

・現在、整数のみがswitch文で使われます。以前は、実数も使用することができました。

・.(ドット記号)は、もう変数名に使用することはできません。また、 @(アットマーク)、$(ドルマーク)、?(クェッションマーク)も変数名で使用することはできません。

・start()関数の必要条件を厳しくしました。以前は、start()関数にパラメータ(仮引数)を設定することができました。現在、init(), start(), deinit(), OnInit(), OnStart(), OnTick(), OnTimer() やその他のエントリーポイントは、それらのシグニチャに正確に一致する必要があります。

※その他のエントリーポイント
MQL5におけるOnTrade(), OnTradeTransaction()

※シグニチャ
関数名と関数の引数の型の並び方の組み合わせ

・キーワード(予約語)の拡張により、現在では、long, float, const, virtual, input, delete, new, do, char のような(変数・関数)名は使用することができません。

・現在、インポートされたDLLの関数は、MQL5と同じように、パラメータ(引数)としてMQLの文字列配列を受けとることはできません。

・定義済み変数 _Period, _Symbol, _LastError, _CriticalError, _StopFlag, _Point, _Digits, _UninitReason, _RandomSeed を取り入れました。これらは、既存のソースファイル内で同じ名前で宣言された単純変数と衝突するかもしれません。

・datetime型は、MQL5のように、8バイトのものになっています。


これらの違いは大したことはなく、コード内で容易に修正することができます。(これらの変更の)見返りに、私たちは多数のMQL5の機能、実行速度の向上、より厳密な優良性操作を手に入れます。

私たちは十分な意見を受け取り、開発者を準備するために、来月中に一般公開テストを実施するつもりです。

MQL5フォーラムでの話し合い:http://www.mql5.com/en/forum/13655

添付たzipファイルは、次のリンクからダウンロードできます:http://forum.mql4.com/c/forum/2013/08/MetaTrader4.Beta.IDE_1.zip


■編集後記

>・AND/OR理論演算の優先順位を変更しました。

if(条件A && 条件B || 条件C)

とすると、今のMT4のMetaEditorだと、
「条件Bまたは条件C」から判定するんですよね。。


>・論理式の短縮評価を導入しました。

if(条件A && 条件B && 条件C && ・・・)

というように&&が多くなるif文の場合、処理時間短縮のために

if(条件A) if(条件B) if(条件C) ・・・

なんてしてましたけど、その必要が無いということですね^^


>・定義済み変数 _Period, _Symbol, _LastError, _・・・

IEDのベータ版では、今のところ変数_Symbolを宣言すると

declaration of '_Symbol' hides predefined variable

といった警告が出て、変数が上書きされるようです。


これからの動き、目が離せませんね。

最後までお読み頂きありがとうございました!

メタトレ!メールマガジン
登録・解除: http://www.mag2.com/m/0000255713.html

ご意見・ご要望は、お問い合わせフォームからお願い致します。

でわでわ!

タグ

2013年9月 7日|コメント (0)

カテゴリー:MT4 IED

シグナル系カスタムインジケーターで自動売買するEA


すごいシグナルインジケータがあるんです!


Aさん:
す、すごいシグナルがあるんです!矢印で売買タイミングを知らせてくれるカスタムインジケータでトレードしているんですが、最近の利益がハンパないんです!
トレーリング機能と時間指定機能つきでバックテスト可能なEAの作成を頼んだ場合、いくらになりますか??

慶次:
新規EA作成と各機能、合計●万円になります。

Aさん:
えええぇぇぇ・・・orz

こんにちわ!
上記のようなやりとり、たまにあります^^;

矢印やドットなどのマークで売買タイミングをお知らせしてくれるカスタムインジケータで、バックテストやフォワードテストをしてみたいと思うときってありますよね?

そんなときは、iCustom()関数でシグナル発生を感知して自動売買をするEAを作成します。でも、EAの作り方がわからない場合は、できる人やEA作成代行業者に頼むことになります。
そこで・・・

シグナルインジケータ用のEAを作成しました!

パラメータで、カスタムインジケータ名を指定して各設定をするだけで、そのシグナルインジケータでのバックテスト・フォワードテストが可能なEAを作成しました。

→ダウンロードはこちら
※2013.07.25 トレーリング部分修正でファイル更新済み

使用できるインジケータの条件として、矢印やドットなどのマークで描画されるシグナル系のインジケータということが大前提です。その他、オブジェクトでの描画ではないことや、リペイントしないこと(リペイントについて理解されている方はOK)などの条件があります。

パラメータ説明

------Main Setting------
Lotsロット数
TakeProfitリミットのPIPS数 0の場合リミットなし
StopLossストップロスのPIPS数 0の場合ストップロスなし
TrailingStopトレーリングのPIPS数 0の場合トレーリングなし
Slippage許容スリッページ
MagicNumberマジックナンバー
------Entry Time Setting------
UseTradeTime時間指定機能使用スイッチ
Trade_StartHourトレード許可開始時間
Trade_StartMinuteトレード許可開始分
Trade_EndHourトレード許可終了時間
Trade_EndMinuteトレード許可終了分
------Signal Setting------
CustomIndicatorName使用するカスタムインジケータ名
BuyEntrySignalIndex買いエントリシグナルの番号
BuyEntrySignalShift買いエントリシグナルのシフト数
SellEntrySignalIndex売りエントリシグナルの番号
SellEntrySignalShift売りエントリシグナルのシフト数
BuyExitSignalIndex買いポジション決済シグナルの番号
BuyExitSignalShift買いポジション決済シグナルのシフト数
SellExitSignalIndex売りポジション決済シグナルの番号
SellExitSignalShift売りポジション決済シグナルのシフト数
------Parameter of Singal Indicator Setting------
Para1カスタムインジケータのパラメータ1つ目
Para2カスタムインジケータのパラメータ2つ目
Para3カスタムインジケータのパラメータ3つ目
:
Para20カスタムインジケータのパラメータ20個目

TakeProfit・StopLoss・TrailingStopで、使用しない機能は0以下の数値を指定します。

BuyEntrySignalIndex・SellEntrySignalIndex・BuyExitSignalIndex・SellExitSignalIndexで使用しないシグナルはマイナスの数値を指定します。

シフト数とは、何本前のローソク足の位置に表示されていたらシグナルとみなすという本数を指定します。0を指定した場合は、現在変動中のローソク足の位置に表示された場合にシグナル発生とみなします。

カスタムインジケータのパラメータは、1つ目から順番に指定していきます。カスタムインジケータのパラメータ数が20個未満の場合、指定するパラメータが余りますが、余った分は無視してください。
(例えば、カスタムインジケータのパラメータ数が5つの場合は、Para6~Para20を無視します)

カスタムインジケータのパラメータのうち、文字列で指定する場合で、トレードに影響するパラメータの場合は、その部分の「extern double」を「extern string」にして、「= 0;」を「= "";」としてコンパイルしてください。

シグナルの番号とは?

カスタムインジケータのシグナルには、0から始まる番号が割り振ってあります。
その番号を調べるには、チャートにそのインジケータをアタッチしたときに出るダイアログの【色の設定】タブをクリックして対応するシグナルの色の#の番号を見ます。色だけでは識別できない場合は、幅を変更してチャートに表示させ、大きさが変わったものを見て識別します。

いろいろと試してみてくださいね^^
でわでわ^^

カスタムインジケータをEAにする方法の関連記事

タグ

2013年6月 8日|コメント (14)

カテゴリー:MetaTrader EA

EA作成ノウハウ本


MetaTrader 4で始める FX自動売買システム作成の教科書

EA作成ノウハウ本【MetaTrader 4で始める FX自動売買システム作成の教科書】
2013年3月15日発売決定!

MetaTrader 4で始める FX自動売買システム作成の教科書
MetaTrader 4で始める FX自動売買システム作成の教科書(amazon.co.jp)

著者紹介

●星野 慶次(ほしの けいじ)
1977年生まれ。2007年にFX投資を始める。MetaTrader 4のEAによる自動売買を知り、MQLを習得。EA作成プログラミングに関するブログを開始。2008年にEA作成代行会社を設立。2009年にEA作成セミナーを名古屋で開催。EA作成代行サイト「Dr.EA」を公開。EA開発チーム「Project V Japan」結成。2012年、「MQLアカデミー」のメイン講師として活動開始。

EA作成ノウハウ本について

こんにちわ!
星野慶次です^^

大変長らくお待たせ致しましたm(_ _;)m
ブログ読者さんからのメッセージやメールで、『EA作成の本は出さないの?』とか『早く小学生でも解るようなEA作成方法についての本を出してください』とのお声を頂き続け、ようやくご期待にお応えできるEA作成入門書を出版させて頂くことができました^^

EAについて

『EAってなに?』という方の為に、少し説明します。
EAとは、Expert Advisor(エキスパートアドバイザー)の略で、自動売買をするソフトです。 MetaTrader(メタトレーダー)というFXなどの取引をするプラットフォーム上で動作します。

EAを作成・編集することができるようになると、FXトレード手法のちょっとしたアイデアをEA化して、バックテストで過去の成績をすぐに調べることができるようになります。
また、無料EAをダウンロードして、より良い成績を出すEAにカスタマイズすることができます。
さらに、優秀なEAが出来上がったら、リアルタイムチャートで稼動させて、24時間自動売買してくれます。
もうPC画面の前にずっと座っている必要が無くなります^^

対象:プログラミング未経験者~

プログラミングをしたことがない方でも、楽しくMetaTrader4(MT4)のEA作成方法をマスターできるようにできるだけ分かりやすくしていますので、無理なくEA作成方法(MQL4プログラミング)を習得できます。

実は私、
・・・
数年前までプログラミング、ド素人でした(汗)

しかし今では、自由自在にEA作成ができるようになり、年間300を超えるEA・インジケータの作成・編集をするプロとして、セミナーやウェブ上でEA作成方法を教えられるまでになりました。

こんな私だからこそ、プログラミング未経験者にも分かるように、EA作成のノウハウをお伝えすることができるのです(^^)v

お住まいの最寄の書店で、一度手に取り内容を確認してみてくださいm(_ _)m

→MetaTrader 4で始める FX自動売買システム作成の教科書(amazon.co.jp)

→【電子書籍】MetaTrader 4で始める FX自動売買システム作成の教科書(PuBooks)

タグ

2013年3月10日|コメント (10)

カテゴリー:MetaTrader EA, 投資書籍

MQL4セミナーDVD発売のお知らせ


【EA作成パーフェクトマスタースクール】

2012年2月11日に開催したセミナーで、場所・時間の都合上、参加できなかった方のために
セミナーDVDを販売することになりました!

お申し込みページ
→EA作成パーフェクトマスタースクールDVDお申し込み
※DVD販売終了しました。動画配信スクール開校決定!詳細はhttp://www.mql-academy.co.jp/

実際にEAを編集しながら説明しておりますので、
EA編集スキルアップに是非ご活用ください^^

2012年5月16日|

カテゴリー:MT4 EAセミナー

MQL4セミナー開催のお知らせ


【MQLセミナー】

日にち:2012年2月11日(土・祝)
時間: 13:00 ~ 17:45

セミナー会場:東京都墨田区錦糸町周辺

募集人数:20名
(先着順となりますので、お早めにご連絡ください。)

セミナー内容: これからMQLプログラミングを習得する方のための入門編から
高度なEAを作成するための応用編までです。
(EA作成のセミナーです。インジケータ作成の内容は含まれておりません。)

【懇親会】

同日 18:30~20:30 懇親会開催

両方参加でも、どちらか片方でもOKです^^

日中は都合が都合が悪くセミナーに参加できない方でも、夜の懇親会にご参加いただけます。
また、セミナーのお申し込みを頂いた方は、当日不参加であっても特典は得られます。
特典のみ欲しい方は、お申し込み時にセミナー不参加というご連絡をください。

お申し込みページ
→EA作成マスターセミナー お申し込み
(お申し込み受付終了致しました)

2012年1月21日|

カテゴリー:MT4 EAセミナー

csvファイルで指定した時間にEAを休止させるインジケータ


EAの休止時間をcsvファイルで指定する方法

で紹介したEAで、稼働中のすべてのEAを休止状態にしたいというお問い合わせがありました。
確か・・・
faiさんが以前に・・・
http://d.hatena.ne.jp/fai_fx/20091201/1259610071

同じ感じですが、一応インジケータを作りました^^; ファイルはこちら→NoTrade_ReadFile_Ind.zip

インジケータですので、experts→indicatorsフォルダに保存してくださいね。

faiさんがおっしゃっているように、
エントリ後に、ストップ値変更でストップを入れるEAを稼動させている場合は、
決済(ストップ設定)用のEAが必要になります。

実際に使用される場合は、十分動作確認をしてから使用してください^^;
パラメータ『SwitchEAs』をfalseにした場合は、EA休止機能が無効になり、テキスト表示だけになります。
でわでわ^^

タグ

2011年2月 6日|コメント (5)

カテゴリー:indicators

EA Sample_NoTrade_ReadFile.mq4の解説


今回のテーマは、

EAの休止時間をcsvファイルで指定する方法

で紹介したサンプルEAファイルの説明です。

→Sample_NoTrade_ReadFile.mq4とNoTradeTime.csvをダウンロード

Sample_NoTrade_ReadFile.mq4の解説

まずは、『NoTradeTime.csv』ファイルを見てみましょう。

2010.02.18 01:30
2010.02.18 03:00
2010.02.18 04:30

というように、『yyyy.mm.dd hh.mm』の日付フォーマットで、
トレードしない時間が入力してあります。

『Sample_NoTrade_ReadFile』は、
この時間データを読み取り、その前後の何分間は、
No Trade Time Zone
とチャート上に表示させるようになっています。

早速、メタエディタでSample_NoTrade_ReadFile.mq4の中身を見てみましょう^^

パラメータ

extern int     NoTradeBeforeMin  = 20;
extern int     NoTradeAfterMin   = 30;
extern string  NoTradeFileName   = "NoTradeTime.csv";
NoTradeBeforeMin ・・・ 指定時間の何分前からかを指定
NoTradeAfterMin  ・・・ 指定時間の何分後までかを指定
NoTradeFileName  ・・・ データのファイル名を指定

です。

そして、記憶用変数(グローバル変数)で

int BeforSecond;
int AfterSecond;

パラメータ『NoTradeBeforeMin』と『NoTradeAfterMin』の
『分指定』を『秒指定』に変換したものを格納しておく変数です。

その下に、どの関数からも共通で使える変数(グローバル変数)で

datetime LastNoTradeData;
datetime NextNoTradeData;

『LastNoTradeData』は、
csvファイルで指定した時間データのうち、
過去のもので現在の時間に一番近い時間データを格納しておく変数です。

『NextNoTradeData』は、
csvファイルで指定した時間データのうち、
未来のもので現在の時間に一番近い時間データを格納しておく変数です。

その下に、

bool NoData;
datetime Now;

『NoData』は、
もうcsvファイルの指定時間をチェックする必要がなくなったら、
NoDataをtrueにして、ファイルを開かないようにするための変数です。

『Now』は、
現在の時間データを代入する変数です。

次は、EA開始時に1度だけ実行されるinit()関数です。

int init()
{
   BeforSecond = NoTradeBeforeMin * 60;
   AfterSecond = NoTradeAfterMin  * 60;
   
   LastNoTradeData = -1;
   NextNoTradeData = -1;
   
   NoData = false;
   return(0);
}

『BeforSecond』『AfterSecond』に、
パラメータ『NoTradeBeforeMin』『NoTradeAfterMin』の、
秒に換算したものを代入します。

今後、時間の比較を、秒単位で進行する時間データで行うためです。

パラメータ『NoTradeBeforeMin』『NoTradeAfterMin』の役割は、
ここで終了し、もう使いません^^;

『LastNoTradeData』『NextNoTradeData』に、マイナス値を入します。
これらの変数にマイナス値が入っている場合は、
それに対応するデータが空っぽというルールにするためです。

『NoData』にfalseを代入しておきます。

ここで、グローバル変数の宣言部分に初期値を代入しておくのと、
init()関数内で値を代入するのでは、若干動作が違います。

グローバル変数は、記憶力を持った変数で、
EAをチャートから外したときに、はじめて格納されている値がなくなります。

もし、仮に『NoData』を、
グローバル変数宣言
bool NoData = false;
として、init()関数ではfalseを代入しなかった場合、
EA稼動中、NoDataがtrueになったあと、 csvファイルの時間データを更新して、 再読込させようと、EAのパラメータ等を入力するプロパティウィンドウを開き、 OKボタンで再スタートさせたとします。
しかし、EAは前回稼動していたグローバル変数の値が残っていますので、 NoDataがtrueのままで、csvファイルを読まないようになってしまいます。

そうならないためにも、init()関数の中で
稼動開始時にグローバル変数に入っていて欲しい値を代入しておきます。

次に、ティック毎に実行されるstart()関数です。

int start()
{
   Now = TimeCurrent();

一番最初に、『Now』に現在の時間データ(時刻1秒ごとに付けられている整数)を代入しておきます。

次に、

   if(Now >= NextNoTradeData && !NoData) SetNoTradeData();

として、

もし現在の時間が、前回記憶していた『未来の直近の時間データ』に到達し、
かつ、まだファイルをチェックする必要がある場合は、
 SetNoTradeData()関数を実行する。

という意味です。
SetNoTradeData()関数では、時間指定のcsvファイルを開いて、
『LastNoTradeData』『NextNoTradeData』『NoData』に
それぞれの値を代入する関数として、start()関数の下に作ってあります。
後で、見てみましょう。

次に、

   static datetime PrintData;
   if(NextNoTradeData > 0 && NextNoTradeData != PrintData)
   {
      Print("No Trade: ", TimeToStr(NextNoTradeData - BeforSecond, 
                 TIME_DATE | TIME_MINUTES), " - ",
                          TimeToStr(NextNoTradeData, 
                 TIME_DATE | TIME_MINUTES), " - ",
                          TimeToStr(NextNoTradeData+AfterSecond, 
                 TIME_DATE | TIME_MINUTES));
      PrintData = NextNoTradeData;
   }

として、

記憶用変数『PrintData』を宣言。
もし、『NextNoTradeData』に指定時間が入っていて、その値が『PrintData』と違う場合、
 『No Trade: 取引停止開始時刻 - 取引停止指定時刻 - 取引停止終了時刻』を出力。
 『PrintData』に『NextNoTradeData』の値を代入。

という意味です。
新しく『未来の直近の時間データ』になった場合は、
1度、操作履歴にその時刻と停止開始・終了時刻を出力するということです。

次に、

   if(IsNoTradeTime()) return(0);
IsNoTradeTime()関数がtrueを返したら、ここで実行終了。

という意味です。

IsNoTradeTime()関数は、それぞれの時間データから
現在取引停止の時間かどうかを判断し、停止の時間の場合、
チャート上に『No Trade Time Zone』と表示させ、trueを返します。
そうでない場合は、falseを返します。後で、見てみましょう。

そして、return(0)で実行終了とならなかった場合は、次の

   Comment("Trade Time Zone");

チャート上に『Trade Time Zone』と表示させます。

これで、start()関数は終了ですね。

つぎは、SetNoTradeData()関数とIsNoTradeTime()を見ていきます^0^

つづく^^

タグ

2010年10月 1日|コメント (4)

カテゴリー:EAの作成方法

FXDDの8%入金ボーナスでEAプレゼント


FXDDの8%入金ボーナス
に新規口座開設で参加された方で、

お問い合わせフォーム
に、お名前・メールアドレスをご記入の上
参加口座のアカウントIDと特典EA希望とご記入頂いた方全員に
EAプレゼントいたします!!

EAは、レンジ相場に有効なあの手法です^^

是非、ご参加ください^^

でわ、このへんで^^

2010年3月 3日|コメント (5)

カテゴリー:FXブローカー