225先物×Excelシステムの開発から運用までの手順について解説しています。
システム開発・運用環境を整備する
インターネット環境については既に整備されているという前提で話を進めていきます。
パソコン等ハードウエアを整備する
分足使用ザラ場システム(自動売買ロボット要)の場合
作業用として1台、ロボット稼働用として最低1台、最低計2台必要です。
PCの性能ですが、ロボット稼働用PCの場合はあまりこだわる必要はありません。
メモリも8GBあれば十分です。
ただし、
作業用に関しては作業効率に関わってきますのでできるだけ高性能なものにしておいた方がベターです。
まず、
メモリですが、分足を扱うとなるとデータ量が膨大になりますので最低8GB、できれば16GB以上。
モニターのサイズは、
作業用の方はEXCELでの細かい作業が多いので大きい方がベターです。
日足使用寄引システム等(自動売買ロボットでの運用不要)の場合
分足システムに比べて扱うデータ量はかなり少ないので通常のスペックのPC1台で事足ります。
バックアップ用外付け媒体
せっかく開発したシステムや収集した貴重なデータを消失しないためにもバックアップ用の外付け媒体は必須です。
ロボット専用PCを用意するのであれば、ロボット専用PCのHDDはほとんど使用しませんから、バックアップ用の外付け媒体の代わりとしも使用できます。
EXCEL等のソフトを装備する
EXCELがパソコンに組み込まれていない場合は別途購入要です。
ただし、自動売買ロボットを必要としない寄引システム等であれば無料の表計算ソフトや廉価のEXCEL互換ソフトでもOKです。
投資全般やシストレ等の概要知識をネット情報や書籍で把握する
ネットからでも情報は得られますが、基本書的なものは購入して一読しアウトラインを把握しておいた方がよろしいかと思います。
この段階ではあくまでも概要把握で十分です。
細かいところは実際のフェーズに突入した時に調べながら進めていくしかありません。
概要を把握しておきたい知識としては売買モデルを構築する際に必要な
・チャート
・ローソク足パターン
・テクニカル指標
・EXCEL 関数およびマクロ
自動売買を行うのであればプラス
・EXCEL VBA
・HTML(証券会社注文画面スクレーピングのための画面分析に必要)
・スクレーピング(IE操作等)技術(証券会社注文画面のデータ取得、発注に必要)
・楽天RSS、マーケットスピード2RSS、岡三RSS、kabuステーションAPI
等があります。
証券口座を開設する
口座開設には少々時間を要しますから早めに申請して開設しておきましょう。
売買モデルを立案するためにはチャートでのターゲットの値動き分析が不可欠な作業となります。
チャートは証券会社ごとにスペックや使用法がかなり異なります。
早めに開設してチャートの使い方に慣れておきたいところです。
ターゲットを選択する
本サイトでは日経225先物(もしくはTOPIX先物)を前提として話を進めていますが、下記の条件にある程度該当する商品であればターゲットとして問題はありません。
・流動性が大きい
・ボラティリティが大きい
・レバレッジが効く
・過去データを取得しやすい
・資金量が少なくても取引が可能
etc.
ツールを選択する
本サイトではExcelが前提です。
証券会社によっては簡易言語ツールを用意しているところもありますのでそのようなツールを使用するという手もあります。
ただし、突然、使用中止となったりすることもありますのであまりお薦めできませんが。
FX取引でメタトレーダーに慣れている方でしたら、OANDA証券の225先物のCFDはメタトレーダーで取引可能です。
プログラミングが得意な方であれば、pythonのような言語でシステムを1から作り上げるということも有りかと思います。
ただし、きっちり動かすだけでかなりの労力と時間を要しそうです。
やはりお薦めはExcelです。
サイン発生に関しては、
プログラムを組むより表計算を使用した方が分かりやすく簡単ですし、結構細かい条件等も具現化できます。
リアルデータ収集はRSSをアドインすれば可能。
証券会社への発注部分に関してはVBAによるIE操作もしくは最近はRSSでも発注可能となってきましたので以前よりだいぶ自動売買ロボを作りやすい環境になってきています。
システムタイプおよび使用足を決定する
さて、ある程度環境が整ったところでいよいよシステム作りのフェーズに入っていきます。
どのようなシステムを構築していくのか?
ご参考までにシステムタイプをいくつか挙げておきます。
どのタイミングで売買がためされるかという点に着目し下記の2つのカテゴリーに分けてみていきます。
・寄りもしくは引けに売買するタイプ
・ザラ場(取引時間中)に売買するタイプ
(注①)週足より長い足を使用するシステムは除外します。
(注②)夜間(ナイト)セッションは取引日としては翌営業日ですが、本サイトでは日中と同営業日として扱い夜間の引けまでに決済するトレードをデイトレードと位置づけています。
寄りもしくは引けに売買するタイプ
このカテゴリーの大きなメリットは、
原則、自動売買ロボットが不要ですのでザラ場システムに比べると開発負担が小さいという点です。
シストレ初心者が最初に取り組むのに適しています。
デメリットとしては取引時間中の価格変動をシグナル発信に使えないという点です。
代表的なシステムタイプとしては、
寄引トレード
対象セッションの寄りで新規建てし引け(ザラ場中に損切等で決済されることも有り)で決済するタイプです。
使用する足は通常は日足ですが時間足でもOKです。
派生タイプとして日中+夜間もしく夜間+日中という隣接する2セッションをターゲットする次のようなシステムも考えられます。
・寄引:寄りで新規建てし次のセッションの引けで決済
・引寄:引けで新規建てし次のセッションの寄りで決済(セッション間のギャップがターゲット)
・寄寄:寄りで新規建てし次のセッションの寄りで決済
・引引:引けで新規建てし次のセッションの引けで決済
スウィングもしくはポジショントレード
建玉を2日以上保持するタイプです。
使用足は通常は日足もしくは時間足です。
アビトラージトレード(裁定取引)
同じような性格を持つ2つの商品の値動きの法則性に着目し割安な方を買い、割高な方を売ることで収益を得ようとするトレードです。
買い建玉と売り建玉双方を保有しますので保有リスクをある程度軽減できることがこのトレードの大きなメリットです。
下記は日経225先物関連の具体例です。
・日経225先物とTOPIX先物間
・異なる限月間
ザラ場(取引時間中)に売買するタイプ
このタイプのシステムは取引時間中の価格変動を利益に結びつけることができるというメリットを有しています。
デメリットは自動売買ロボットが必須という点、ロボットの開発にはかなりの労力を要します。
サードパーティーのロボットを使用することも可能ですが、それなりのコストは覚悟しなければなりません。
使用する足の長さは5分から60分位が適当かと思います。
ザラ場(取引時間中)デイトレシステム
ザラ場中に売買サインが発生するシステムです。
ザラ場中に決済サインが発生しなかった場合は引けで強制決済します。
使用足は時間足です。
本サイトでは日中セッションの寄りから翌朝のナイトセッションの引けまでに完結するシステムをデイトレシステムとして扱っています。
ザラ場(取引時間中)スウィングもしくはポジショントレード
ザラ場中に売買サインが発生するシステムです。
逆のサインが発生するか、利確又は損切されるまで建玉を保有します。
ザラ場(取引時間中)アビトラージトレード(裁定取引)
時間足を使用したアビトラージトレードです。
過去(ヒストリカル)データを収集する
システムタイプと使用足が決定した段階でバックテスト用のヒストリカルデータを収集する作業に入ります。
以前は取得したデータの質が悪く結構歯抜けもありで、ネットでいろいろ調べて使えるレベルに持っていくのにかなりの時間を要しました。
最近は日足レベルであればいろいろなサイトから正確なデータを無料で取得できますし、分足についても以前と比較するとだいぶ収集しやすくなっています。
有料であれば取引所で取得できますが、かなり高価です。
取得する期間については最低数年分はそろえたいところです。
バックテスト期間が短かいと必ずと言っていいほどリアルトレードでやられます。
どのような局面でも対応できるシステムでなければ実戦で長く生き残れません。
ということで、
でき得るならばバックテストデータには相場の4つのステージ(低迷期、上昇期、天井期、下降期)が含まれていることが望まれます。
売買戦略を立案する
売買モデルを構築していくフェーズです。
過去のチャートを眺めて、上昇・下降・横ばい等の値動きとテクニカル指標との関連性を調査し仮説を立てていきます。
売買戦略をプログラミングする
TRADESTATIONのような自動売買ツールの場合は既に用意されている戦略を組み合わせるか、EASYLANGAGEのような簡易言語を使用してプログラミングをしていきます。
Excelの場合は立案した戦略をExcelシート上に関数を使用して具現化していきます。
その際、一番注意しなければならないことはデータの先読みです。
注意していても結構やってしまいがち。
バックテストで想定以上にパフォーマンスが良かった場合は疑ってみた方がいいかもしれません。
シート設計の際の注意点です。
市販されているExcelを使用したシストレ本では、
エントリー条件等の入力エリア、
パフォーマンス結果エリア、
明細エリアが
同一シート上に展開されている例が多いかと思います。
思いついた売買モデルがある程度使えるか否かを確認する段階では同一シート上で作業した方が利便性が良いかと思います。
しかし、使えそうだと判断できた後はエントリー条件等の入力エリアと集計した結果を展開する集計用シートは同一シート、明細用シートは別シートとして分けて管理しておいたほうが、バックテストの検証等後々の使い勝手が良くなります。
明細用シートを参照するようにして、
損益曲線用シート、ドローダウングラフ用シート、フラット期間集計用シート等も最初から作り込んでおけばパフォーマンスが視覚化されるのでバックテスト検証作業がスムーズに進みます。
(シート構成例)
・条件入力&集計用シート
・明細用シート
・年別損益用シート
・月別損益用シート
・損益曲線用シート
・ドローダウングラフ用シート
・フラット期間表用シート
・連勝連敗表用シート
etc.
バックテストを実施する
さて、売買モデルがExcelシート上に表現されました。
いよいよ過去データを使用してのバックテストです。
期待に胸が膨らみます。
そして、パラメーターとの格闘が始まります。
データの先読みをした事に気づかず圧倒的なパフォーマンスに自分を天才と思ったり、過ちに気づきやっぱり凡人と落胆したり。
悲喜こもごもの連続です。
想定したシステム評価基準に達するまでパラメータ最適化の作業を繰り返します。
一定のシステム評価基準の内容についての詳細は別項で記述しますが、非常に大事なポイントを一つ。
徹底してドローダウンの大きさとフラット期間の長さ・発生頻度を精査しておくべきです。
最初はどうしてもリターンの大きさ、勝率、PF等だけに目がいきがちです。
しかし実戦においてはドローダウンの大きさやフラット期間の長さ・発生頻度が継続運用の鍵を握っていると言っても過言ではありません。
いくらリターンが大きいシステムでも、
ドローダウンが許容範囲を超えフラット期間が長期化してしまうシステムでは本番での長期運用継続は望めません。
フラット期間が長期間に渡ってしまうと不安感に支配されシステムへの信頼度がどうしてもゆらいでしまいます。
その結果メンタルがやられ運用継続が困難になってしまいます。
バックテストのリターンがどんなに大きくても運用を継続できなければ何の意味もありません。
ドローダウンとフラット期間、システム評価時の重要ポイントです。
フォワードテストを実施する
過去データを使用したバックテストを繰り返し、結果に納得できた段階でフォワードテストに移行します。
フォーワードテストとはバックテストの段階では納得できるパフォーマンス以上と判断したシステムが果たして未知の値動きにも対応できるのか否かを検証する作業です。
この他にも実運用に突入した場合、運用上の支障等が発生しないかどうかをチェックするという役割もフォーワードテストは有していますが、この部分については本稿では後述「本番環境下テストを実施する」の項で扱っています。
前者に関しては一般的には次のような方法があると言われています。
仮に過去データが10年分手に入った場合、バックテストは例えば最初の7年分のデータだけで行います。
テストを繰り返した結果、納得できるパフォーマンスを得られた場合、そのシステムが残りの3年のデータにも通用するのか否かを確認します。
この手法、個人的にはあまり意義を感じていないので運営者はこのようなテストは行っていません。
通用した場合はいいとして、通用しなかった場合が問題で、該当システムを没にしてしまうのか、それとも、又、7年間のデータでテストを行い、再度、残りの3年のデータでテストをするのか、そのテストでもNGだった場合どうするのか?
そう考えると、
10年分でバックテストして10年分のデータに対応できるようパラメータ等を最適化した方が価値があると思っているからです。
資金管理シミレーションを実施する
単利運用であるならばバックテストまたはフォワードテストを経て、即、実戦に突入してもいいのかもしれません。
しかし、複利運用となると話は別です。
マネーマネジメントによって結果が大きく変わってしまいます。
最適な投資割合を決定するためにも実戦を想定した金額ベースの資金管理シミレーションが欠かせません。
ターゲットが日経225ミニの場合を想定して資金管理シミレーションについて簡単に説明していきます。
まず、次の金額を設定します。
・元金
・手数料(実戦で使用する口座の手数料)
・想定スリッページ
・投資枚数を算出する際の価格
いくらでもいいのですが、証拠金額を考慮して15万~20万程度
投資枚数は次の式で求め、小数点以下を切り上げるかして求めます。
前日の口座残高(余裕金)× 投資割合(%)÷ 100} ÷ 投資枚数算出価格
後は過去の日々のシステムマージンベースの損益を使用して、
投資割合を変化させてシミレーションをしていきます。
累積利益額と残高ベースのドローダウン率{(最大累積利益額ー累積利益額)÷ 最大累積利益額}の
バランスをみながら最適な投資割合を決定します。
本番環境下テストを実施する
資産管理シミレーションを経ていよいよ本格運用となるわけですが、本格的な運用に入る前には運用上の問題点がないかどうか等を洗い出すために最小単位での取引を行う期間を設けておいた方がベターです。
実際に運用してみるとちょこちょこと不都合な点が発生します。
特にメジャーSQ日の前後は要注意です。
この期間中に問題点や運用マニュアル等をしっかり是正して本格運用に臨みます。
運用ルール(目標、運用撤退条件等)を定める
運用目標、運用中止・中断条件等をあらかじめ決めておきます。
運用管理用ファイルを作成する
投資枚数算出用および運用結果検証用に運用管理用ファイルを作成しておきます。
本番運用に入る
本番運用突入です。
あとは撤退ルールに抵触しない限り運用を継続していくだけです。
運用結果は作成した運用管理用ファイルに記録していきます。
まとめ
以上がシステム開発から本番運用までの大ざっぱな流れです。
システム作りは面倒なことが多いことも事実です。
しかし、あ~だこうだといろいろアイデアを考え、それらを具現化していく過程は結構楽しめます。
そして、いろいろもがきながらも結果が出た時の喜びはひとしおです。