2008年08月04日

「FXメタトレーダー入門」続編

去年の今頃は、 「FXメタトレーダー入門」の執筆に明け暮れていました。昨年末に出版してから半年ちょっと経ちました。ご購入いただいた方はもちろんのこと、多くのMetaTrader4関連のブログでもご紹介していただき、どうもありがとうございます。

当初は続編を書く予定はなかった(そもそもこの手のマニアックな本はあまり売れないだろうという話でした)のですが、読者の皆さんから続編のご要望も色々といただいたりしたことから、続編の企画が持ち上がりました。

入門では、初心者向けに内容を厳選したので、やむを得ず削った内容も色々とあります。そのあたりも含めて、今回はもう少し実用的な内容にしたいと考えています。

まだ構成を練っている段階なので、詳しいことはお話しできませんが、やはりメタトレーダーのプログラミングが中心になることでしょう。メタトレーダーにおける独自のプログラミングの流儀について語れればいいかなと思います。

2008年06月11日

初心者向けC言語学習サイトの紹介

MetaTrader4に搭載されているプログラミング言語MQL4はC言語をベースとしたものです。

「FXメタトレーダー入門」でも、初心者向けにMQL4の解説はしていますが、すぐに試せるように文法的な説明は極力省略しています。

もし、本書の説明でよくわからない方は、まずC言語について勉強した方がいいかと思います。

C言語の参考書や参考サイトはたくさんありますが、初心者向けサイトとして以下のものをお勧めします。

初心者のためのポイント学習C言語

無料のサイトですが、何年もかけて丁寧に作られています。C言語の基本的な書き方を理解すれば、MQL4の理解に大変役立つと思います。

2008年05月10日

MT4でリピートイフダン注文

最近、某有名為替ブログでリピートイフダン注文の話題が続いていますね。

対応しているFX業者さんが、大々的に宣伝しているせいでもあるかと思います。

ただ、これはシステムをプログラミングできるプラットフォームであれば簡単にできてしまいますね。

ちなみにMT4だと、こんなプログラムになります。

//マジックナンバー
#define MAGIC  20080321
 
//パラメーター
extern double Lots = 0.1;
extern double OpenPrice = 104.00;
extern double ClosePrice = 105.00;
 
//ポジションの計算
int CalculateCurrentOrders()
{
   int pos=0;
   for(int i=0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
      {
         if(OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT)  pos++;
         if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT) pos--;
      }
   }
   return(pos);
}
 
// スタート関数
int start()
{
   if(IsTradeAllowed() == false || CalculateCurrentOrders() != 0) return(0);
 
   if(OpenPrice < ClosePrice) OrderSend(Symbol(),OP_BUYLIMIT,Lots,OpenPrice,0,0,ClosePrice,"",MAGIC,0,Blue);
   else if(OpenPrice > ClosePrice) OrderSend(Symbol(),OP_SELLLIMIT,Lots,OpenPrice,0,0,ClosePrice,"",MAGIC,0,Red);
 
   return(0);
}

何度も発注しないように CalculateCurrentOrders()で現在の注文数をチェックする必要がありますが、オープンポジションか指値注文がなければ、新たに指値注文を入れるという非常に簡単なロジックです。

OpenPrice と ClosePrce を適当に設定して、OpenPrice < ClosePrice の場合買い注文、逆の場合、売り注文になります。これをエキスパートプログラム(EA)として実行しておけば、リピートイフダン注文に対応したことになります。

なお、CalculateCurrentOrders()は、 同じようなものを「FXメタトレーダー入門」の334ページで使っていますが、紙面の都合で詳しい説明は書けませんでした。オーダー関連の関数については別の機会に説明したいと思います。

2008年04月13日

MQL4入門(4) - 変数名、関数名の注意点

久しぶりのMQL4入門ですが、今回は変数名、関数名を付けるときの注意点についてです。

MQL4では、変数名や関数名はユーザーが勝手に名前を付けることができますが、いくつか注意する点があります。

名前をつけるというのは、それぞれの変数や関数がそれぞれ別モノだということをメタトレーダーに知らせるためで、メタエディターのNavigatorウインドウのDictionaryタブで参照できるレファレンスでは、Identifiers(識別子)という項目で説明されています。

変数名、関数名として使える文字は、半角で 0~9の数字、a~z、A~Zのアルファベット(大文字、小文字は別の文字として区別される)と、"_"のアンダースコアだけです。
また、最初の文字に数字は使えません。長さは31文字までです。

こういうルールがあるのですが、色々試してみたところ、変数名に以下の記号を付けてもエラーは出ませんでした。

$\?.`

どうやら文法上間違っていなければいいようですが、本来C言語では識別子として利用できない記号です。
将来のバージョンアップで使えなくなる可能性もあるので、あまり利用しない方がいいと思います。

あと、もう一つ注意点は、変数名、関数名として以下の予約語は使えないということです。

bool
break
case
color
continue
datetime
default
double
else
extern
false 
for
if
int
return
static
string
switch
true 
void
while

これらはデータの型、繰り返しや条件分岐などの制御命令として使うものなので、同じ名前の変数名や関数名を付けることはできません。
ただ、これらの予約語はすべて小文字なので、一文字でも大文字に変えれば、予約語とはみなされません。ですが、例えば、for文の中で For という変数を使うと紛らわしいので、予約後に似た変数名を使うのは好ましくありません。

プログラムを見やすくするという意味でも変数名、関数名の名前の付け方は重要です。「FXメタトレーダー入門」を含め、個人的には、関数内部での変数には小文字から始まる名前、関数名や外部変数には大文字から始まる名前を付けて区別しています。

コンパイルしてエラーが出る場合に、変数名、関数名の名前の付け方に問題がある場合も多いです。どうやってもエラーが消えない場合、名前を変えることで解決することもよくあるので、試してみてください。

にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら

2008年03月22日

シグナル指標プログラムを使ってエキスパートプログラムを作る

私はこのブログ、「FXメタトレーダー入門」、先日のODLのセミナーなどで、MT4でのシステム開発の際に、いきなりエキスパートプログラム(EA)を作る前に、カスタム指標プログラムとしてシグナルをチャートに表示させるシグナル指標プログラムを作成することを推奨してきました。

それはシステム設計時に、利用したテクニカル指標とシグナルの位置を視覚的に確認することができ、さらに後でエキスパートプログラムの動作確認を確実に行うこともできるからです。MT4に限らず、何かとバグが付き物のプログラム開発において、できるだけ効率良く、正確なプログラムを作成することは重要な要素です。

今回は、シグナル指標からエキスパートプログラムをさらに効率よく正確に作成するための手法を紹介します。

まず、シグナル指標プログラムが「FXメタトレーダー入門」の214ページのように作られているとします。ファイル名は「MACross_Ind.mq4」です。
このプログラムでは、以下のように4つの指標バッファのうち、2番目に買いシグナル、3番目に売りシグナルが割り当てられています。

SetIndexBuffer(0, BufFastMA);
SetIndexBuffer(1, BufSlowMA);
SetIndexBuffer(2, BufBuy);
SetIndexBuffer(3, BufSell);

また、パラメータとして以下のように移動平均の二つの期間が extern 宣言されていることに注意してください。

extern int FastMA_Period = 10;
extern int SlowMA_Period = 40;

BufBuy、BufSell には、初期値として EMPTY_VALUE という何も表示しないという特別な値が代入されており、シグナルが発生した時に Open[i] という現在のバーの始値の値が代入され、チャート上に矢印の記号が表示されるようになっています。

このシグナルをそのまま利用するためのエキスパートプログラムの書き方を見ていきます。
「FXメタトレーダー入門」の222ページのプログラムを基にして変更する箇所を以下に示します。変更するのは start()関数だけです。

int start()
{
   //バーの始値でトレード可能かチェック
   if(Volume[0]>1 || IsTradeAllowed()==false) return(0);
 
   //シグナルの取得
   double BuySignal = iCustom(NULL,0,"MACross_Ind",FastMA_Period,SlowMA_Period,2,0);
   double SellSignal = iCustom(NULL,0,"MACross_Ind",FastMA_Period,SlowMA_Period,3,0);
 
   //買いシグナル
   if(BuySignal != EMPTY_VALUE)
   {
      ClosePositions();
      OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",MAGIC,0,Blue);
      return(0);
   }
 
   //売りシグナル
   if(SellSignal != EMPTY_VALUE)
   {
      ClosePositions();
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",MAGIC,0,Red);
      return(0);
   }
   return(0);
}

ここでは移動平均の計算は行わず、BuySignal、SellSignal という変数に、iCustom()という関数を使って既存のシグナル指標プログラムのシグナルだけを取得します。

iCustom()は以下のような複数個のパラメータを取ります。

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

symbol は通貨ペア名、timeframe はタイムフレームで他のテクニカル指標関数と同じです。
次の name のところが、カスタム指標プログラムのファイル名の主部(.mq4を除いた部分)を表します。
"MACross_Ind.mq4" の場合、"MACross_Ind" となります。
その次の ... とある部分には、カスタム指標プログラムのパラメータ(extern 宣言された変数に対応)
に渡す値が入ります。値を渡す必要がなければ省略も可能です。この例では、FastMA_Period, SlowMA_Period を指定しています。
そして mode というのが、カスタム指標プログラム中の何番目のバッファの値を取りだすのかという番号を表します。
カスタム指標中で買いシグナルBufBuyが2番目、売りシグナルBufSellが3番目だったので、それぞれ2と3を代入します。
最後の shift は時間位置のシフトを表します。ここでは同じ位置にシグナルを発生させるのでとしています。

実際のオーダーを出す条件としては、BuySignal、SellSignal にシグナルとしての値が入っているかどうか、つまり無シグナルの EMPTY_VALUE 以外かどうかの判定だけを行います。

これで、MACross_Ind.mq4 のシグナルをもとにしたエキスパートプログラムが作成できました。
この手法は別のプログラムの内容を連携させながら作成するので、ちょっと初心者には難しいかと思い、「FXメタトレーダー入門」には掲載しませんでした。
しかし、このレベルのエキスパートプログラムが理解できれば、シグナル指標プログラムのファイル名とパラメーターを差し替えるだけで、色々なシステムのエキスパートプログラムが簡単に作れるし、ストラテジーテスターで実行した後にチャートを開いた場合(237ページ参照)エキスパートでの売買ポイントと、シグナル指標のテクニカル指標やシグナルが同時に表示されるため、動作確認が一目でできるというメリットもあります。

システム設計時にまずシグナル指標プログラムを作成することをお薦めするのは、このようにエキスパートプログラムとうまく連携が取れる仕組みがあるからなのです。

にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら

2008年03月19日

メール設定画面の日本語の修正が反映されました

以前の記事「FXメタトレーダー入門」の278ページでも触れている日本語版の項目名の間違いをMetaQuotes 社に連絡したことを報告しました。

これについては、MetaQuotes 社のニュースでは、以下のように既に2月7日に修正されていたようなのですが、build 番号が上がっていなかったので、ライブアップデートで反映されていませんでした。

07 February 2008

New MetaTrader 4 Mobile build 211 and MetaTrader 4 Mobile SE build 211 with fixed displaying of news in the Japanese language have been released.

今回、build 213 に上がり、ライブアップデートで修正が反映されていました。
メール設定画面については以下のように表示されるようになります。

したがって、「FXメタトレーダー入門」の278ページで注意している

「日本語の項目名が実際の項目とずれている」

ことはなくなりました。日本語の画面のまま使って問題ありません。

にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら

2008年03月09日

ODL Japan のセミナー

前回訪問した ODL Securities で近いうちにHPをリニューアルするとのことでしたが、ODL Securities のサイトではなく、ODL Japan という別サイトでのリニューアルでした。
ODL Japan という日本法人化で口座開設などの手続きも簡単になったようです。

ところで、3月20日にODL Japan 主催のセミナーが開催されます。無料セミナーなんですが、午後の部に私が登場します!
「MetaTrader4を使ったシステム売買入門」ということで簡単なお話をさせていただきます。
拙作「FXメタトレーダー入門」をテキストとして使う予定なので、参加者には拙作が配布されると聞いています。
まあここでも入門なので、MT4でのバックテストの方法など基本的な話になると思います。
当ブログをご覧の方にはそれほど珍しい話はないかもしれませんが、お暇な方はどうぞ。
間違っても「システムトレードは絶対儲かる」なんて話はありません。勘違いされないように。

にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら

2008年02月07日

月間総合ランキング5位

拙作の「FXメタトレーダー入門」ですが、パンローリング直販サイト、トレーダーズショップ月間総合ランキング(2月8日付け)で5位にランクインしました!

先月は発売直後だったので4位に入りましたが、今月は無理かなと思っていました。
意外に売れているようでよかったです。ご購入いただいた皆さん、どうもありがとうございます!
増刷も決まったので、もうしばらくは大手書店やネットで手に入ると思います。
不定期になりますが、読者向け記事も続けていきます。お楽しみに。

にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら

2008年02月04日

MetaTrader の多言語パックについて(訂正)

前回のMetaTrader の多言語パック(MultiLanguage Pack)の記事ですが、ちょっと調査不足で不十分な情報を掲載してしまいました。

実は、最近(去年あたりから)メタトレーダーを使い始めた場合、多言語パックに必要な mlp.exe や *.prl ファイルがインストールされないようです。正確には2006年11月14日リリースのBuild 200からそれらのファイルは削除されたようです。
逆に言うと、それ以前にメタトレーダーをインストールした人にはもれなく付いているのです。アップデートしても削除はされないので、そのまま使えるというわけです。

今回急いで記事を書いたので、以前から使っている自分の環境しか確認しなかったのです。
特に質問があったわけではないのですが、先日、mixiの方からご指摘をいただきました。
ちょっと混乱させてしまい、申し訳ありませんでした。

なので、現状では誰でも日本語メニューがカスタマイズできるというわけではないようです。
mlp.exe などが別途ダウンロードできればいいのですが、現在、MetaQuotes 社のサイトからは直接リンクされていません。
しかし、全く利用できないというわけではなく、直接URLを指定するとダウンロードできるという情報もいただいています。
但し、MetaQuotes 社からのオフィシャルな案内ではないので、ここでは直接は書かないことにします。
興味のある方は、「mlp.zip metaquotes」などでググってみてください。

にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら
マネポケ金融投資ブログランキングここにも為替ブログ記事が満載!

2008年01月23日

MetaTrader の多言語パックのカスタマイズ

前回、メタトレーダーの日本語版の項目名の間違いについて報告したという記事を書きました。
まだ返事はもらっていないのですが、色々調べたところ、ダイアログの項目名に限らず、メタトレーダーやメタエディターのメニュー名、ダイアログボックスの項目名、各種メッセージなどあらゆる文字列がカスタマイズできることがわかりました。

やり方はとても簡単です。MQLなどプログラミングに関する知識も必要ありません。
メタトレーダーをインストールしたフォルダの下に「languages」というサブフォルダがあります。その下に、「terminal.prl」「MetaEditor.prl」「liveupdate.prl」というファイルがあります。これが、それぞれ、メタトレーダー(terminal.exe)、メタエディター(MetaEditor.exe)、ライブアップデート(liveupdate.exe)で表示される各言語のメッセージを集めたファイルです。いわゆる多言語パック(MultiLanguage Pack)というものです。

これをダブルクリックすると、それらを編集するプログラム(mlp.exe)が起動します。関連付けされていなくて起動しない場合は、メタトレーダーをインストールしたフォルダの下の mlp.exe を直接実行して、[File]-[Open Project]から該当する prlファイルをオープンしてください。

すると、左側のウインドウに言語のリストが表示されるので「Japanese」を開いてみてください。さらに、

Strings
Menus
Dialogs

と分かれています。それぞれの下に多数の項目名やメッセージが格納されているのです。

ここでは、試しに「FXメタトレーダー入門」の278ページでも触れている日本語版の項目名の間違いを直してみましょう。

対応するのは、「Dialogs」の下の「[188]E-メール」の部分です。それを選択すると、右側のウインドウに編集する画面が現れます。それぞれのテキスト部分をダブルクリックすると、編集モードになります。編集ラインの下に元の英語が表示されるので、どの項目を編集しているかはすぐにわかります。ここでは、下のように編集してみました。

あとは、上のツールバーの [Preview]をクリックすると、

のように編集した項目名に置き換えたダイアログボックスが表示されます。

これで問題がなければ、同じくツールバー上の[Compile]をクリックします。言語が多いとちょっと時間がかかるかもしれませんが、

Compile successfully completed.

と表示されたらOKです。これで、メタトレーダーが直接読み込むことのできる lngファイルに変換されるので、次にメタトレーダーを起動したときには、ダイアログボックスの項目名が先ほど編集した文字列に置き換わっているのです。

この機能はプログラムを多国語に対応させるのに非常に便利なものです。
例えば、メタエディターではメニューなどが日本語化されていませんが、これを使うことによって日本語化させることもできるようになるのです。
あるいは、メッセージを自分好みのものに変えることによって、本当に自分だけのメタトレーダーを作ることもできるでしょう。

改めてメタトレーダーは凄い!と思いました。これで無料なんて・・・

にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら
マネポケ金融投資ブログランキングここにも為替ブログ記事が満載!

!「FXメタトレーダー入門」その他のエントリー

  1. 2008年01月17日

    1. メタトレーダーの不具合報告

  2. 2008年01月12日

    1. MQL4入門(3) - プリプロセッサ命令

  3. 2008年01月09日

    1. 月間総合ランキング4位

  4. 2007年12月19日

    1. メタトレーダーQ&A:エキスパートプログラムで自動売買できない

  5. 2007年12月12日

    1. MQL4入門(2) - 文字列の連結

  6. 2007年12月10日

    1. MQL4入門(1) - データ型(変数)

  7. 2007年12月08日

    1. 楽天ブックスでも取扱い始めました

  8. 2007年12月07日

    1. サンプルプログラムのインストール方法

  9. 2007年12月04日

    1. 「FXメタトレーダー入門」明日発売!

  10. 2007年11月30日

    1. 「FXメタトレーダー入門」カテゴリー作りました

  11. 2007年11月23日

    1. Amazonでも予約できます

  12. 2007年11月20日

    1. シストレナビで紹介されました

  13. 2007年11月16日

    1. 「FXメタトレーダー入門」出版予定日変更

  14. 2007年11月12日

    1. 「FXメタトレーダー入門」予約受付開始

  15. 2007年11月11日

    1. 「FXメタトレーダー入門」