2009年03月10日

メタトレーダー本続編

最近オプション取引の記事ばかりでしたが、久しぶりにメタトレーダー本の記事を。

一応、メタトレーダー本の続編執筆中です。今回章立てを初公開します。
と言ってもそれだけじゃ何のことかわからないでしょうが。

第1章 メタトレーダーを使いこなす前に
第2章 カスタム指標プログラムでテクニカル分析をパワーアップ
第3章 トレード関数で注文のバリエーションを広げよう
第4章 エキスパートプログラムでシステムトレード自由自在
第5章 MQL4をさらに使いこなしたい人のために

まあ続編ですので、メタトレーダーそのものの使い方は省略しています。
またシステムトレードの色々というよりもMQL4のプログラミングが主体です。
中級者・上級者向けに関数やライブラリを活用して複雑なプログラムを
シンプルに書けるように解説しています。

ただ、まだ途中なので、章立ても今後変わるかもしれません。
もうしばらくお待ちください。

にほんブログ村 為替ブログ FX オプション取引へFXオプション取引は穴場です(^^)

amazonで売れているFX本はこちら!

amazonの「証券・金融市場」部門も注目!

2008年11月04日

「FXメタトレーダー入門」正誤表

久し振りに 「FXメタトレーダー入門」の情報です。

些細なことですが、間違いを見つけたので報告しておきます。

184ページ11行目のiMAOnArray()のパラメーターの説明のところです。

(誤)applied_price 適用する価格
(正)(削除)

iMAOnArray()は、配列に適用する移動平均なので、PRICE_OPEN(始値)とかPRICE_CLOSE(終値)などを指定するためのパラメーター applied_price は不要です。

トレーダーズショップで、ブルベア大賞2008-2009のノミネート応募が始まりました。

☆☆☆応募はこちらからどうぞ☆☆☆


2008年10月01日

121証券のキャンペーンで「FXメタトレーダー入門」プレゼント

本日より、MetaTrader4に対応した国内業者 121証券で、口座開設キャンペーンが始まりました。

RobotFX口座を開設して5万円入金すると先着300名様に、拙作「FXメタトレーダー入門」がプレゼントされるというもの。

詳しくは121証券まで。
http://fx.121sec.com/index.asp

注意:「FXメタトレーダー入門」は、MetaTrader4を初めて使う方向けの入門書です。これを読んですぐに自動売買ができるわけではありませんので、ご注意ください。

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でのバックテストの方法など基本的な話になると思います。
当ブログをご覧の方にはそれほど珍しい話はないかもしれませんが、お暇な方はどうぞ。
間違っても「システムトレードは絶対儲かる」なんて話はありません。勘違いされないように。

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

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

  1. 2008年02月07日

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

  2. 2008年02月04日

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

  3. 2008年01月23日

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

  4. 2008年01月17日

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

  5. 2008年01月12日

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

  6. 2008年01月09日

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

  7. 2007年12月19日

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

  8. 2007年12月12日

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

  9. 2007年12月10日

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

  10. 2007年12月08日

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

  11. 2007年12月07日

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

  12. 2007年12月04日

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

  13. 2007年11月30日

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

  14. 2007年11月23日

    1. Amazonでも予約できます

  15. 2007年11月20日

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

  16. 2007年11月16日

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

  17. 2007年11月12日

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

  18. 2007年11月11日

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