基本的な開発手順

開発手順を概論します。
開発のステップは、大きく分けて2つです。(1)売買のルール(システム)を決める→(2)全自動のプログラムを作る、です。(1)が難しく、(2)は思うよりも容易です。

(1)売買のルール(システム)を決める

全自動システムを作るにしても、このステップが最も時間と労力を要するところです。ルールを作る方法はたくさんあります。すでに売買経験の長い方であれば、すでに儲かるルールを構築されているかもしれません。それ以外の場合は、自分で作るしかありません。いくつか下に記すようなことは、トレードシステムの開発を始める前に理解しておく価値があります。

○公開されているルールは、そのほとんどが役に立たない。

まずは、これが圧倒的に大事です。どこかで誰かが公開しているルールをそのまま使うことはまずありません。たいていは役に立たないルールですし、使うにしても自分で検証してから使用します。僕の経験から言うと、公開されているルールをたくさん検証してみましたが、実際に利益が出るものはありません。驚くような成績が公開されている場合が多いですが、以下のようなことを考慮に入れていません。その結果、多くは、実際には利益が出ないルールになっています。

(1) 手数料・・・1回で資金比0.2%の利益が上がるスキャルピングシステム、など
(2) スリッページ・・・日経先物をザラ場中に成行でトレードし、トレード1回で10円の値幅が取れる、など
(3) 無理な価格での取引・・・ストップ高でいつでも買える、ストップ安でも売れる、引けで必ず取引できる、などと設定した上での検討
(4) 無理なポジションの大きさ・・・1日300万円しか出来高のない銘柄で、500万円のトレードをする
(5) 分析したデータの期間・・・上げ相場の期間でブレークアウトのシステムを検証する、など
(6) 検討した銘柄・・・現在存在している銘柄の一覧で、長期間ホールドのシステムを検討する、など(倒産した銘柄を検討していない)
(7) 並行するトレード間の資金分配・・・10個トレードが並行したら、その日は10倍の資金でトレードする、などといった非現実的な仮定
(8) 特定のイベント時にだけ大きな利益が上がっている・・・ライブドアショックのときに全銘柄売る、など

これらの問題の影響は想像できないほどに大きいものです。経験的に、この8つのうちどれか1つを無視するだけでも、検証の結果は大きく変化します。特に、(1)〜(5)に関しては、十分な検討がされているか、常に注意を払うべきです。

世の中に公開されているシステムで、この例によく当てはまるものとして、「3点チャージ」があげられます。シグナルが出る日にはものすごい数が出て、出ないときには全然出ない。各々のトレードに同じだけ資金を投入すれば数字どおりの成績が出ますが、平行するトレードに均等に資金を分配すると、検証結果がゼロかマイナスになります。非常に興味深いシステムです。

○テクニカルがシステムにどう作用するかは、想像できない。

昔の人は、株価は、大きく下げたらまた上げる、ということを考え、大きく下げたことの指標として、移動平均乖離率を考え出しました。でも、この指標が、逆張りのシステムを作るときにだけ役に立つ、というのは間違った仮定です。テクニカルは、何か意味がある数字をはじき出しては来るのですが、それが現在の相場でどう役に立つかはわかりません。順張りのシステムに、移動平均乖離率が役立つこともあります。移動平均乖離率が−30%になったら売り、というシステムも成立しうる、ということです。出来高移動平均が下向きトレンドのときに買うシステムが、利益を生むかもしれません。

○用途に合ったデータ分析ツールを選ぶ。

データの分析には、既成のツールを使用するか、自分でプログラミングして作成します(自動売買システム本体よりも、高度なプログラミング技術が要求されます)。少数のデータを分析するだけなら、Excelなどの表計算ツールでもできないことはありません。 一から自分でツールを作って、データのスクリーニングから始めることは、非常に大きな労力を要します。どういったシステムが機能するのかという、大雑把なスクリーニングには、既成のツールを使うことが勧められます。TriStrategyは、最初のスクリーニングに用いるツールとして強力です。

○自分で、新たな指標を作ろうとしない。

経験論にすぎませんが、 多大な、無駄な努力をしてしまう可能性が高いです。テクニカルに意味がある理由の一つとして、みんなが同じテクニカルを見ているから、テクニカルに関係のある動きが生じる、ということがあります。同じように考えると、テクニカルのパラメータ(移動平均の日数など)も、あまり独自のものを用いないほうがよいと思われます。

上記のようなことを理解したうえで、一般的なテクニカルを組み合わせることが、トレードシステム作成の第一歩です。(1)トレードの利益の平均がプラスになるシステムを見つけ、(2)それぞれのトレードにどれだけの資金を注ぐかという資金管理を決めます。

(1)トレードの利益の平均がプラスになるシステムを見つける

いくつかのテクニカルを組み合わせ、その条件でトレードしたときの結果を見る、という作業の繰り返しです。自分が受け入れることができる程度のリスクで、望むだけの利益が得られるシステムが見つかるまで、作業を続けます。テクニカルの組み合わせ方には、いろいろな考え方があります。

○ 運がよければ、偶然の組み合わせで大きな利益があがるものを見つけることができます。
○ 他の人が公開しているシステムを改変して、よい利益が得られるシステムを見つけることもできます。
○ FXのシステムや、先物のシステムを株式に応用し、システムを作成することができるかもしれません。
○ 語学力があるのであれば、外国ではよく用いられているシステムを流用することもできます。

いろいろな方法が考えられると思います。オリジナリティが求められるところです。スクリーニングには、TriStrategyをお勧めしておきます。

(2) それぞれのトレードにどれだけの資金を注ぐか決める

これは、大きな労力を必要とするわけではありませんが、非常に大事なステップです。上述したように、この資金管理計画を変えるだけで、利益がまったく上がらなくなるシステムが存在します。Excelなどを用いて、各々のトレードにいくら注ぐと破産するか、それを見極めることです。厳しい仮定を置いても、破産する確率がほぼ0になるように、投入可能な資金の最大額を決めます。

大事なことは、この資金計画を決めるときに、既存の指標に惑わされないことです。例えば、最大ドローダウンという指標があります。検証期間中で、もっともマイナスがかさんだときの、マイナス額のことです。この分だけ資金が減っても、資金の半分が残るようにしよう、などと考えるのは間違いです。最大ドローダウンは、検証期間の中での最大のドローダウンに過ぎず、これから先、それより大きいドローダウンが来る可能性はいくらでもあります。あなたのシステムがどれだけの負けを生む可能性があるか、検証期間内の結果だけにこだわらず、いろいろなことを考えて考察することです。そのほうが、安全なシステムを作成できる可能性が高くなります。

いろいろ、これから起こるかもしれないことを想定しておくべきです。そのときになって動転しないように、いろいろなことを考えておくべきです。

(2)全自動のプログラムを作る

簡単なプログラミングの知識が要求されます。もともとプログラミングができる方であれば、必要なデータの収集と注文の2つのことをクリアするだけでプログラムが完成します。プログラムから注文が簡単にできる証券会社はたくさん存在しますし、データは一般的なプログラマーであれば簡単に収集できます。新しくプログラミング言語を学習するのであれば、VisualBasicをお勧めします。自分で作ることが難しければ、こちらで全自動システムを作成することも行っています。

最近新たに生じた手段として、マネックス証券でプログラムトレードが可能になっています。ただ、マネックス証券は、手数料が非常に高いのがネックです。

○データ取得

たいていの場合、簡単に実現できる。例えば、Yahoo!ファイナンスなどの時系列データを順番にダウンロードするプログラムを書けばよい。Webページを取得するプログラムは、できあいのものがいくらでもあるし、APIが充実している。楽天証券が提供するRSS(Realtime Spread Sheet)に、DDEで接続する方法もある。RSSをExcel上で利用するのは手軽だが、その後の開発にExcel VBAを用いる必要があり、難しい。

○注文

クリック証券を用いれば、APIという、発注用のコードが用意されている。各証券会社を用いる場合は、Webブラウザを操作する要領で行う。Visual C++を用いているならば、DHTMLDialogを用いれば容易。VBAを用いてExcelから注文するプログラムは、オンラインで探せば見つかる。

○売買判断

売買の条件がもう決まっているならば、実装はとても簡単であり、問題にならない。前日終値から3%下がればエントリー、といった単純なものなら、Excel上でも実現可能。

技術的に、いくつかのTipsはありますが、全自動プログラムを作ることに、それほど大きな障壁はありません。
自分で作ることが難しければ、こちらで全自動システムを作成することも行っています。