EA(20)indicators(3)その他(17)完全自動売買(10)投資戦術の検証(3)投資書籍(4)アーカイブ2014年5月(1)2014年1月(1)2013年9月(1)2013年6月(1)2013年3月(1)2012年5月(1)2012年1月(1)2011年2月(1)2010年10月(1)2010年3月(1)2010年2月(3)2010年1月(2)2009年10月(3)2009年8月(3)2009年5月(3)2009年1月(1)2008年12月(3)2008年11月(3)2008年9月(1)2008年8月(1)2008年7月(2)2008年6月(1)2008年5月(3)2008年4月(2)2008年3月(2)2008年2月(3)2008年1月(12)2007年12月(15)2007年11月(5)2007年10月(16)検索プロフィールDr.EAのアシスタント?をしている慶次です。自動売買のEA作成をお手伝いが出来ればと思っています。当サイトの更新情報はRSSフィードでも配信しています。Build600以降の新MQL4ビルド600からMQL4の仕様が大きく変わりました。ビルド509以前のMT4はいずれ利用できなくなるので新旧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で本格的なアプリケーションを作成することができます。doubleが追加された。これは他のC++のような言語からのコード転写を可能にします。様々な種類のデータが異なる速度で処理される。整数データが最も速く処理される。処理するために使用される。浮動小数点型の内部表示の複雑さにより整数よりも遅く処理される。型キャストも実装されている。文字列は、以前はANSI形式(シングルバイト)であったが、現在、Unicode形式で表示されます。プログラムがDLLを使用し、それらに文字列変数を渡した場合、それは考慮されるべきである。定義済みのボリュームの変数はlong型になりました。ボリュームにアクセスするための時系列もlong型の配列で構成されています。オーバーフローエラーを回避するために、古いMQL4プログラムではターゲットの型にこのタイプを持っているデータという明示的なキャストを使用することをお勧めします。構造体、クラス、オブジェクトポインタ、void型、オブジェクトが自分自身への参照ができるthisキーワードが追加されました。次のようにすべてのオブジェクト指向プログラミングの標準がサポートされています。・継承(インヘリタンス)・多相性(ポリモーフィズム)・多重定義(オーバーロード)・仮想関数http://docs.mql4.com/basis/oopOOPではクラスを使用してプログラムを開発することができます。これは、デバッグや大規模なアプリケーションの開発を容易にするだけでなく、継承(インヘリタンス)によって以前に生成されたコードを何度も再利用する機能を提供します。それは以前のように手続き指向のスタイルではMQL4コードが生成できないことを意味するものではありません。新しい機能を必要としない場合は、あなたが過去に行ったようにプログラムを開発することができます。OnTick()が代わりに使用できます。OnTester()が実装されています。以前のMQL4では、定義済みの関数は任意のパラメータと任意の戻り値の型を持つことができ、シグネチャではなく名前で呼び出すことができた。新しいMQL4では、すべての定義済みの関数が厳密に呼び出し形式に対応する必要があります。言い換えれば、正確にパラメータや戻り値の型のセットを定義している必要があります。現在、変数名は特殊文字とポイントを含めることはできず、新しいMQL4言語のキーワードは、名前として使用することはできません。古いMQL4プログラムは、コンパイラのメッセージを従いうことで簡単にすべてのそのようなエラーを補正するために新しいコンパイラで再コンパイルすることができます。優先順位のルールは現在のC言語の標準と一致します。わからない場合は、明らかに信頼性を高めるために優先順位を示すため古いMQL4アプリに括弧を挿入することができます。現在、すべての式が計算され、チェックが実行される古いMQL4のバージョンとは違って、短縮された条件チェックが論理演算に使用されている。下記のような論理「AND」を使用した2つの条件のチェックがあるとします。true」は依然として「false」に等しいので、式condition2の計算は行われません。ArrayCopyRates()は動作が変更されました。double[][6]配列への仮想コピーの代わりに、現在はMqlRates[]配列への仮想コピーを実行します。double[][6]配列へのコピーは互換性のためそのまま残っていますが、そのコピーは実際であって仮想ではありません。ファイル操作では、同時に開くことのできるファイル数は現在64に達しています。古いMQL4では32でした。最近まで、ファイルは常にFILE_SHARE_READまたはFILE_SHARE_WRITEモードで開かれていました。現在、必要なオープンモードが明示的に指定されている必要があります。関数の働き、変数の有効範囲、ローカル配列のメモリ開放についても変更されました。strict」プロパティーが導入されました。MQLウィザードを使用して新しいMQL4アプリケーションを作成する場合、このプロパティは常にテンプレートに追加されます。下記のように、DateTime型の文字列表現は、コンパイルモードによって異なります。strictあり下記の表は、旧MQL4・新MQL4(strict指定なし)・新MQL4(strict指定あり)の違いを含んでいます。OnDeinit()は厳密に呼び出し形式に対応している必要がある3.同上1.事実上(予約語を除く)任意の変数名には、特殊文字やポイントなどが可能である2.変数名は特殊文字や点を持つことはできません。予約語のリストが拡張されました。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.関数は型を持っていても値を返さなくてもよい。多くの古いカスタムインジケータはチャート上で起動した際、新コンパイラのstrictモードではこのエラーが表示されます。原因を見つけて、それを排除することをお勧めします。※※新しいMQL4とMQL5では、FILE_SHARE_READとFILE_SHARE_WRITEフラグがファイル共有使用モードを担当しています。■ファイル構造の変更点メタトレーダー4クライアントターミナルのビルド509以前のビルドでは、下記のように全てのMQL4アプリケーションが<ターミナルインストールフォルダ>\experts\ルートディレクトリのサブディレクトリに格納されていました。MQ4形式のソースコードと、それらからコンパイルされたEX4形式の実行可能ファイルのライブラリ。特別な「ファイルのサンドボックス」。MQL4アプリケーションでは、このディレクトリ内のみファイル操作を実行することが許可されています。新しいMQL4バージョンでは、ソースコードを格納するためのファイル構造が変更されました。MQL4\ディレクトリの適切なフォルダに配置する必要があります。MQ4形式のソースコードと、それらからコンパイルされたEX4形式の実行可能ファイルのライブラリ。特別な「ファイルのサンドボックス」。MQL4アプリケーションでは、このディレクトリ内のみファイル操作を実行することが許可されています。EX4ファイルは自動的にコピーされ、適切なフォルダに再配置されます。ユーザーによって追加されたサブフォルダ及びそこに含まれるファイルは(コピー)処理されません。必要に応じてそれらを手動で新しい場所に再配置する必要があります。どのファイルやフォルダも、更新時に削除されません!使用されているファイルのパスを含むすべてのファイルコピー操作は、更新中はターミナルの実行記録で固定されている。古いEX4ファイルの新しいバージョンへの自動再コンパイルは更新中には実行されません。ユーザーは、どのソースコードを新しいEX4バージョンにコンパイルされるべきかを自由に決定できます。すべての古いEX4は、新たなメタトレーダー4ターミナルで動作します。新しいコンパイラでコンパイルEX4ライブラリはまた、新しいバージョンでコンパイルされているEX4プログラムから呼び出すことができます。新しいコンパイラでコンパイルされたEX4ライブラリは、新しいバージョンでコンパイルされているEX4プログラムからのみ呼び出すことができます。いくつかのケースでは、ソースファイルで(相対パスが変更されている場合)#includeでインクルードされているファイルのパスを編集する必要があるかもしれません。メタエディタのルートディレクトリは現在<data_folder>\MQL4\であることに注意してください。すべてのプログラムは、正しいサブディレクトリに配置する必要があります。お使いのコンピュータ上でメタトレーダー4ターミナルの各コピー用のデータフォルダ(<data_folder>)は、ターミナルまたはMetaEditorの「ファイル」→「データフォルダを開く」で見つけることができます。(9)カテゴリー:MQL言語リファレンスカスタムインジケータの値を出力するEAiCustom()関数でカスタムインジケータを使ってEAを作る際、カスタムインジケータのラインインデックスが何番のものを使えばよいかは、インジケータ設定ダイアログの「色の設定」でなんとなくわかります。下の図は、VQの「色の設定」タブで、#0(インデックス0番)の幅を最大にして表示させた状態のものです。色や幅で、下記の表の通りの番号になることがわかります。使用する番号がわかったら、次にその番号がどのようになればシグナルとするかを知る必要があります。CustomChecker_EAv2パラメータIndicatorNameにカスタムインジケータ名を入力すれば、#0~#7までの3本前・2本前・1本前・現在の値をチャート上に出力してくれるEAです。→CustomChecker_EAv2ダウンロード下の図をみてください。現在の足の始値の時点で売りシグナル発生にしたい場合は、「4番のShift1がEMPTY_VALUEではない」という条件にすればよいですね。-1;という感じです。矢印を使わず赤色ライン確定で売りシグナルにしたい場合はもう少し複雑になります。-1;という感じです。ラインの場合は矢印等とは違い、各バーの間の部分を直線でつないで表示するようになっています。上記売りシグナルの条件の意味は「3本前と2本前の間は表示なし、かつ、2本前と1本前の間は表示あり」ということになります。複数のラインインデックスで1本のラインを描画するインジケータの場合で重なって表示している場合は、インデックスの大きいほうが優先して表示され小さいほうは後ろに隠れてしまうので注意してください。(VQの#0黄色ラインのように。IEDのbeta版についてこんにちわ!メルマガ、再開しました!再開第1号は、以下のような内容です。仕様変更スピードがあがってきているように感じます。これからもっと、大きな変更がありそうです。大きな変更が進行中(MQL5フォーラム)→http://www.mql5.com/en/forum/13116メタトレーダー4/MQL4とメタトレーダー5/MQL5に共通のIDEのベータ版を、以下に添付します。これは、みんなの情報のための暫定版です。旧MQL4バージョンとの違い:・AND/OR理論演算の優先順位を変更しました。現在、すべてが標準C/C++に似ています。・論理式の短縮評価を導入しました。現在、論理式がその最後に到達する前に評価された場合、C/C++と同じように、後の残りの式は評価されません。・現在、整数のみがswitch文で使われます。以前は、実数も使用することができました。・.(ドット記号)は、もう変数名に使用することはできません。@(アットマーク)、$(ドルマーク)、?(クェッションマーク)も変数名で使用することはできません。・start()関数の必要条件を厳しくしました。以前は、start()関数にパラメータ(仮引数)を設定することができました。その他のエントリーポイントは、それらのシグニチャに正確に一致する必要があります。ような(変数・関数)名は使用することができません。・現在、インポートされたDLLの関数は、MQL5と同じように、パラメータ(引数)としてMQLの文字列配列を受けとることはできません。これらは、既存のソースファイル内で同じ名前で宣言された単純変数と衝突するかもしれません。・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理論演算の優先順位を変更しました。「条件Bまたは条件C」から判定するんですよね。>・論理式の短縮評価を導入しました。variableといった警告が出て、変数が上書きされるようです。これからの動き、目が離せませんね。http://www.mag2.com/m/0000255713.htmlご意見・ご要望は、お問い合わせフォームからお願い致します。Aさん:えええぇぇぇ・・・orzこんにちわ!上記のようなやりとり、たまにあります^^;矢印やドットなどのマークで売買タイミングをお知らせしてくれるカスタムインジケータで、バックテストやフォワードテストをしてみたいと思うときってありますよね?そんなときは、iCustom()関数でシグナル発生を感知して自動売買をするEAを作成します。EAの作り方がわからない場合は、できる人やEA作成代行業者に頼むことになります。そこで・・・シグナルインジケータ用のEAを作成しました!パラメータで、カスタムインジケータ名を指定して各設定をするだけで、そのシグナルインジケータでのバックテスト・フォワードテストが可能なEAを作成しました。トレーリング部分修正でファイル更新済み使用できるインジケータの条件として、矢印やドットなどのマークで描画されるシグナル系のインジケータということが大前提です。その他、オブジェクトでの描画ではないことや、リペイントしないこと(リペイントについて理解されている方はOK)などの条件があります。Setting------Para1カスタムインジケータのパラメータ1つ目Para2カスタムインジケータのパラメータ2つ目Para3カスタムインジケータのパラメータ3つ目::Para20カスタムインジケータのパラメータ20個目TakeProfit・StopLoss・TrailingStopで、使用しない機能は0以下の数値を指定します。BuyEntrySignalIndex・SellEntrySignalIndex・BuyExitSignalIndex・SellExitSignalIndexで使用しないシグナルはマイナスの数値を指定します。シフト数とは、何本前のローソク足の位置に表示されていたらシグナルとみなすという本数を指定します。0を指定した場合は、現在変動中のローソク足の位置に表示された場合にシグナル発生とみなします。カスタムインジケータのパラメータは、1つ目から順番に指定していきます。カスタムインジケータのパラメータ数が20個未満の場合、指定するパラメータが余りますが、余った分は無視してください。"";」としてコンパイルしてください。シグナルの番号とは?カスタムインジケータのシグナルには、0から始まる番号が割り振ってあります。その番号を調べるには、チャートにそのインジケータをアタッチしたときに出るダイアログの【色の設定】タブをクリックして対応するシグナルの色の#の番号を見ます。色だけでは識別できない場合は、幅を変更してチャートに表示させ、大きさが変わったものを見て識別します。けいじ)1977年生まれ。2007年にFX投資を始める。4のEAによる自動売買を知り、MQLを習得。EA作成プログラミングに関するブログを開始。2008年にEA作成代行会社を設立。2009年にEA作成セミナーを名古屋で開催。EA作成代行サイト「Dr.EA」を公開。2012年、「MQLアカデミー」のメイン講師として活動開始。_;)mブログ読者さんからのメッセージやメールで、『EA作成の本は出さないの?』とか『早く小学生でも解るようなEA作成方法についての本を出してください』とのお声を頂き続け、ようやくご期待にお応えできるEA作成入門書を出版させて頂くことができました^^EAについて『EAってなに?』という方の為に、少し説明します。Advisor(エキスパートアドバイザー)の略で、自動売買をするソフトです。MetaTrader(メタトレーダー)というFXなどの取引をするプラットフォーム上で動作します。EAを作成・編集することができるようになると、FXトレード手法のちょっとしたアイデアをEA化して、バックテストで過去の成績をすぐに調べることができるようになります。無料EAをダウンロードして、より良い成績を出すEAにカスタマイズすることができます。優秀なEAが出来上がったら、リアルタイムチャートで稼動させて、24時間自動売買してくれます。PC画面の前にずっと座っている必要が無くなります^^対象:プログラミング未経験者~プログラミングをしたことがない方でも、楽しくMetaTrader4(MT4)のEA作成方法をマスターできるようにできるだけ分かりやすくしていますので、無理なくEA作成方法(MQL4プログラミング)を習得できます。数年前までプログラミング、ド素人でした(汗)しかし今では、自由自在にEA作成ができるようになり、年間300を超えるEA・インジケータの作成・編集をするプロとして、セミナーやウェブ上でEA作成方法を教えられるまでになりました。投資書籍MQL4セミナーDVD発売のお知らせ【EA作成パーフェクトマスタースクール】2012年2月11日に開催したセミナーで、場所・時間の都合上、参加できなかった方のためにセミナーDVDを販売することになりました!お申し込みページ→EA作成パーフェクトマスタースクールDVDお申し込み※DVD販売終了しました。:20名(先着順となりますので、お早めにご連絡ください。)セミナー内容:これからMQLプログラミングを習得する方のための入門編から高度なEAを作成するための応用編までです。(EA作成のセミナーです。インジケータ作成の内容は含まれておりません。どちらか片方でもOKです^^日中は都合が都合が悪くセミナーに参加できない方でも、夜の懇親会にご参加いただけます。セミナーのお申し込みを頂いた方は、当日不参加であっても特典は得られます。特典のみ欲しい方は、お申し込み時にセミナー不参加というご連絡をください。EAセミナーcsvファイルで指定した時間にEAを休止させるインジケータEAの休止時間をcsvファイルで指定する方法で紹介したEAで、稼働中のすべてのEAを休止状態にしたいというお問い合わせがありました。・・・faiさんが以前に・・・http://d.hatena.ne.jp/fai_fx/20091201/1259610071同じ感じですが、一応インジケータを作りました^^;ファイルはこちら→NoTrade_ReadFile_Ind.zipインジケータですので、experts→indicatorsフォルダに保存してくださいね。決済(ストップ設定)用のEAが必要になります。実際に使用される場合は、十分動作確認をしてから使用してください^^;パラメータ『SwitchEAs』をfalseにした場合は、EA休止機能が無効になり、テキスト表示だけになります。EAの休止時間をcsvファイルで指定する方法で紹介したサンプルEAファイルの説明です。→Sample_NoTrade_ReadFile.mq4とNoTradeTime.csvをダウンロードSample_NoTrade_ReadFile.mq4の解説まずは、『NoTradeTime.csv』ファイルを見てみましょう。hh.mm』の日付フォーマットで、トレードしない時間が入力してあります。Zoneとチャート上に表示させるようになっています。データのファイル名を指定です。AfterSecond;パラメータ『NoTradeBeforeMin』と『NoTradeAfterMin』の『分指定』を『秒指定』に変換したものを格納しておく変数です。過去のもので現在の時間に一番近い時間データを格納しておく変数です。未来のもので現在の時間に一番近い時間データを格納しておく変数です。Now;『NoData』は、もうcsvファイルの指定時間をチェックする必要がなくなったら、NoDataをtrueにして、ファイルを開かないようにするための変数です。現在の時間データを代入する変数です。次は、EA開始時に1度だけ実行されるinit()関数です。秒に換算したものを代入します。今後、時間の比較を、秒単位で進行する時間データで行うためです。パラメータ『NoTradeBeforeMin』『NoTradeAfterMin』の役割は、ここで終了し、もう使いません^^;『LastNoTradeData』『NextNoTradeData』に、マイナス値を入します。これらの変数にマイナス値が入っている場合は、それに対応するデータが空っぽというルールにするためです。『NoData』にfalseを代入しておきます。ここで、グローバル変数の宣言部分に初期値を代入しておくのと、init()関数内で値を代入するのでは、若干動作が違います。グローバル変数は、記憶力を持った変数で、EAをチャートから外したときに、はじめて格納されている値がなくなります。再読込させようと、EAのパラメータ等を入力するプロパティウィンドウを開き、OKボタンで再スタートさせたとします。EAは前回稼動していたグローバル変数の値が残っていますので、NoDataがtrueのままで、csvファイルを読まないようになってしまいます。ならないためにも、init()関数の中で稼動開始時にグローバル変数に入っていて欲しい値を代入しておきます。次に、ティック毎に実行されるstart()関数です。TimeCurrent();一番最初に、『Now』に現在の時間データ(時刻1秒ごとに付けられている整数)を代入しておきます。SetNoTradeData()関数を実行する。『LastNoTradeData』『NextNoTradeData』『NoData』にそれぞれの値を代入する関数として、start()関数の下に作ってあります。後で、見てみましょう。記憶用変数『PrintData』を宣言。『PrintData』に『NextNoTradeData』の値を代入。出力するということです。return(0);IsNoTradeTime()関数がtrueを返したら、ここで実行終了。Zone』と表示させ、trueを返します。ない場合は、falseを返します。後で、見てみましょう。Zone』と表示させます。これで、start()関数は終了ですね。完全自動売買を可能にするMetaTraderのEAをプログラムするDr.EAの正規ブログ。EAのプログラミング言語MQLの使用方法やEAの製作方法の記事を作成。FXの自動売買やシステムトレードに興味がある方は、是非ご覧下さい。MT4でエッジの確立を!サイトマップ。