• MT5ヘッジ口座用ライブラリ

    皆さん、こんにちは。

    前回の記事でもちょっと触れましたが、MT5のヘッジオプション機能が正式にリリースされました。MT5でも、MT4のようにオーダー毎にポジションが建てられるようになったようです。

    以下が日本語のリリース記事です。(タイトルは意味不明ですが・・・)

    MetaTrader 5取引プラットフォームはヘッジを獲得しました

    記事によると、これでMT5への移行は問題ない、と言わんばかりの書き方ですね。しかし、ポジションの扱いは見た目上、MT4と同じにはなりましたが、肝心のプログラミングの部分は相変わらず、互換性のないままです。これでMT5への移行が進むとは考えにくいです。

    ところで、拙著の『メタトレーダーではじめるFXシステムトレードプログラミング』は、MT4とMT5で同じソースプログラムが使えますよ、という本だったのですが、そういう需要がなかったせいか、あまり売れてはいないようです。

    ただ、私がEA作成用に利用しているのがこのライブラリなので、今回、MT5のヘッジ口座で使えるようなライブラリを作成してみました。

    ライブラリは、拡張子がmqhのヘッダファイルとして作成されています。解凍してできたファイルをMT5のデータフォルダの「MQL5\Include\MyLib」の下にコピーしてください。一応、黄色本のサンプルプログラム一式がインストールされていることが前提です。

    ヘッジ口座用のEAを作成するには、プログラムの最初に「#define HedgeAccount」を追加するだけです。下のように「#include」の前に記述します。

    この状態でコンパイルすると、ヘッジ口座用のライブラリを組み込んで実行ファイルが作成されます。EAの使い方はこれまでと同じです。「StartHistory」「RetrieveHistory」といった余計な変数がなくなったので、逆に見やすくなったかと思います。

    なお、ライブラリ関数の仕様は、黄色本に掲載したライブラリ関数と同じです。詳しい使い方については、黄色本を参照していただきたいと思います。但し、例によって本ライブラリを使用したことにより生じるいかなる損害に対しても著者は責任を負いません。自己責任でのご利用をお願いいたします。



  • 新MQL4のカスタム指標をMQL5に移植する

    皆さん、こんにちは。

    最近、MT5に関してちょっとした動きがありました。こちらのMetaQuotes社の記事です。

    MetaTrader 5にポジション計算のヘッジシステムが追加されました

    MT5はもともと同じ通貨ペアのポジションを合算して一つのポジションとして扱う方法を取っていました。これがMT4からの移行が進まない要因の一つでしたが、これを改め、MT4と同じようにオーダー毎にポジションが建てられるようにするオプションが追加されるそうです。

    まだベータ版で、正式な対応にはもう少し時間がかかるでしょうが、動向を注視したいと思います。これを早くやってくれれば、あの七面倒くさいライブラリ作らなくて済んだのに・・・

    ところで、今回の記事は上記のMT5の動きとは直接は関係ありません。新MQL4のプログラムをMQL5に移植する際の注意点についてお話しします。

    まず、『新MT4対応 FXメタトレーダープログラミング入門』に掲載しているカスタム指標のサンプルプログラムの簡単なものを見てみます。

    これは、各バーにおける4本値の平均をプロットするカスタム指標です。特に意味はありません。

    これをMQL5に移植してみましょう。まずは、ファイルの拡張子を「mq4」から「mq5」に変えてMT5のデータフォルダの「MQL5\Indicators」の下にコピーします。すると、MT5のメタエディターで開くことができるので、そのままコンパイルしてみましょう。

    すると、こんなエラーが出ます。

    ‘Open’ – undeclared identifier
    ‘High’ – undeclared identifier
    ‘Low’ – undeclared identifier
    ‘Close’ – undeclared identifier

    MQL4では、4本値の配列が「Open[]」「High[]」「Low[]」「Close[]」という配列としてあらかじめ定義してあるので、それをそのまま使えばよかったのですが、MQL5ではそれがありません。

    ここでは、OnCalculate()関数の引数となっている「open[]」「high[]」「low[]」「close[]」という配列が4本値の配列に対応しているので、「Open→open」「High→high」「Low→low」「Close→close」のように変えます。

    これをコンパイルすると、エラーはなくなりました。実行ファイルはできているので、適当なチャートに挿入して実行してみましょう。でも、何も表示されません。そこでコンパイルの画面に警告メッセージが出ているところに注意してください。

    no indicator plot defined for indicator

    指標プロットが定義されていないということのようです。実は「#property」命令がMQL4とMQL5でちょっと異なっていて、MQL5ではプロットする指標の数を「indicator_plots」で指定しなくてはなりません。またもう一つ、指標の種類も「indicator_type1」で指定する必要があります。ラインの場合、「DRAW_LINE」を使います。これらを追加すると、次のようになります。

    これをコンパイルすると、エラーも警告も出ません。そこで、これをチャートに挿入すると、ラインが表示されます。これで移植完成かと思いきや、しばらくチャートを見ていると新しいバーのラインが更新されません。

    USDJPY.mM1
    これは、指標バッファ用の配列がMQL4とMQL5で異なっているためです。MQL4では指標バッファ用配列は最初から「時系列配列」になっていますが、MQL5ではそうではなく、時系列配列にするためにArraySetAsSeries()関数を実行しなくてはなりません。これを「Buf」だけでなく、4本値配列の「open」「high」「low」「close」に適用すると、次のようになります。

    これで移植完成です。どうでしょうか?MT4からMT5への移行の道のりはまだまだ長そうな気がします。

    なお、新MQL4の詳しいことは、こちらの書籍をご参照ください。

    『新MT4対応 FXメタトレーダープログラミング入門』



  • Kindle本プロモーションに選定?


    『新MT4対応 FXメタトレーダープログラミング入門』

    本日、アマゾンより「Kindle本プロモーション契約」というメールが来ました。何か怪しいメールかと思いましたが、以下のようにKindle本を宣伝してくれるそうなので、一応契約しました。

    「日替わりセール」「月替わりセール」「Kindle先行・限定タイトルセール」または「ゴールデンウィークセール」などのスポットセール等Kindle ストア内の様々な位置で紹介されます。

    もし、これから本書を購入しようかと思っている方がいましたら、安く買える機会があるかもしれないので、予めお知らせしておきます。ただ、そのセールがいつ行われるかは著者にはわからないので、逆にセールが行われていれば教えてほしいくらいです。



  • 実践本のサンプルプログラム

    皆さん、こんにちは。

    出版してから既に6年以上経った実践本「FXメタトレーダー実践プログラミング」ですが、いまだに時々質問をいただきます。

    最近多いのが、ライブラリファイルの「MyLib.mq4」をコンパイルするとエラーが出るけど大丈夫か?というものです。

    実際、コンパイルすると「sign mismatch」というメッセージが何か所か出ます。ただし、これはエラーメッセージではなく、警告メッセージです。一応、コンパイルはできて、実行ファイルも作成されているはずです。通常の実行には、特に問題はないと思います。

    ちなみに警告メッセージが出ているのは、次の if 文が書かれているところです。

    「sign mismatch」の意味は、比較している左辺と右辺のデータ型の符号の扱いがあっていない、ということです。つまり、データ型としてはどちらも整数型で同じなのですが、左辺の「GetTickCount()」の戻り値の型が「uint」型(符号なし整数)なのに対して、右辺の「MyOrderWaitingTime」が「int」型(符号付き整数)と、符号の有無で型があっていないということなのです。

    旧MQL4では、整数型は「int」型しかなかったので問題なかったのですが、MT4 build600以降の新MQL4では、整数型が「int」「uint」などC言語と同じように増えたので、こんなメッセージが出るようになったのです。

    ということで、このメッセージを消すためには、型を揃えればよいので、17行目の「MyOrderWaitingTime」の宣言文で、型が「uint」になるように

    と修正します。また問題の if 文中に出てくる「starttime」の宣言文も同じく

    のように「uint」に修正すればOKです。

    以上の修正を行ったサンプルプログラム一式を上げておきますので、下のリンクからダウンロードしてください。

    ただ、実践本のプログラミングは、旧MQL4をベースにしているので、現在のMT4で動かすプログラムとしては、あまり推奨できません。新MQL4のプログラミングは、「新MT4対応 FXメタトレーダープログラミング入門」で解説しているので、そちらに移行されることをお勧めします。



  • 新メタトレ入門書の作り方(3)


    『新MT4対応 FXメタトレーダープログラミング入門』

    明けましておめでとうございます。年をまたいでしまいましたが、kindle本の作り方の続きです。

    epub作成ツールとして重宝したでんでんコンバーターですが、いくつか困ったこともありました。

    • でんでんコンバータ―でエラーが発生してepubが作成されない

    これは執筆が進んで、テキスト中でマークダウン記法やhtmlのコードが混在した頃に時々遭遇しました。でんでんコンバータ―では、何かしらエラーが発生すれば、エラーだということはわかるのですが、どこのファイルでどういうエラーが発生したのかはわかりません。

    そのため、エラーを特定するために前のバージョンに戻したりと、結構プログラミングのデバッグのようなことをやりました。こまめに変換して正しくできることを確認しなくてはいけないとは、ほんとにプログラミングと同じでした。

    ただ、慣れてくるとエラーの発生しそうなところはわかってきます。本書の場合、文中で「i<0」のようなコードを書いているところがあって、その不等号の記号がhtmlの記号と見なされて、おかしくなるケースが多かったようです。文中のコードは「`」で囲むマークダウン記法で書けば大丈夫でした。

    • でんでんコンバータ―でエラーが出ないのに反応しなくなる

    エラーが出れば何とかなるのですが、エラーが出ないのにでんでんコンバータ―が反応しなくなることもありました。これは原因不明だったのですが、時間をおいて再度トライしてみるとできたりしたので、サーバーの負荷の問題だったのかもしれません。

    実際、本書全体を変換する際に150個近い画像ファイルのリンクを張っていたので、ウェブ上サービスとしては使用条件が厳しかったのでしょう。でも無料のサービスなので無理を言ってはいけません。使える範囲で使うというのがマナーです。

    • 画像ファイルの解像度の問題

    最後の方で問題に気付いて、結構な作業量となったのが画像ファイルでした。画像ファイルは150個もあるので、無暗に大きくしてしまうと全体のファイルサイズに影響します。当初はPCのKindleビューアで見て適当だと思われる解像度で画像ファイルを作成していました。

    ただ、Kindleの端末やFireタブレットで読む人も多いだろうと多い、最も解像度の高いFire HDX 8.9を買って、それで確認してみました。すると、画像がすごく小さく表示されてしまい、文字などがよく見えなくなってしまいました。Kindle本は文字のサイズは変えられるのですが、画像のサイズは解像度で決まってしまうのでした。同じファイルでも解像度の低い端末では大きく表示されるものが、解像度の高い端末では小さく表示されるのです。

    小さい画像もダブルタップで拡大することはできるのですが、いちいち拡大していては文章が読みにくいということで、画像ファイルをすべて大きいサイズで作り直すことにしました。画像ファイルは、大きすぎても勝手に縮小して表示してくれるので、特に問題はありません。結構手間はかかりましたが、編集・校正作業全体に比べればわずかなものです。次からはその手間は省けるでしょう。

    • 最後にKDPに登録

    KDPへの登録は、本書の本体のファイルをアップロードをする前にある程度済ませることができます。KDPのアカウントもアマゾンのアカウントがあればすぐに作れます。以前は米国の源泉徴収税の免税処理が面倒だったようですが、最近は米国以外で販売する場合は、この処理は不要になっています。

    本のファイルをアップロードした後に決めるのが本の価格です。これがなかなか悩ましいところですが、そのときパンローリングのメタトレーダーの本がKindle版で1800円だったので、その半額ということで900円に設定しました。

    ロイヤリティは2か月後ということなので、まだもらってません。ロイヤリティを70%にした場合、別途配信コストがかかるということでしたが、1MBあたり1円ということで、本書の場合6円でした。これも本のアップロード時にはよくわからなくて、アップロードしたmobiファイルが12MBあったので、12円かかるのと思っていたのですが、実際に配信されるファイルは半分くらいに小さくなっているようでした。

    他にもよくわかっていないことも多いのですが、とりあえずアマゾンから文句も言われていないし、読者からのクレームもないので、いいのかなと思っています。ということで、本年もよろしくお願いします。