著書のご紹介
![]() |
▼高機能ソフトが切り開く! 「FXメタトレーダー入門」 うわさの高性能オールインワンFXソフトを徹底紹介。ようこそ“メタトレーダー”の世界へ! |
![]() |
▼MT4開発過程を段階的に学ぶ 「FXメタトレーダー実践プログラミング」 FXメタトレーダー入門の続編としてプログラミング機能をできるだけ多く紹介 |
2012年01月31日(火)
コピートレードのプログラミング(3) [MQL4]
コピートレードの続きです。
漠然とトレードをコピーすると言っても、具体的にどういう情報をコピーすればよいでしょうか?
MT4のトレードでは、成行き注文であれば、
・売買の種類
・売買ロット数
・売買価格
が必要ですし、待機注文であれば、さらにその注文の有効期限が付く場合があります。
また、どちらの場合でも、損切りオーダーや利食いオーダーが付加されることもよくあります。
トレードだけでなく、口座情報までコピーしたければ、これらの情報すべてをコピーする必要がありますが、それは面倒です。
ここでは、簡単のため、トレードが約定したという情報のみをコピーすることにします。つまり、オープンポジションのロット数が変化した都度、その情報をコピーします。
ここで、MT4とMT5でポジションの扱い方の違いに注意する必要があります。
MT4では、同じ通貨ペアのトレードでも、送信するオーダー毎に別々のチケット番号が発行されて区別することができます。業者によっては両建ても可能なので、同じ通貨ペアで買いポジションと売りポジションが混在することもあり得ます。
しかし、MT5の場合、オープンポジションは通貨ペア毎に合算されてしまい、オープンしたポジションの合計ロット数だけしかわからないようになっています。両建てポジションも同じロット数同士でキャンセルされてしまいます。
MT4同士のトレードのコピーであれば、オーダー単位でコピーすることもできるのですが、ここでは、コピー元がMT4でもMT5でも共通に処理できるよう、オープンしたポジションのロット数だけを渡すようにしてみます。
次に複数の通貨ペアをどのように区別するかです。
もちろん一つのファイルで複数の通貨ペア情報を渡すこともできますが、その場合、コピー先で、そのファイルの内容を分析して各通貨ペア毎に分けるという作業が必要になります。
ここでは、最も簡単に、一つのファイルには一つの通貨ペアの情報だけしか渡さないようにします。
すると、ファイルの中身にはロット数の情報だけ入れればよいことになります。買いか売りかの区別は、買いをプラスの値、売りをマイナスの値にすれば、一つの数値だけで済みます。
では、通貨ペアはどこで区別するかというと、それはファイル名で区別します。例えば「EUR/USD」の通貨ペアであれば、「EURUSD.txt」というファイル名にするなどです。以下に具体例を示します。
・EUR/USD 0.1ロットの買いポジションの場合、
「EURUSD.txt」 というファイルに「0.1」という内容を書き込みます。
・USD/JPY 0.2ロットの売りポジションの場合、
「USDJPY.txt」 というファイルに「-0.2」という内容を書き込みます。
ここまで簡単に考えると、プログラムは割と簡潔に書くことができます。
次回から実際のプログラムの書き方を説明していきます。
Posted at 17時03分 パーマリンク
2012年01月24日(火)
コピートレードのプログラミング(2) [MQL4]
前回は、コピートレードの簡単な仕組みとして、ポジション情報をファイルを経由して渡すという方法を紹介しました。
通常のWindowsのプログラムでは、ファイルを読み書きするフォルダの場所は、割と自由に変えられるのですが、MT4、MT5の場合、読み書きができるフォルダが決まっているという制約がありました。
その問題を解決する方法はいくつかあります。
1.Windows APIを利用する方法
EAで読み書きできるフォルダが決まっているのは、MQL4、MQL5の組込み関数を使う場合です。組込み関数ではなく、WindowsのAPIを直接使うことで、読み書きするファイルの位置を同じフォルダに設定することができます。以下のサイトにその方法が説明されています。
File Operations via WinAPI
ただ、見てもらうとわかるように、結構複雑です。手軽にプログラムするにはちょっと敷居が高いかもしれません。
2.MT4のインストール先を変える方法
コピー元のMT4では、インストールしたフォルダの下のexperts¥files の下であればファイルの読み書きができます。そこで、コピー先のMT4をコピー元のMT4のexperts¥filesの下にインストールするという方法もあります。experts¥filesの下であれば、サブフォルダの階層が深くてもファイルの読み書きは可能です。
この方法を説明してあるのは以下のサイトです。
How to Copy Trading from MetaTrader 5 to MetaTrader 4
このサイトは、本記事の内容と同じコピートレードについての解説です。手っ取り早くやりたい人はこちらを参考にしてください。この方法では、普通にMQL4、MQL5でプログラムできます。一つ難点なのは、サブフォルダの階層が深くなるので、ファイルの位置を正確に記述しなくてはいけないということでしょう。
3.シンボリックリンクを利用する方法
もう一つの方法は、あるファイルを別の場所からでも見えるようにリンクを張るという方法です。Windowsのバージョンによってやり方が変わるので、詳しくは以下のサイトをご参照ください。
ジャンクション機能を使ってフォルダをマウントする
以下に、Windows Vista、Windows 7で使えるシンボリックリンクという方法を紹介します。
これは、MT4のインストール先を変えずに、MQL4のプログラムだけでコピートレードが実現できます。ただ、最初の一回だけですが、コマンドプロンプトからコマンドを実行しないといけません。
ここでは、簡単のため、コピー元のMT4が「C:¥MT41」、コピー先のMT4が「C:¥MT42」にインストールされているものとします。
例えば、MT41のEAで作成されたファイルが「position.txt」とすると、そのファイルの場所をフルパスで表すと、C:¥MT41¥experts¥files¥position.txtとなります。
このファイルをMT42のデータフォルダからも見えるようにするには、まず、コマンドプロンプトを管理者権限で立ち上げます。(コマンドプロンプトはWindowsのスタートメニューのアクセサリのグループに入っています。そこで右クリックするとサブメニューが現れるので、ここで「管理者として実行」を押します)
そして、下図のように「cd」というコマンドで、MT42のデータフォルダに移動します。
次に「mklink」というコマンドでシンボリックリンクを張ります。mklink はリンク名とそのリンクが参照するフルパスのファイル名という二つの引数を取ります。
ここでは、C:¥MT41¥experts¥files¥position.txt というファイルをposition.txt というリンク名で参照できるようにするために、下図のようにコマンドを実行します。
「シンボリックリンクが作成されました」と表示されればOKです。
これで、MT42のデータフォルダにposition.txt というリンクが作成されます。このリンクはファイルのように扱うことができるので、MT42のデータとしてEAから読み書きすることができるのです。
これで、同じposition.txt というファイルがMT41からもMT42からも読み書きできるようになりました。
次回は、どういうデータ形式でポジション情報を渡せばよいかについて考えてみます。
Posted at 17時04分 パーマリンク
2012年01月17日(火)
コピートレードのプログラミング(1) [MQL4]
では、今回からコピートレードのプログラミングについて説明していきます。
プログラミングを始めるに当たり重要なことは、「シンプルに考える」ということです。最終的には色々な機能を追加するにしろ、最初からあれもこれもと欲張っては、先に進めません。
ということで必要最小限の機能を考えてみます。
まず、トレードのコピーは、同じPC上で動いているMT4から別のMT4、あるいはMT5からMT4という2パターンということにします。
この2パターンの違いについては別途考えることにして、次にコピーの仕組みについて考えます。
コピーの順番を考えると、まずは、コピー元のMT4(MT5)から売買ポジションの情報を取得する必要があります。これはMQL4のプログラムで作成することができます。新規ポジションが建ったり、既存ポジションが決済されたりを監視する必要があるのでEAとして動かしておくのがよいでしょう。
一方、コピー先のMT4では、コピー元のポジション情報をもとに、実際にオーダーを送信する必要があります。これもMQL4のEAとして作成することができます。
ということで、コピー元とコピー先でそれぞれEAを動かしておけばよさそうだということがわかりました。
では、肝心のポジション情報をどうやって渡せばよいでしょうか?
コピー元のMT4もコピー先のMT4も同じPC上で動いているので、データの渡し方にも色々と考えられます。最も簡単で、かつMQL4のプログラムとして作成できる方法は、ファイルを介して渡す方法です。
つまり、コピー元のMT4で取得したポジション情報をファイルに書き出し、そのファイルをコピー先のMT4で読み込み、実際にトレードを行うという方法です。
これなら何とかなりそうです。
しかし、ここで問題があります。コピー元のMT4が書き出すファイルとコピー先のMT4が読み出すファイルは同じものでなくてはいけません。
ところが、MT4の場合、EA上で作成するファイルは、MT4をインストールしたフォルダの下のexperts¥files というサブフォルダの下に限られます。またMT5の場合、データフォルダの下のMQL5¥Filesの下に限られます。
ということは別々のMT4、あるいはMT5上のEAから共通に入出力できるファイルが作れないということになります。
この問題については、MQL4のプログラミングだけでは解決できないので、ちょっとした工夫が必要となります。
続きは次回に。
Posted at 16時37分 パーマリンク
2012年01月10日(火)
コピートレード [シストレ一般]
今回からまた一つのテーマを何回かに分けて連載していきます。年明け1回目のテーマは「コピートレード」です。
コピートレードとは、文字通りとればトレードをコピーするということですが、トレードをコピーってどういうことでしょうか?
トレードというのは、口座単位で行うものなので、ある口座で行われたトレードと全く同じ内容のトレードを後から別の口座で行ったかのようにコピーすることはできません。
実際には、ある口座でトレードが行われたら、その直後に同じトレードを別の口座で行うということになります。ただ、他人の口座のトレードを勝手に見ることはできないので、登録されたトレーダーの行ったトレードを自分の口座で実行してくれる商用サービスとして利用することがほとんどでしょう。
具体的には、ZuluTrade、MirrorTrader、Currensee、Collective2のように、多くのトレーダーの中からいくつかを選んでコピーするものや、個別の売買システムをコピーするものまで様々なサービスがあります。
しかしここでは、そのようなサービスを個別に紹介するわけではありません。
今回のテーマで想定しているのは、自分の持っている複数のMT4/MT5口座間でトレードをコピーするということです。
例えば、あるEAのパフォーマンスが業者Aではよいが、業者Bではあまりよくないとします。ここで、そのEAを業者B用にチューンアップすることも考えられますが、もし、業者Aと業者Bの売買スプレッドが同等であれば、業者Aのトレードを業者Bにコピーすれば、ほぼ同じパフォーマンスが得られると考えられます。
別の例としては、MT5でEAを作成したものの、リアル口座で運用したい業者がまだMT5に対応していない場合、そのEAをMT5上で動かし、そのトレードをMT4にコピーする、ということも考えられます。
商用のコピートレードサービスでは、不特定多数の口座にトレードをコピーするため、ネットワークを経由したシステムになりますが、ここでは、自分のPCなり、VPS上で複数のMT4、MT5を立ち上げた状態でのコピーを想定しています。
なので、あまり難しい技術を使うことなく、MQL4、MQL5のプログラミングの範囲内でできることを中心に説明していきたいと思います。
Posted at 16時23分 パーマリンク
2012年01月04日(水)
新年のご挨拶 [アナウンス]
皆さん、新年明けましておめでとうございます!
今年も引き続き、このブログでコラムを書くことになりました。よろしくお願いいたします。
さて、今年最初のコラムですが、昨年末にこんなことがありました。
久しぶりに大学時代の友人と会食をし、資産運用の話から派生してFXの話題になりました。
その友人は、FXの基本については理解しているものの、具体的にどういう方法があるのかわからないということだったので、その一つとしてシステムトレードを紹介しました。
彼は、システムトレードが何となくコンピュータを使ってトレードするということだけはわかっていましたが、過去の相場データだけを使って売買すると言う話をすると、それで相場が予想できるとは思えないと言いました。
確かにシステムトレードでは、予想が当たる確率を高くすることも重要だが、予想を当てることがすべてではなく、ポジションを取った後にそのポジションをどうコントロールするか、つまり、損切り、利食いをいかに人間の感情抜きに機械的に行うかということの方が重要だという話をしました。
しかし、そういう話だけ聞いてもちゃんと理解はしてもらえなかったようで、一般にはシステムトレードっていう手法も理解されにくいものだなと実感しました。
実際、システムトレードで儲かるという保証は全くないわけなので、まともに考えれば安心して運用できないと考えるのが普通なのかもしれません。
ただ、現代の科学技術だって、すべてが理論的に解明されているわけではなく、経験則でしか説明できないものもたくさんあります。
システムトレードもその一つです。だから色々な考え方があって然るべきなのです。大事なのは、他人の考え方を鵜呑みにするのではなく、自分の考えとして理解することです。
今年も皆さんがシステムトレードに関して自分なりの理解を深めるきっかけになるようなコラムを書いていければと思います。
週1回程度のペースですが、よろしくお願いいたします。
Posted at 13時57分 パーマリンク
2011年12月26日(月)
2011年コラム一覧 [ポータルページ]
2011年もいよいよ終わりです。今年は何といっても、3月11日の東日本大震災に端を発した巨大津波、福島原発の事故などリスクに対する備えの重要性を再認識させられた年でした。世界的にもアラブの独裁政権の崩壊や欧州危機など不安定な1年でした。
最後に、今年のコラムをいくつかのテーマ毎にまとめておきます。来年こそはよい年になりますように。
■MQL5関連
数値データと変数の型
数値変数代入時の注意点
変数の型の変換
数値の誤差に関する注意点
パラメータいろいろ
関数のオーバーロード
OnCalculate()関数のオーバーロード
OnCalculate()関数の使い方
オーバーロードに関して
トレーディングストラテジークラス
■MT5関連
ティックデータの生成方法
標準のトレイリングストップ
EAジェネレータ(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)
EAジェネレータについて雑感
MT5への移行が進まない理由
■MQL4関連
サーバー時間の違いによるテクニカル指標の違い
サーバー時間のズレに対応したテクニカル指標(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)
■テクニカル分析
移動平均DEMAとTEMA
DEMAとTEMAのちょっとした分析
適応移動平均いろいろ
■オプション取引
最近はやりのオプション取引
バイナリーオプションについて雑感
■シストレ一般
リスクに対する備えの難しさ
自動売買のリスクについて
シストレ雑談−システムに対する考え方
Posted at 14時57分 パーマリンク
2011年12月20日(火)
バイナリーオプションについて雑感 [オプション取引]
今回は、最近流行りのバイナリーオプションについての雑感です。
バイナリーオプションは、基本的には2者択一という考え方なのですが、いくつかのバリエーションがあります。
ここでは、最もわかりやすい「ある価格より上がるか下がるか」に賭けるバイナリーオプションについて考えてみます。
このオプションは、ラダーオプションと呼ばれたり、単にハイ/ローと呼ばれたりします。
取引画面の一例です。これは24option.comという業者の画面ですが、特にこの業者を推奨するというわけではありません。たまたま見つけただけです。
この例だと、ユーロ/ドルの現在のマーケット値を基準にして、それより上がるか下がるかを予想します。
満期時刻が10分から30分後に決められているので、その時刻に現在値より上がってると思えば、「ハイ(高)」のオプションを買い、下がっていると思えば「ロー(低)」のオプションを買うだけです。
ここで購入するオプション価格は自分で決めることができ、上の例では100ドルで購入することになります。
それで予想が当たれば、180%が返ってくる、つまり、180ドルが返ってきますが、最初に100ドル支払っているので、利益は180−100=80ドルとなります。
逆に予想が外れた場合、何も返ってきませんが、最初に払った100ドルだけが損失となるわけです。
つまり、この種類のバイナリーオプションでは、利益、損失ともに限定されているということになります。
これに対して普通のオプション(バニラオプション)の場合、コール、プットの売買を個別に見れば、買いの場合、損失限定、売りの場合、利益限定というように利益と損失のどちらかが限定という形になります。
しかし、権利行使価格の異なる二つのコールの売りと買い、または権利行使価格の異なる二つのプットの売りと買いという合成ポジションを作ると、下図のようなバイナリーオプションに似た損益曲線を実現することができます。(但し、横軸、縦軸の値は適当です)

この場合、二つの権利行使価格の間は損益が直線状に変化する点がバイナリーオプションとは違いますが、利益、損失ともに限定されるという点では同じです。
もし、バイナリーオプションがバニラオプションの合成で作られるとすれば、その価格はどうやって決まるでしょうか?
バニラオプションの各ポジションの価格はオプション相場の需給関係から決まります。通常のFXの売買と同じくオプションの売りと買いの価格差(スプレッド)がコストになりますが、それを除けば買いと売りとでどちらが有利ということはありません。なので、実際にはそのオプションには適正価格というものがあります。
それがバイナリーオプションでは利益、損失が固定されているので、利用者にとって適正な価格で提供されているのかがわからないというデメリットがあります。
もし、必要以上のコストがかかっているとすれば、相当優位性のある戦略で臨まなくては勝ち目がないということになります。
一方、バイナリーオプションのメリットは、満期までの時間がバニラオプションに比べて圧倒的に短いということでしょう。
バニラオプションの満期は1週間から1ヶ月、3ヶ月、6ヶ月と長いのに対して、バイナリーオプションは10分かそこらで結果がでます。
短期的に優位な戦略があればトレード数を重ねることで利益を大きくすることができるかもしれません。
但し、戦略が優位かどうかはシステムトレード同様、バックテスト、フォワードテストなしには判断できません。
そのようなテスト環境や自動売買ができる環境が整ってくれば、バイナリーオプションもシステムトレーダーにとって魅力のある手法になるのではないかと思います。
Posted at 17時44分 パーマリンク
【 過去の記事へ 】
















