システムトレードってジャンル、ご存知ですか?株とか為替とかを「自動的に」売買して儲けを出す試みのことです。
それって証券会社とかの大掛かりなシステムじゃないとできないんじゃないの?と思ったあなた、実は、FXではかなりシステムトレードがしやすくなってきてるんです。
そこで、自作のWebサービスにAdsense貼付けて細々とマネタイズするなんてやめてさ、どーんといこうや、という内容を紹介したいと思います。
っても他人の記事にリンク張りながらMT4を紹介するだけなんで。既に知ってる人は帰ってくださいw*1
【重要】FXについてちゃんと理解せよ
システムトレードはFXでやる。FX。外国為替証拠金取引。まず、これについてちゃんと理解せよ。
特に、周りでFXで大損こいた人がいるから怖い、とか、すごい儲かるけど非合法なんでしょ?とか、なんらかの先入観がある人は、この機会にちゃんと理解せよ。
謎の大儲け自慢ブログとか大損自虐ブログで適当にイメージづけるんじゃなくて、ちゃんと理解せよ。
大事なことなので「理解せよ」3回言いました。メリットとデメリット、リスクを理解しないうちに金をつぎ込むなかれ*2
で、概要理解はどこでもいいや。実際プログラミングできるくらいの理解力があれば難しいところはほとんどない。証券会社のHPでもダイヤモンドZAIのムックとかでもいい。プログラマーならWikipediaとかでもいいのかな?
仕組み自体はただの取引だ。よく問題視されるレバレッジについても、単にリスクを高めてリターンを得るための仕組みで、アンフェアなものではない*3。仕組み自体が絶対的に危険なわけではないし、絶対的に安全なわけでもない。
スポーツと同じで、ルールが難しいのではなくルールの中で勝つのが難しいだけ。
メタトレーダー4をインストールせよ
メタトレーダー4。通称MT4。これが要のソフト。これはチャートソフトであるんだけど、ソフト内に開発環境(専用言語とエディタ)が内包されていて、そこで自動売買のプログラムを開発できる。
さらに「MT4対応の証券会社」というのがいくつかあって、ここに口座を開くとMT4プログラム内での注文が、実際の口座内のお金を使った注文とリンクされ、自動売買が実現できる。
「MT4 インストール」で検索すればわかりやすいブログがたくさん出るので適当にインストールせよ。なぜか今日段階で公式のリンクが416エラーを吐いているので、以下の直リンクからとりましょう。
http://www.metatrader4.com/files/mt4setup.exe
開始にはデモ口座が必要なので、起動時に現れるダイアログにプログラマらしい適当な情報を入力せよ。
9/3 20:30ごろのチャート(1時間足)
で、これがチャート。1ドルがいくらなのかを時系列で表示する。なんて言っていいかわからないが、普通のグラフだ。
最近急激に円安になってこの時点で1ドル105.03円。このまま上がり続けると予想すれば「買い」だし、いったん下がると予想すれば「売り」をする。どこででも説明されてる通り。
9/3 20:30ごろのチャート(ボリンジャーバンド付き1時間足)
で、こっちの画面にオーバーレイさせて表示しているのが「指標」
指標は、いま「為替価格の動きがどういう状態にあるか」を表すための表現で、たくさん種類がある。
ここに出している赤と紫の計4本の線はボリンジャーバンドというかなり有名な指標。過去の一定期間内の為替価格が正規分布に従っているとした場合の2σ3σの位置を出している。数学をご存知の方はわかると思うが、3σ内に分布する確率は99.73%なので、一番外側の線を越える確率は0.27%しかないってこと。
統計的に言えば、この線を超えることはほぼあり得ないので、ここに近づいたら「逆方向に反転する」という予想に使われる*4。この絵で見ても、ほとんどの価格が2σ(赤線)の中に収まっており、「赤い線に触れたら逆に動く」状態になっているのが見て取れるだろう。
ちなみに真ん中の白い線は移動平均線といって、価格のギザギザを滑らかにして傾向をつかみやすくする、これも死ぬほど有名な指標。
自動取引
で、自動取引のプログラムは、為替価格の条件だけで書いたり、為替価格と指標の組み合わせで書いたりする。
為替価格だけで書く例は、「1分間に10銭以上上がったら(急激な「上げ」の最中と判断して)買い注文をする」とか「その日の最高値を更新したら、(上げ基調だと見なして)買い注文を入れる」とか。
指標と組み合わせる例は、「為替価格がボリンジャーバンドの3σに触れたら(戻りを期待して)売り注文を出す」とか。
それぞれのアルゴリズムで、「今の為替価格」とか「1分前の価格」とか「ボリンジャーバンドの3σの数値」とかが必要である。それはMT4が提供する関数で取得する。
基本文法含めた使う言語(MQL)のリファレンスはこんな感じ。
主に見るのは18(指標値取得),19(価格取得),20(取引実施)くらいかな。例えば、超伝統的でオーソドックスな売り/買いのアルゴリズムである「ゴールデンクロスで買い・デッドクロスで売り」を実現するコードは以下の通り。
//--- get Moving Average
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
if(Open[1]>ma && Close[1]<ma){
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
//--- buy conditions
if(Open[1]<ma && Close[1]>ma) {
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
return;
}
C言語ぽいですね。プログラマーなら何となく理解できるでしょう。
iMAって関数が、移動平均線の値を取得する関数で、OpenとCloseが価格をとる関数。OrderSendという関数が売りまたは買いを指示する関数。if文で移動平均線と現在価格の位置関係を調べて、クロスしていたら売りまたは買いを出すというコードです*5。
実際、関数で価格や指標値を取得して、ifで分岐して買うだの売るだの決済するだのするだけだから、プログラムとしてはすごく単純なものになる。 サンプルで提供されているこのEAのコードは146行だ。
ちなみに、ロジックは値動きがあるたびにコード内のOnTickという関数が呼び出されて評価される*6。
で、この自動売買のアルゴリズムを記述してコンパイルしたものが、EA(Expert Advisor)と呼ばれる自動売買のプログラムになる。
また、既存の指標以外にもオリジナルな指標(単純なやつだと「上げ」や「下げ」の連続数を表示するとか)を自作して表示することができて、これをインジケーターという。
自作のインジケーターが算出した値もEAから利用できるので、「オレオレ基準線と移動平均線がクロスしたら買い」的なロジックも書ける。
さらに、MT4はdll中の関数を呼べる機能もあるので、ぶっちゃけ好きな言語でアルゴリズムを書いて注文だけMT4でやるってこともできるみたい。Rを呼んだりもできるみたいね。その辺はググれ。
そこまで複雑なアルゴリズムを書く必然性があるかはわかりませんが、この環境はデバッグが貧弱*7なのでそのあたりを使い慣れた環境でできたほうがいいのかもしれません。
バックテスト
で、つくったEAが本当にもうけられるかどうかが気になるところであろう。
これに対して、バックテストという機能がある。
過去の実際の為替価格データを食わせて、そのEAでどれだけもうかるかを確かめる機能。2007年に100万の元手で作成したEAを動かしたとしたら、その100万円はどうなるか?を一瞬で確かめる機能。
ちなみに、素人考えで作ったEAはバックテストで速攻すっからかんになることをあらかじめ忠告しておくw
開発プロセス
基本的にはチャートにいろんな指標を表示させて「この売り買いロジック良さげじゃね?」的なアイデアを思いつくのが始まり。
コードを書いて、バックテストして、儲かるかどうか確かめる、というサイクルになる。
うまい感じにバックテストで好成績を収めるEAができたら、デモ口座で動かしてみて調子を確認し*8、本番証券会社に口座を開いて実運用することになる。
いいアルゴリズムのEAが書ければ、あとは全自動なので、働いてる間も寝ている間もせっせと動いてAdsenseなんて目じゃない額を稼いでくれるだろう(念のためいっておきますが、Adsenseなんて目じゃない額を損してくれる可能性も当然あります)
システムトレードは誰にオススメか
どうでしょう?テンション上がりました?
これが誰にオススメできるかですが、実口座をつくらなければ金は一円もかからないから、とりあえずゲーム感覚でブログラムの練習には使えるかもしれないですね。
ネタには困りません。世の中にはさまざまな買いサイン/売りサインや、根拠のないオレオレ儲け話(火曜日雨なら9時に上げて始まる率が70%を超えるとか)も腐るほどあって、MT4ならすぐコードを書いてそれが正しいかを検証できます。コーダーとしての練習になるのではないかな?
統計学を学んでる学生とかもよさげ。論文で聞きかじった理論をちょっと応用してオリジナルなEAをつくってみるとか。いままでにない「稼げる」EAが生まれるかもよ?
パターンマッチングとかとも相性がよさそう。結局のところ、古来より伝わる買いサイン/売りサイン「だけ」ではうまくいかないのは、人間の脳が何らかの判断や補いをしているからだと言われている。そのパターンをうまく自動売買に反映できれば面白いと思う。その意味だと、人工知能系もよさげだねえ。
そして、マネタイズを目指すスーパープログラマ様なら、これら全てを考慮した、今までにない斬新な発想によるアルゴリズムを作り出せて当然ですよねー^^
ちなみに、わたしはやろうとしてたEAのアイデアがことごとくダメダメだったので、バックテストで死にまくって実口座を作るところまでいきませんでしたw UXエンジニアにもスーパープログラマにもなれないコーモリにマネタイズなんて無理やったんやー><
あとがき
そうそう、大事なことを言い忘れてました。このブログ記事を読んで、FXを始めるなどして発生したいかなる損害も、本ブログ主であるわたくしは責任を負わないものとします。
なお、逆にいかなる利益が発生してもお礼や感謝などは不要です。ただですね。。。。もしそういうことがありましたらそのEAのソースをですね、ちょろっとだけ横流ししていただければよいかなと思います。いえ、お手間はとらせませんので。運用資金等はこちらで勝手に用意しますので、ほんのちょっとだけソースだけ送っていただければ、はい^^
よろしくご検討のほどをお願いいたします。かしこ
*1:実は1年ぶりくらいに動かしたのですが、結構変わってますね。。。。
*2:余談だけど最近のFXアプリとかはかなりヤバい。赤いボタンと青いボタンがあって、どっちに動くか予想してボタンを押す。しばらくしたら逆のボタンを押す、という幼稚園児のおもちゃみたいな操作で何千円とかが数分で動いたりする。ヤバい
*3:ギャンブルでいう胴元が必ず儲かるハメコミ、みたいなのではない
*4:さらっと書いたけど、どうなの?例えば統計屋の人とかどう思うのこれ。なんで為替の価格が正規分布なんだよ、とか思う?それとも、正規分布ならxxと組み合わせればもっと精度をあげれるな、とか思う?ちなみに、ボリンジャーバンドは正真正銘世界でかなりの人が使ってる超有名指標です。「何でこんなん使ってるんだよww」と思えたなら、あなたはいいオリジナルインジケーターを作れると思う
*5:Open,Closeは足とローソクの関係を理解しないといけないので、ちょっとわかりづらいかも。ググれ
*6:昔はstart()って名前だったような??
*7:ブレークポイントでステップ実行とかができない
*8:デモ口座での運用は重要。バックテストで好調なのにデモ口座では不調というパターンが起こりえる。MT4サーバーの調子によりティック(値動きの通知)が抜けることがあるから