はじめにどうにかして株で儲けたい。そのためにはシステムトレードが有効らしい。しかし、プログラミングが壁になって二の足を踏んでしまう。
そういうトレーダーは多いだろう。
そういう人達のために本書は書かれた。自分の手を動かし、トレードアイデアをプログラムで表現する喜びを味わうのが本書の目的だ。
世の中には、プログラミングを学んだけれども何を作ったらいいか分からない、という人もいる。それに対して、我々の作りたいものははっきりしている。トレーディングシステム検証プログラムだ。このように明確な動機づけがあることは、プログラミングを学ぶ上で大きな利点になる。
トレードで勝つためには、判断するときに極力感情を排除することが重要だ。そのために、明確なルールに従って機械的に売買する、システムトレードと呼ばれる方法が存在する。その準備としてコンピューターを使って売買ルールの有効性・収益性を検証するわけだが、それが完全に感情を排した作業かといえば、そうでもない。かなりの力仕事で、無味乾燥な単純作業も多いが、その推進力となるのはやはり感情だ。
儲けたいという情念が指先からほとばしり、キーボードを通じてコンピューターへと伝わっていく。それが筆者のプログラミングスタイ
ルだ。トレードで負けた日の、プログラミングの進むこと！「感情」や「敗北」をこうして有効利用できる。素晴らしい世界だ。
こういう感じになるのは、もしかしたら Ruby という表現力豊かなプログラミング言語を使っているからかも知れない。ややこしいお膳立てをあまりすることなく、わりとストレートにやりたいことを書ける。そんな Ruby に出合わなかったら、筆者は今ごろシステムト
7『rubyではじめるシステムトレード』 (c)Takuma Sakamoto

はじめにレードをやっていなかっただろう。
多くの人をこの素晴らしい世界にお誘いしたくて、「プログラミン何か作業すれば、何かしら進む。それがたとえ失敗に終わっても、グ言語 Ruby を学びながらトレーディングシステム検証ソフトを作「これじゃダメなんだ」という知見が得られる。これが、システムトる」という主題の元、本書を執筆した次第である。

レードとプログラミングに共通した良さだ。筆者の見立てでは、システムトレードに向いている人はプログラミングにも向いている。

なぜ自作かもちろんいいことばかりではない。自作の主なデメリットは、システムトレードを支援するソフトもいろいろ出てきているのに、●プログラミングを学ばなければならないなぜ検証ソフトを自作するのか。

●時間がかかる

メリットはいろいろある。初期投資が抑えられるというのもそのひとつだが、それは大した問題ではない。
例えば、これらは、ちゃんと利益が出るようになれば実に些細なことだ。しかしそうなる前にこういった理由で挫折してしまう人が多いのもまた事実だ。

●売買ルールに関して細かい制御ができる

そこで Ruby が登場する。

●新しい指標を追加するのも思いのまま●結果の統計数値も、自分の必要なものが追加できる

なぜ Ruby か●プログラミング自体が面白い。熱中できる

本書では、Ruby というプログラミング言語を使ってトレーディンといったことがある。もちろん、これらが可能になるためにはある程グシステム検証ソフトを作っていく。

度の技術は必要だ。

「Ruby とは」というようなことはもはや言いつくされており、こプログラミングが楽しいかどうかは人それぞれではある。少なくとこで長々と説明することはしない。ごくかいつまんで言えば、まつもも筆者にとってはプログラミングが楽しいからこそシステムトレードとゆきひろ氏という日本人が開発し、Ruby on Rails というアプリケーをやっているという部分はある。

ションの登場によって世界に爆発的に広まったオブジェクト指向プロ

また、システムトレードとプログラミングには似た部分がある。

グラミング言語、だ。
特長を３つ挙げるとするならば、●論理的に考える●少しずつ進んでいく●純粋なオブジェクト指向●知識の積み重ねができる●簡潔な文法8『rubyではじめるシステムトレード』 (c)Takuma Sakamoto

9

はじめに

●スクリプト言語

しい問題だ。
結局、筆者は書きやすさを選んだ。筆者の技術では、ほかの言語をといったところか。

選んだならば儲けるところまでいく前にプログラムが破綻するんじゃ「オブジェクト指向」とか「スクリプト言語」がなんなのかはおいないかと思ったからだ。過去の経験も踏まえての判断だ。結果として、おい説明する。何しろ一番に言いたいのは、Ruby は、この選択は成功した。
だからといって、Ruby が初心者向けのちゃちい言語というわけで「読みやすくて書きやすい」は全然ない。機能はものすごく豊富で、ライブラリまで含めれば広大な世界だ。もちろんいきなり全部覚える必要はないが、使いこなせるということだ。
もちろんこれは主観的な問題で、書き方によっても大きく違ってくる。
ただ、いろんなお膳立てをあまりすることなくやりたいことをパッ

範囲を少しずつ広げていくことで、気がついたらびっくりするほど作業が効率化している、ということがよくある。
もうひとつ、Ruby のありがたい点を挙げると、と書けるというところは、これからプログラミングをはじめようという人にとってもいい感じなんじゃないだろうか。

●無料で使える個人のシステムトレーダーは孤独なものだ。一人でなんでもしなくということがある。無料で使えるプログラミング言語はほかにもたくちゃならない。検証も、発注も、専業トレーダーでない人は仕事もやさんあり、Ruby だけの特長ではないが、なんにせよありがたいことらなくちゃいけない。そんな忙しいなか、プロの開発者でもない人がだ。「タダで使えるものを金儲けに使っちゃっていいのか？」と、多自分でプログラミングし、そのプログラムを何年にもわたってメンテ少の罪悪感を抱かないでもないが、もちろんいい、いいに決まっている。

ナンスするためには、読みやすく書きやすいということは、一番大事なんじゃないかと筆者は考える。そういう目的のために、Ruby はベストの選択のひとつだと思う。
ただし、完璧な言語というものはない。もちろん Ruby にも弱点はある。その中でも最大のものは、「Ruby は遅い」ということだ。

……Ruby の宣伝をするのが本書の目的ではなかった。すでに得意なプログラミング言語がある方はそれを使えばいい。これからプログラミングをはじめようという方には、筆者なら Ruby をお勧めしたい、という話だ。

Ruby で書いたプログラムは、ほかのもっと速い言語のプログラムよりもだいぶ遅い。最近のバージョンはかなり速くなったとはいえ、そ本書でやること、やらないことれでもやっぱりほかに比べれば遅いだろう。
これは、たくさんの計算が必要なトレーディングシステムの検証に

本書では、実際にトレーディングシステム検証プログラムを作りなは痛い。書きやすさを選ぶか、実行速度を選ぶか。これはなかなか難がらプログラミングを学んでいく。プログラミングの経験のない方に10『rubyではじめるシステムトレード』 (c)Takuma Sakamoto11はじめにも読んでいただけることを目指しているが、それと同時に、本当に「使力するのが基本パターンになる。それが本書のプログラムのスタイルえる」プログラムを目指してもいる。これを両立するために、ある程だ。

度機能を絞り込んで、ややこしいところを詳しく解説するという形をとることにする。

それに対して GUI というのは普通の Windows プログラムのようにメニューがあり、ボタンなどがあって、マウスでぽちぽちやって動かすソフトだ。

◎やること

Ruby の基本は CUI だ。GUI やブラウザで表示する Web プログラ

● CUI

ミングもできるが、もともとは CUI だ。別途ライブラリをインストー●株価データのダウンロードルすることなく標準ライブラリの範囲でできることをする、という方●日本株での売買ルール検証

針のもと、本書では CUI スタイルをとることにした。

● 1 銘柄ごと、1 売買単位でのシミュレーションチャートを表示したりという華々しい機能はないが、システムト●寄り付き、ザラ場、大引けでの仕掛け、手仕舞い

レードの検証ではそれで十分と考えている。もし結果の折れ線グラフ●売買ルールの部品化、着脱などを表示したければ、Excel などほかのソフトを使ってできる。

●「移動平均乖離率システム」と「ブレイクアウトシステム」のプログラム化

また、単純化のため、シミュレーションは１銘柄ごと、１売買単位で行うこととし、資産総額や相場のボラティリティなどによって建玉を変えるマネーマネジメントルールは取り入れない。ポートフォリオ◎やらないことを組んで資産の増減を検証するのではなく、１銘柄ごとに別々に検証

× GUIしていく。また売買手数料も、１日定額制などややこしいものもある

×日本株以外（FX、先物など）での検証ことだし、思い切って考慮しないことにした。信用取引の諸経費など

×マネーマネジメントも省略した。

×ポートフォリオの運用シミュレーション

検証の対象は株とする。銘柄が多くてかなり大変だが、コンピュー×日々の仕込みターパワーを存分に活用できる分野でもある。株で検証できるように×発注なれば、FX や先物に移行するのは簡単なはずだ。

×システムトレーディングについての解説
×シミュレーション結果の評価
×勝てる売買ルールの提供

日々のシグナル出しや発注機能は備えていない。筆者自身は、そういうものは証券会社の売買ツールを使って行っている。
ザラ場での仕掛けや手仕舞いは本書の自慢だ。寄り付きや大引けの売買のみで検証する人も多いようだが、ザラ場での取引を可能にする

CUI というのは、文字によってコンピューターと入出力のやりとりをすることだ。Windows 付属のコマンドプロンプトから命令を入12『rubyではじめるシステムトレード』 (c)Takuma Sakamoto

ことでやれることが広がる。ただ、そのぶんプログラムが多少ややこしくなる。
13

はじめに売買ルールの部品化こそが、本書の核となるところだ。ルールの組み替えが容易で、検証作業がグンと楽になる。設定ファイルをちょっと書き換えるだけでルールを「着脱」できることを目指す。

ンアップのときには注意が必要だ。
執筆時点での最新版は、Ruby 2.1.1 だ。内部事情をぶちまければ、ずっと 1.9 系で本書のプログラムを開発していたのだが、原稿の完成

なお、本書では株やシステムトレードについての解説はしない。こが延びに延びている間に Ruby がどんどんバージョンアップしていれらについては読者がある程度知っているものと仮定し、ここまでがき、ついに 2.0 がリリースされてしまった。これは大きなバージョン

すでにそうであったように、投資用語の解説なども特にしない。疑問アップだ。最新版で動かなかったらどうしようかと思ったが、幸いな点はご自分でお調べいただきたい。拙著『パチンコトレーダー』（パことに手直しなしで動かすことができた。Ruby 2.0 の互換性に救わンローリング）にはひととおり用語解説が掲載されている。

れた。その後リリースされた 2.1 でも同様に動いた。よって、本書の本書では「移動平均乖離率」と「ブレイクアウト」のふたつの売買システムをプログラムにする。これらの用語が何を意味するか、くらいはやはりあらかじめ知っておいていただきたい。
構成は、大きな流れとして乖離率システムを作ることを本線とし、最終章で総復習としてブレイクアウトシステムを作る、という形になる。

プログラムは Ruby 2.0 や 2.1 でも動かすことができる。
ただし、2.0 以降の新機能は使っていない。エラーの際の出力なども 1.9 のものを掲載している。従って、本書の正式な対応バージョンは Ruby 1.9 とする。1.9 系の中でも、執筆時点での最新版である 1.9.3を使う。
以前からの Ruby ユーザーの中には、いまだに 1.8 系を使っている

ただし、これらのシステムが利益を生むことを保証するものではな人もいるかも知れない。しかし残念ながら、本書のプログラムは 1.8

い。本書に出てくるルールはあくまでプログラミング学習のための例

では動かない。Ruby1.8 と 1.9 の間にはかなりの差があり、互換性をであって、検証上も実践上も収支がプラスになることは意図していな保つのが難しいからだ。

い。勝てるシステムは、ぜひともトレーダーである読者自身が発見していただきたい。

1.8 系に比べて、1.9 系はだいぶ速い。ものにもよるが、筆者が以前に書いたコードで調べた限りでは 1.8 の 2 ～ 3 倍程度までスピードアップするものもあった。十分乗り換える価値はある。

Ruby のバージョン

1.9 では機能も大幅にアップされており、よりエレガントなコードを書くことができるようになった。コーディングを 1.9 スタイルにし本書で使用する Ruby のバージョンは、1.9.3 だ。

たことが、1.8 では動作しない一因になっている。

その前に、Ruby というのは「プログラムを動かすためのプログラ1.8 から 1.9 への乗り換えはなかなか頭の痛い問題で、筆者も 1.8 時ム」であって、Ruby 自体が日々改良を加えられ、バージョンアップ代に作ったシミュレーションソフトを、本書執筆にあたって 1.9 対応を繰り返している、ということを知っておいていただきたい。同じにしようと試みたのだが難航し、ほぼ全面的に書き直すことになった。

Ruby 言語で書かれたプログラムでも、それを動かすための Ruby 自

しかしその結果、前よりいいものができたので苦労は報われた。

体のバージョンが違えば、動作しないこともある。特に大きなバージョ14『rubyではじめるシステムトレード』 (c)Takuma Sakamoto15はじめに開発環境いただきたい。
ふだん日本語のローマ字入力しかしない方は最初は手がつりそうに

まず OS に関してだが、本書は Windows 環境を前提にしている。
本書用のプログラムは、WindowsXP 上で書かれたものである。
Ruby のプログラムは、テキストエディタがあれば書ける。テキストエディタというのは、簡単に言えばパソコンで文字を書くためのソフトだ。Windows についているメモ帳もテキストエディタだ。

なるかもしれない。しかしその苦しみを乗り越えた先には、黄金が待っている。保証はできないが、待っていると信じてやり抜いていただきたい。
もちろんただ入力するだけでなく、１行１行内容を理解していただ
きたい。筆者自身もたくさん経験したが、プログラミングには随所にただし、メモ帳でプログラムを書くのはちょっと心もとない。せめ「壁」がある。しかし、モチベーションさえ保てれば必ず突破できる。てプログラムが見やすくなるよう文字の色分けをしてくれるようなも幸い、われわれには「金持ちになる」という素晴らしい動機がある。のを使いたい。とはいえ、どうしてもキツいときには疑問を残しつつ先に進んでも秀 丸 エ デ ィ タ と い う の が 有 名 だ。 筆 者 が よ く 使 っ て い る の はよいだろう。こっちの部品がないとあっちが作れない、というようなEmEditor というやつだ。これらは有料だが、無料のソフトでもいい作業の都合を優先したため、必ずしも「やさしい順」にプログラムがものはたくさんある。自分が使いやすいものを探そう。

掲載されてはいない。前に分からなかったことが、あとになって分か筆者が実際にプログラムを書くのに使っているのは、Linux の世界ることもあるだろう。最終的な目標は、読者自身が、試したいテクニの超有名エディタ Emacs の Windows 版である Meadow だ。これはカル指標や売買ルールをプログラム化できることだ。それさえ見失わ機能がとんでもなく強力ではあるが、手になじむのに時間がかかるたなければよい。

め、誰にでもお勧めするというわけにはいかない。

本書だけで Ruby のすべてをカバーできるわけではない。参考文献

また、Ruby のプログラムを動かすには Windows 付属のコマンドに掲げるような書籍は、本書を読む途中はもちろん、のちのちまでもプロンプトを使う。Ruby をインストールすると、コマンドプロンプ役に立つものなので、どれかはお手元に置いておかれることを強くおトを Ruby 実行用に設定した Ruby コマンドプロンプトというものが勧めする。

一緒にインストールされる。本書ではそれを使うことにする。これについてはのちほど詳しく説明する。

書いたプログラムが動くかどうか確かめるには、動かしてみるしかない。書いては動かすことを繰り返すことで学習が深まっていく。学
習だけでなく、一般にソフトウエア開発はそうやって行われている。

本書の読み方プログラミングは脳内だけで学ぶことはできない。手を動かして実書いて、動かし、修正する。この繰り返しだ。
それでは、宝の山を目指して、大いなる一歩を踏み出そう！！

際に書いてみる以上の上達法はない。本書に掲載されているプログラ
ムは、できればすべて読者自身の手でエディタを使って入力してみて
16『rubyではじめるシステムトレード』 (c)Takuma Sakamoto

17