2008年08月04日
「FXメタトレーダー入門」続編
- toyolab
- 18:37
- カテゴリー:!「FXメタトレーダー入門」
去年の今頃は、 「FXメタトレーダー入門」の執筆に明け暮れていました。昨年末に出版してから半年ちょっと経ちました。ご購入いただいた方はもちろんのこと、多くのMetaTrader4関連のブログでもご紹介していただき、どうもありがとうございます。
当初は続編を書く予定はなかった(そもそもこの手のマニアックな本はあまり売れないだろうという話でした)のですが、読者の皆さんから続編のご要望も色々といただいたりしたことから、続編の企画が持ち上がりました。
入門では、初心者向けに内容を厳選したので、やむを得ず削った内容も色々とあります。そのあたりも含めて、今回はもう少し実用的な内容にしたいと考えています。
まだ構成を練っている段階なので、詳しいことはお話しできませんが、やはりメタトレーダーのプログラミングが中心になることでしょう。メタトレーダーにおける独自のプログラミングの流儀について語れればいいかなと思います。
2008年06月11日
初心者向けC言語学習サイトの紹介
- toyolab
- 18:12
- カテゴリー:!「FXメタトレーダー入門」
MetaTrader4に搭載されているプログラミング言語MQL4はC言語をベースとしたものです。
「FXメタトレーダー入門」でも、初心者向けにMQL4の解説はしていますが、すぐに試せるように文法的な説明は極力省略しています。
もし、本書の説明でよくわからない方は、まずC言語について勉強した方がいいかと思います。
C言語の参考書や参考サイトはたくさんありますが、初心者向けサイトとして以下のものをお勧めします。
無料のサイトですが、何年もかけて丁寧に作られています。C言語の基本的な書き方を理解すれば、MQL4の理解に大変役立つと思います。
2008年05月10日
MT4でリピートイフダン注文
- toyolab
- 11:57
- カテゴリー:!「FXメタトレーダー入門」
最近、某有名為替ブログでリピートイフダン注文の話題が続いていますね。
対応している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) - 変数名、関数名の注意点
- toyolab
- 12:24
- カテゴリー:!「FXメタトレーダー入門」
久しぶりの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日
シグナル指標プログラムを使ってエキスパートプログラムを作る
- toyolab
- 16:17
- カテゴリー:!「FXメタトレーダー入門」
私はこのブログ、「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 は時間位置のシフトを表します。ここでは同じ位置にシグナルを発生させるので0としています。
実際のオーダーを出す条件としては、BuySignal、SellSignal にシグナルとしての値が入っているかどうか、つまり無シグナルの EMPTY_VALUE 以外かどうかの判定だけを行います。
これで、MACross_Ind.mq4 のシグナルをもとにしたエキスパートプログラムが作成できました。
この手法は別のプログラムの内容を連携させながら作成するので、ちょっと初心者には難しいかと思い、「FXメタトレーダー入門」には掲載しませんでした。
しかし、このレベルのエキスパートプログラムが理解できれば、シグナル指標プログラムのファイル名とパラメーターを差し替えるだけで、色々なシステムのエキスパートプログラムが簡単に作れるし、ストラテジーテスターで実行した後にチャートを開いた場合(237ページ参照)エキスパートでの売買ポイントと、シグナル指標のテクニカル指標やシグナルが同時に表示されるため、動作確認が一目でできるというメリットもあります。
システム設計時にまずシグナル指標プログラムを作成することをお薦めするのは、このようにエキスパートプログラムとうまく連携が取れる仕組みがあるからなのです。
2008年03月19日
メール設定画面の日本語の修正が反映されました
- toyolab
- 11:08
- カテゴリー:!「FXメタトレーダー入門」
以前の記事で「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 のセミナー
- toyolab
- 08:02
- カテゴリー:!「FXメタトレーダー入門」
前回訪問した ODL Securities で近いうちにHPをリニューアルするとのことでしたが、ODL Securities のサイトではなく、ODL Japan という別サイトでのリニューアルでした。
ODL Japan という日本法人化で口座開設などの手続きも簡単になったようです。
ところで、3月20日にODL Japan 主催のセミナーが開催されます。無料セミナーなんですが、午後の部に私が登場します!
「MetaTrader4を使ったシステム売買入門」ということで簡単なお話をさせていただきます。
拙作「FXメタトレーダー入門」をテキストとして使う予定なので、参加者には拙作が配布されると聞いています。
まあここでも入門なので、MT4でのバックテストの方法など基本的な話になると思います。
当ブログをご覧の方にはそれほど珍しい話はないかもしれませんが、お暇な方はどうぞ。
間違っても「システムトレードは絶対儲かる」なんて話はありません。勘違いされないように。
2008年02月07日
月間総合ランキング5位
- toyolab
- 18:19
- カテゴリー:!「FXメタトレーダー入門」
拙作の「FXメタトレーダー入門」ですが、パンローリング直販サイト、トレーダーズショップの月間総合ランキング(2月8日付け)で5位にランクインしました!
先月は発売直後だったので4位に入りましたが、今月は無理かなと思っていました。
意外に売れているようでよかったです。ご購入いただいた皆さん、どうもありがとうございます!
増刷も決まったので、もうしばらくは大手書店やネットで手に入ると思います。
不定期になりますが、読者向け記事も続けていきます。お楽しみに。
2008年02月04日
MetaTrader の多言語パックについて(訂正)
- toyolab
- 21:57
- カテゴリー:!「FXメタトレーダー入門」
前回のMetaTrader の多言語パック(MultiLanguage Pack)の記事ですが、ちょっと調査不足で不十分な情報を掲載してしまいました。
実は、最近(去年あたりから)メタトレーダーを使い始めた場合、多言語パックに必要な mlp.exe や *.prl ファイルがインストールされないようです。正確には2006年11月14日リリースのBuild 200からそれらのファイルは削除されたようです。
逆に言うと、それ以前にメタトレーダーをインストールした人にはもれなく付いているのです。アップデートしても削除はされないので、そのまま使えるというわけです。
今回急いで記事を書いたので、以前から使っている自分の環境しか確認しなかったのです。
特に質問があったわけではないのですが、先日、mixiの方からご指摘をいただきました。
ちょっと混乱させてしまい、申し訳ありませんでした。
なので、現状では誰でも日本語メニューがカスタマイズできるというわけではないようです。
mlp.exe などが別途ダウンロードできればいいのですが、現在、MetaQuotes 社のサイトからは直接リンクされていません。
しかし、全く利用できないというわけではなく、直接URLを指定するとダウンロードできるという情報もいただいています。
但し、MetaQuotes 社からのオフィシャルな案内ではないので、ここでは直接は書かないことにします。
興味のある方は、「mlp.zip metaquotes」などでググってみてください。
2008年01月23日
MetaTrader の多言語パックのカスタマイズ
- toyolab
- 15:00
- カテゴリー:!「FXメタトレーダー入門」
前回、メタトレーダーの日本語版の項目名の間違いについて報告したという記事を書きました。
まだ返事はもらっていないのですが、色々調べたところ、ダイアログの項目名に限らず、メタトレーダーやメタエディターのメニュー名、ダイアログボックスの項目名、各種メッセージなどあらゆる文字列がカスタマイズできることがわかりました。
やり方はとても簡単です。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メタトレーダー入門」その他のエントリー
2008年01月17日
2008年01月12日
2008年01月09日
2007年12月19日
2007年12月12日
2007年12月10日
2007年12月08日
2007年12月07日
2007年12月04日
2007年11月30日
2007年11月23日
2007年11月20日
2007年11月16日
2007年11月12日
2007年11月11日
上位ランキングのブログ記事はこちら