「FXメタトレーダー
入門」
「FXメタトレーダー
実践プログラミング」
管理人の書いたメタトレーダー4プログラミングの入門書。
好評発売中!

ブルベア大賞
2008-2009特別賞受賞
管理人の書いたメタトレーダー4実践プログラミングの決定版。
好評発売中!
Amazonで売れている「システムトレード」本はこちら
Amazonで売れている「メタトレーダー」本はこちら

2012年02月23日

「FXメタトレーダー実践プログラミング」第6刷変更点

引き続き、「FXメタトレーダー実践プログラミング」の情報です。

こちらも増刷され、第6刷となりました。これまでお買い求めの皆様、どうもありがとうございます!

第6刷の変更点ですが、「FXメタトレーダー入門」と同じく、17ページのメタトレーダー採用業者リストを削除しました。

それから、「5−7ファイルの入出力」の最後に、ストラテジーテスター利用時の注意点について追加しました。追加した内容については以下のリンクをご参照ください。

FXメタトレーダー実践プログラミング449ページ

2011年03月08日

「FXメタトレーダー実践プログラミング」第5刷変更点

お陰様で、「FXメタトレーダー実践プログラミング」も増刷することになりました。
今回、第5刷となりますが、いくつか修正点があります。

まずは、前回の記事で報告した以下の修正です。

■255ページ5行目
(誤) if(MyCurrentOrders(MAGIC+i, MY_ALLPOS) != 0) continue;
(正) if(MyCurrentOrders(MY_ALLPOS, MAGIC+i) != 0) continue;

もう一つは、17ページに掲載しているメタトレーダー対応業者の一覧です。以前掲載していた業者の中には、日本語対応をやめたり、日本居住者の口座開設をやめたりする業者もあったため、以下のように修正しました。但し、これらは必ずしも筆者が推奨する業者というわけではありません。十分に調査した上で、各自の判断で口座開設を行ってください。

ODL Japan              http://www.odls.co.jp/
121証券                http://fx.121sec.com/
フォレックス・ドットコム・ジャパン  http://jp.forex.com/jp/
セブンインベスターズ         http://www.7fx.jp/
FXDD(FXDirectDealer)     http://www.fxdd.com/jp/
4XP(フォレックス・プレイス)    http://www.4xp.com/jp/
FxPro                  http://www.fxpro.com/ja/

2010年12月29日

「FXメタトレーダー実践プログラミング」正誤表

「FXメタトレーダー実践プログラミング」で間違いがありましたので、訂正いたします。

■255ページ5行目

(誤) if(MyCurrentOrders(MAGIC+i, MY_ALLPOS) != 0) continue;

(正) if(MyCurrentOrders(MY_ALLPOS, MAGIC+i) != 0) continue;

プログラムの説明のところですが、パラメータが逆になっていました。

2010年09月30日

Windows Vista/7でメタトレーダーを利用するときの注意点

近日中に「FXメタトレーダー実践プログラミング」が増刷されます。

本書出版時には、Windows Vista が最新のOSでしたが、最近では Windows 7 のPCをお使いの方も多くなってきたかと思います。

本書24ページに 「Windows Vistaでメタトレーダーを利用するときの注意点」のコラムがありますが、この注意点は Windows 7でも同様ですので、Windows Vista/7 として読んでいただけると幸いです。

2010年08月17日

MT5、MQL5について

「FXメタトレーダー実践プログラミング」を出版してから1年近く経ちます。

本書執筆時にメタトレーダーのバージョンアップ(MT5)の情報が入ってきたため、急遽、前書きに「メタトレーダー5」に関する説明を追加しました。

実際にMT5がリリースされたのは、今年の6月でしたが、本書に記載した

「同じメタトレーダーといっても、中身は全く別のものと考えたほうがよいでしょう」

というのは、合っていたと思います。インターフェースは似ていますが、プログラムの書き方やプログラムが動作する仕組みはかなり変わっています。

なので、

「MQL4で作成したプログラムをMQL5に対応させるためには、多少の修正が必要となるかもしれません。」

という記載は間違いでした。訂正すると、

「MQL4で作成したプログラムをMQL5に対応させるためには、大幅な修正が必要となります。」

となるかと思います。

MQL4とMQL5の違いについては、別のブログで記事を書き始めたので、ご参考にしてください。

基礎から学ぶシステムトレード」(シストレナビ)

2010年06月17日

MT4のシンボル(通貨ペア)名

メタトレーダー4で取り扱う通貨ペア名(プログラム中ではSymbol()で参照)は、通常は、「USDJPY」、「EURUSD」のように、アルファベット6文字で構成されています。

ところが、業者によっては、「USDJPYm」「USDJPYx」「USDJPYFXF」「USDJPYjpy」のように、6文字の通貨ペア名の後に数文字のアルファベットが追加されているケースもあります。

プログラム中で「Symbol()」を使って通貨ペア名を指定している場合は特に問題ありませんが、複数の通貨ペアから別の通貨ペア名を作る場合にはちょっと工夫する必要があります。

例えば、「FXメタトレーダー実践プログラミング」の382ページに対象通貨ペア名と資金の通貨名から別の通貨ペア名を作るプログラムがあります。

   string symbol = StringSubstr(Symbol(), 0, 3) + AccountCurrency();

ここで、Symbol()="EURUSDx"、AccountCurrency()="JPY" の場合、"EURUSDx"の先頭3文字と"JPY"が連結されて symbol="EURJPY"となります。

しかし、通貨ペア名の最後に「x」がついている業者では、「EURJPY」という通貨ペアは存在しないため、プログラムが正しく動作しません。

ですから、この場合、最後に「x」がつくように、

   string symbol = StringSubstr(Symbol(), 0, 3) + AccountCurrency() + "x";

と書く必要があるのです。あるいは、どういうケースにも対応できるようにするために、

   string symbol = StringSubstr(Symbol(), 0, 3) + AccountCurrency() +
              StringSubstr(Symbol(), 6, StringLen(Symbol())-6);

と書くこともできます。

最後に付けた部分がちょっと複雑ですが、StringLen()という関数は、パラメータの文字数を返します。ですから、StringLen(Symbol())-6は、通貨ペア名の6文字より多い部分の文字数になります。例えば、最後に「x」が」つく場合、1、「XFX」がつく場合、3となります。そして、StringSubstr()を使って、通貨ペア名の6文字目以降で6文字より多い部分を取り出すわけです。

他に通貨ペア名に余分な文字がついて困るのは、同じEAを複数の業者のMT4で動かす場合でしょう。
もし、そのEAで通貨ペア名のチェックを行う場合、通貨ペア名全体をチェックするより、最初の6文字だけをチェックするようにした方がいいでしょう。

例えば、あるEAを「EURJPY」の通貨ペアのチャートだけで動かしたい場合、

   if(Symbol() != "EURJPY") return(1);

では、通貨ペア名が「EURJPYx」のMT4では、チェックできません。通貨ペアに余分な文字がついている場合にも対応するためには、

   if(StringSubstr(Symbol(), 0, 6) != "EURJPY") return(1);
 
として最初の6文字だけをチェックした方が確実でしょう。但し、最初の部分が「EUR/JPY」のように変わってしまうケースには対応できませんので、注意してください。

2010年03月24日

「FXメタトレーダー実践プログラミング」第3刷

おかげさまで「FXメタトレーダー実践プログラミング」も第3刷が近日中に発行されます。

今回、本書で修正点がありますので、ご報告いたします。

修正箇所は2箇所です。

222ページ8行目の
// 注文待ち時間(秒)
extern int MyOrderWaitingTime = 10;

の部分を削除して、223ページ7行目に
// 注文待ち時間(秒)
int MyOrderWaitingTime = 10;

として挿入します。

これは、サンプルプログラムの MyLib.mqh と MyLib.mq4 の変更になりますが、特に致命的な不具合があるわけではありません。

修正の理由を簡単に説明します。

そもそも MyOrderWaitingTime という変数は、218ページで説明してあるように、オーダー送信時にエラーでループが無限に繰り返されるのを防ぐために、ループを抜けるための最大待ち時間を秒単位で指定するものです。

初期設定では10と設定されているので、10秒間エラーが続くと、ループから抜けるようになっています。

この設定は頻繁に変えるものではありませんので、初期設定のままで問題なければそのまま利用されて結構です。

元のプログラムでは、MyOrderWaitingTimeの値をチャートに挿入したエキスパートプログラム(EA)のプロパティから変更しても、それが実際に反映されないという不具合があります。

実は、ライブラリープログラム中で利用される外部変数の値はEAのパラメータとして直接は変更できないのです。

なので、修正版では、その不具合を避けるために、MyOrderWaitingTime がEAのパラメータには現れずに、ライブラリープログラムの中だけで使えるようにしたのです。

ですから、変数 MyOrderWaitingTime の値を変更したい場合は、MyLib.mq4の
// 注文待ち時間(秒)
int MyOrderWaitingTime = 10;

の部分を直接変更することになります。

このように実際には不具合を修正したわけではないのですが、増刷では、改訂箇所が大幅に増えると面倒なので、必要最低限の修正だけを行いました。

もし、MyOrderWaitingTime などライブラリープログラム中で利用される外部変数の値をEAのパラメータとして変更して使いたい場合、以下のように別の関数を作るなどいくつかの手順が必要になります。

その流れを簡単に説明します。

まず、MyLib.mq4 の中に
void SetMyOrderWaitingTime(int t)
{
   MyOrderWaitingTime = t;
}

という関数を追加します。そして、その関数を MyLib.mqh の #import ブロック中に
void SetMyOrderWaitingTime(int t);
として追加します。この関数はパラメータ t の値を MyOrderWaitingTime に代入するだけのものです。

そして、この MyLib.mqh を #include 命令で読み込んだEAで SetMyOrderWaitingTime() を実行すると、MyLib.mq4 中の MyOrderWaitingTime を変更させることができます。

実際には、EAのプログラム中で
extern int WaitingTime = 10;
などと宣言し、その中の init() 関数中に
SetMyOrderWaitingTime(WaitingTime);
と書いておけば、EAのパラメータとして変更した WaitingTime の値が MyLib.mq4 中のMyOrderWaitingTime に設定されることになります。

ちょっとややこしいのですが、興味のある方はご参考にしてください。

2010年02月24日

実践プログラミングのその先へ

「FXメタトレーダー実践プログラミング」では、メタトレーダー4でシステムトレードを実際に行うためのプログラミング機能について紹介を行いました。

このレベルのプログラムが自分で作れるようになれば、後は色々と応用できると思います。

個人的にはこの程度で満足しているのですが、世の中にはさらに色々なアイデアを考え付く人がいます。

すると、そのアイデアがプログラムとして実現可能なのか、また可能であればどうすればいいか、など実践プログラミングを超えた問題が出てきます。

幸いなことに最近では、メタトレーダーに関する様々な情報がインターネット上にあふれています。

その中のお薦めサイトを一つ紹介します。

とあるMetaTraderの備忘秘録

このサイトでは、メタトレーダーを極限まで使いこなすためのノウハウが惜しげもなく公開されています。しかも、ほとんど毎日のように記事が投稿されており、質、量ともに秀逸です。

実践プログラミングのその先を追い求める方にお薦めです。

2010年01月28日

複数のオーダーとマジックナンバー

「FXメタトレーダー実践プログラミング」の読者の方よりいただいたご質問に関連して、本書の補足説明をさせていただきます。

メタトレーダー4(MT4)では、それぞれのオーダーに固有のチケット番号(注文番号)がついています。従って、同じ通貨ペアで複数のポジションがある場合も、チケット番号で区別できます。

但し、本書でも解説しているように、オーダー毎に変わるチケット番号をプログラム中で記憶しておくのは面倒なので、本書のプログラムでは、個々のオーダー(ポジション)をチケット番号でなく、マジックナンバーで区別するようにしています。

本書の多くのサンプルプログラムでは、オープンするポジションが一つなので、一つのシステムに一つのマジックナンバーしか割り当てていませんが、リピートIFDオーダーのように複数のポジションを利用する場合、それぞれのポジションを区別するためにマジックナンバーを変えるようにしています。

本書のライブラリープログラムでは、マジックナンバーだけで一つのオーダー(ポジション)を特定してオーダー送信、決済、修正などの処理を行っています。

つまり、あるマジックナンバーのオーダーがあれば、それに一致するオーダーは一つである、ということを前提としているのです。

もちろん、違う通貨ペアで同じマジックナンバーを使うこと、また売りと買いで同じマジックナンバーを使うことは問題ありません。

例えば、

#define MAGIC1 20100
#define MAGIC2 20101

と定義しておき、

最初に買いポジションを建てるときには、MAGIC1のマジックナンバーを使い、さらに別の買いポジションを建てるときには、MAGIC2のマジックナンバーを使うといった具合です。

実際には MAGIC2のポジションを建てる場合には、MAGIC1のポジションがあるかを確認する手続きが必要となります。詳しいことは省略しますが、ポジションを確認する場合もマジックナンバーでポジションが区別されていた方が何かと便利です。

そういうことで、本書のライブラリープログラムを利用して複数のオーダーに対応させるシステムを作成される場合には、オーダー毎に別のマジックナンバーを割り当てるようなプログラムを作成されることをお勧めします。

2010年01月21日

Windows 7 でメタトレーダー

昨年、Windows 7が発売されました。

新規にパソコンを購入する場合、たいてい、この Windows 7がインストールされていることだと思います。

今回はメタトレーダーをWindows 7 で動作させる場合の注意点について報告しておきます。

「FXメタトレーダー実践プログラミング」24ページで触れていますが、Windows Vista では、以下のような問題がありました。

「Microsoft Office IME2007を既定の入力言語として指定した場合、メタエディターのプログラム上でカットやコピーなどの編集を行うと、メタエディターが強制終了される」

残念ながら、この問題は Windows 7でも見られるようです。それ以外は特に問題はなく動作すると思います。

Office 2007をインストールされた方は、メタエディタ使用時にお気を付けください。

ちなみにβ版テスト中の MetaTrader5 に関しては、現在のところ、上記の問題は見られないようです。

2009年12月06日

ご意見ありがとうございます

トレーダーズショップのウェブサイトに拙著「FXメタトレーダー実践プログラミング」の読者からのご意見が掲載されていました。

読者のご意見

ここまでお勧めしていただける読者からのご意見は初めてです!
とてもうれしくなりました。どうもありがとうございます!

本書には、著者が実際に自己資金でトレードしているかどうかまでは書いていませんが、本書に掲載する内容を吟味する過程で、メタトレーダーの売買システムをいくつも作りました。

そして、その中で自分の納得のいくシステムができたので、確かに実際に運用しています。
特に凝ったシステムではなく、本書に掲載した各要素を組み合わせただけのものです。

本書を実践に耐えられる売買システム作りの参考にしていただければ幸いです。

2009年10月22日

「入門」と「実践」の流儀の違い

10月14日に「FXメタトレーダー実践プログラミング」が出版されました。

おそらく「実践」を購入された方の多くは、以前に「FXメタトレーダー入門」もご覧になったことがあるかと思います。

この2冊は同じ著者が書いたものなので、同じ流儀で書かれるべきところですが、わけあってプログラミングの流儀に関して多少違う点があります。以下に簡単に説明しておきます。

カスタム指標プログラムの指標表示の範囲

カスタム指標プログラムでは、

  for(int i=limit-1; i>=0; i--)

として limit-1 から 0 の範囲で指標を表示させています。ここで、limit = Bars-IndicatorCounted() とすることで、チャートの最初からカスタム指標が表示されるようになります。

但し、カスタム指標の種類によっては、ある程度データがたまってからでないと正しい指標値が計算できない場合があります。

「入門」の方では、チャートの描き始めの部分から正しい指標値が表示されるよう、

  if(limit == Bars) limit -= MA_Period-1;

などのように limit の値を修正する記述を追加しています。

これにより、チャートの描き始めの部分に変な指標値が出なくなるのですが、実際、チャートの描き始めの部分はそれほど重要ではありません。

そういうことから、「実践」の方では、特にlimitの値を修正する記述は追加していません。厳密さには欠けますが、実践上問題ないということでご理解ください。


エキスパートプログラムでの最初のチェック

「入門」では、エキスパートプログラムの最初に「バーの始値でトレード可能か」をチェックするため、

  if(Volume[0]>1 || IsTradeAllowed()==false) return(0);

という行が入っています。これは、バーの確定時にトレードを行うための「おまじない」として理解されている方も多いかと思います。

しかし、「実践」の方では、このような行は入っていません。

IsTradeAllowed()のチェックについては、トレード関数のエラー処理の部分に書かれているので、プログラムの最初にチェックする必要はなくなっています。

もう一つ、Volume[0]>1のチェックについては、実践上問題が起きるケースがあるので、記述しないようにしました。

というのも、Volume[0]>1の場合 return するということは、実際にトレードが実行されるのが、Volume[0]=1の場合、つまりバーが確定して、新しいバーができた瞬間に限られてしまうのです。

すべてのtickでエキスパートプログラム通りにトレードが行われるのであれば問題ありませんが、実践上、サーバーとの通信エラーなどにより、シグナルが出てもトレードが行われないケースが起こり得ます。

そういうエラーを防ぐために、Volume[0]>1のチェックは外して、その代わり、現在のポジション状況からトレードを確実に行えるようにしてあるのです。


エキスパートプログラムで利用するシグナル指標

「入門」では、売買ロジックをエキスパートプログラムとして作成する前に、シグナルの発生場所を示すシグナル指標をカスタム指標プログラムとして作成することを推奨しています。

これは、エキスパートプログラムをストラテジーテスターでバックテストした際に、売買のポイントを示すチャートにシグナル指標を挿入して、ロジックが正しくプログラムされているかどうか確認することが目的でした。

一方、「実践」の方では、特にシグナル指標プログラムについては触れていません。

これは、掲載したエキスパートプログラム数が多いということもありますが、単純にシグナルで売買するだけでなく、トレイリングストップなど、シグナルによらない手仕舞いなどがあり、シグナル指標だけでは対応できないケースも多いからです。

またエキスパートプログラム中に組み込みテクニカル指標関数を利用することで、バックテスト時の売買ポイントを示すチャートにテクニカル指標が同時に表示されるので、ロジックが正しいかどうかは、それである程度判断できると考えました。


このように実践面を考えると、どうしても「入門」とはプログラミングの流儀が変わってしまいました。「入門」から「実践」への補足としてご理解いただけると幸いです。

2009年09月18日

追加情報

トレーダーズショップでの予約ページですが、詳しい目次なども掲載されたようです。ご参考にしてください。
              ↓
「FXメタトレーダー実践プログラミング」予約ページ

それからアマゾンでも購入ページができたようです。

2009年09月16日

予約受付はじまりました

「FXメタトレーダー実践プログラミング」の予約受付が始まりました。

トレーダーズショップのこちらのページからどうぞ→「FXメタトレーダー実践プログラミング

まだ書籍の情報がほとんど掲載されていませんが、そのうち掲載されると思います。

10月8日発送予定ということです。まだ印刷もされていませんが、たぶん大丈夫でしょう。
にほんブログ村 為替ブログ FX オプション取引へFXオプション取引は穴場です(^^)
amazonで売れているFX本はこちら!
amazonの「証券・金融市場」部門も注目!

2009年09月14日

「FXメタトレーダー実践プログラミング」

「FXメタトレーダー入門」の続編ですが、10月出版に向けて最終校正に入っています。

タイトルはまだ仮ですが、「FXメタトレーダー実践プログラミング」となりそうです。

以下に目次をご紹介します。

はじめに
メタトレーダー5について

第1章 メタトレーダーの構成を知る
1-1 メタトレーダーを使いこなす前に
1-2 メタトレーダーとMQL4プログラミング

第2章 カスタム指標プログラムで独自のテクニカル分析
2-1 カスタム指標プログラムの基本
2-2 組み込みテクニカル指標関数の使い方
2-3 オブジェクトを利用したカスタム指標
2-4 テクニカル指標のデータをファイルに出力

第3章 トレード関数で柔軟な注文を実現
3-1 トレード関数を使いこなす
3-2 トレード時のエラーチェック
3-3 トレード関数のライブラリー化
3-4 エキスパートプログラムによる注文

第4章 エキスパートプログラムでシステムトレード自由自在
4-1 売買システムの基本構成
4-2 仕掛けのパターン
4-3 手仕舞いのパターン
4-4 そのほかのシステムのパターン
4-5 ストラテジーテスターでの検証

第5章 MQL4をさらに使いこなしたい人のために
5-1 データの型
5-2 プリプロセッサ命令
5-3 変数の種類
5-4 配列の種類
5-5 数学関数
5-6 オブジェクトの表示
5-7 ファイルの入出力
5-8 文字列に関する関数
5-9 日時に関する関数
5-10 マーケット情報
5-11 口座情報
5-12 関数のライブラリー化

さいごに
付録A MQL4関数一覧
付録B 参考図書

今回は「実践プログラミング」ということで、実際の自動売買にも対応可能なプログラムについて解説しています。

前作よりページ数は4割増しの520ページ、掲載プログラムも2倍以上の51個とかなりのボリュームとなっています。でも、値段は前作と同じく税込み2940円です。

ただし、メタトレーダーの利用方法やプログラミングの基礎の基礎については触れていませんので、メタトレーダーが初めての方は、まず前作をご覧ください。
にほんブログ村 為替ブログ FX オプション取引へFXオプション取引は穴場です(^^)
amazonで売れているFX本はこちら!
amazonの「証券・金融市場」部門も注目!