発行書籍一覧 > 現代の錬金術師シリーズ一覧 > ← / →
自動売買ロボット作成マニュアル
〜エクセルで理想のシステムトレード
『自動売買ロボット 作成マニュアル初級編』 |
「テクニカル分析に興味があり、一通りの知識を身につけた。
しかし、実際のところ、どのように利用してよいか分からない」
「テクニカル分析を活用したいと思っている。
しかし、手作業で検証するには膨大な時間と労力がかかる。
かといって、そのような作業を自動的にしてくれるソフトウェアは見当たらない」
「テクニカル分析をルール化し、売買を機械的に執行したいと考えている。
しかし、具体的にどうすればよいか分からない」
このような疑問を持ち、せっかく学んだ売買手法の知識を生かしきれていないと感じたことはないだろうか? 「そのとおり!」と思われた方には、ぜひ本書をひもといてもらいたい。 本書は「マイクロソフト社の表計算ソフト、エクセルを利用して、テクニカル分析に関する各工程を自動化させること」を目的にした指南書である。自分の理想のトレードを実現させる強力なツールとしてエクセルを利用してみようというわけだ。
◎エクセルで「投資ツール」を作ろう
エクセルは、多くのパソコンに装備されているので、実際に利用された経験がある人は多いように思う。しかし、ほとんどの方はエクセルのセルに文字や計算式、関数を直接入力して利用されていらっしゃるのではないだろうか。 エクセルには「VBA=Visual Basic for Application」と呼ばれるプログラミング言語が搭載されている。このVBAこそ、エクセルの大きな特徴に挙げられる。さまざまな作業を自動化したり、ソフトウェア自体に機能を追加したりすることができる強力なツールだ。このVBAを活用してエクセルを強力な投資ツールに変えてしまおう、というのが本書の方針である。本書では、
ができるように解説している。
- インターネット経由での株価データの自動取得、
- テクニカル指標の自動計算とチャート描画、
- テクニカル分析による売買シグナルの確認と手法の検証、
- そして最終的にはブローカーの売買プラットフォームにつないで自動発注
これらを具現化するのに一部の人しか手にはいらないような高価なソフトウェアを用いるのではない。パソコンを利用している多くの方がすでにお持ちのエクセルを利用するのである。 皆さんは本書のコードを模写するだけで、システム構築のロジックを会得し、非常に強力な投資環境を手に入れることができるだろう。
エクセルで「投資ツール」を作ろう 本書を読み解くうえでの注意点
第1章 エクセルとVBAの基本1-1 実際に自分で記述する意味
1-2 VBAの基本概念 第2章 データの取得2-1 Yahooファイナンスから取得マクロを始める前の設定 マクロの記録 アドレス取得のコツ データの取り込み 記録したマクロをVBEで編集する 約10年分の日次データを取得する データ編集マクロを作成する データ取得マクロを変更する データ編集マクロの作成に戻る 取得したデータを整理する ステップイン機能
2-2 Pan Active Databaseから取得する 第3章 テクニカル指標の算出3-1 移動平均の算出移動平均のマクロ 移動平均を算出する 2つ目の移動平均を求める
3-2 EMAとMACDの算出
3-3 RSIの算出
3-4 ストキャスティックスの算出
3-5 DMIとADXの算出 第4章 チャートの作成4-1 チャートの準備チャートを作成する 移動平均線を追加する MACDとMACDシグナルを表示する RSIを表示させる ストキャスティックスとDMIを表示させる チャート表示の便利な機能
4-2 各指標の期間変更
4-3 銘柄コード・取得期間を変更する
4-4 チャートにスクロール・拡大縮小機能を追加
|
第5章 売買手法のプログラム5-1 分析の前にリスクマネジメント マネーマネジメント 手数料・税金・消費税 スリッページ 自作関数を作成する 変数を宣言する 時系列データをコピー 手数料関数 Long_Entry関数 Short_Entry関数 Long_StopLoss関数 Short_StopLoss関数 Long_Exit関数 Short_Exit関数
5-2 3本足の高値安値
5-3 アンチ
5-4 ADXギャッパー 第6章 売買手法を検証6-1 手法の検証サマリーシートを作成する サマリーマクロを作成する 買いトレードで勝った場合 買いトレードで負けた場合 最大ドローダウン額と総手数料額 売りトレードの場合 For構文を用いなくても一度で算出できる値 買いトレードの残りの項目 売りトレードの残りの項目
6-2 分析項目の変更
6-3 手法の最適化
6-4 銘柄スクリーニングの方法 第7章 エクセルデイトレード7-1 10銘柄を同時に確認するマーケットスピードとRSSの準備 ブックの構築 銘柄監視シートの設定 参考指標の表示設定 設定と設定値エリアの作成 監視銘柄設定エリアの作成 ボタンとオプションボックスを配置 変数の修正 銘柄設定ボタンのマクロ作成 選択された市場のコードを代入する
7-2 シグナルの発生を確認
7-3 シグナルの発生を監視し、注文を処理 おわりに |
ウェブサイト:自動売買研究所 | Email
補足コラム:
・Excel2000でのWebクエリ
・Webテーブル番号ランダム化対応
移動平均(10日、20日)とMACD(5、20、5)をチャートに適用した例
Q:エクセル2000でも利用できますか?
A:エクセルのバージョンですが、基本的には2003で作成・動作確認を行っています。
2000でも動作確認済みです。Q:Excel2000ではWebクエリの画面が異なります。
A:著者サイトでExcel2000でのWebクエリの補足説明をしておりますので、 ご参照ください。http://oaive.com/columns/excel2000_webqueryQ:本書は日経225先物にも有効でしょうか? 対象市場を教えてください。
A:対象市場ですが、システム検証は国内すべての市場、自動売買は東証・JASDAQ・大証・ヘラクレスに対応しています。先物に関しては、データ取得にPanActiveDatabaseを使用する場合に限り対応 しています。データ取得にYahooファイナンスを使用する場合、現在のところ 先物の時系列データをYahooファイナンスが扱っていないため未対応です。 為替に関しては、基本的にPanActiveDatabase、Yahooファイナンスのいずれ も対応しています。
ただし、先物に関してPanActiveDatabaseを使用する場合でも、限月の設定な どが必要であり、その部分に関しては本書で言及していません。同様に、為替 に関しても為替特有の設定などに関しては言及していません。そのため、 本書の内容を理解した上である程度応用していただく必要があります。
本書の内容を前提とした為替や先物の具体的な対応に関しては、今後私の 運営するウェブサイト (http://oaive.com) で追加コラムという形で紹介したいと考えています。
Q:コードの入力ミスを防ぐコツはありますか?
A:VBEでコードを記述する場合、「Ctrl+スペース」でコードの候補を表示する ことが出来ます。これは入力ミスを防ぐだけでなく、入力効率を高めることが できるため、非常に有効な機能といえます。また、入力ミス後の対処法として、 「F8」でコードを1行ずつ実行していくステップインという機能があります。 これで1行1行がそれぞれどのような処理を行っているのかを確認していくこと によって、どこに入力ミスがあるかを速やかに調べることが出来ます。これら の機能を活用していくことが、入力ミスを減らすことにつながると思います。Q:最後のUWSCについて、あまり著されていなかった理由は?
A:UWSCはキーボードやマウスの操作を自動化するソフトウェアです。
そのため、例えば利用する発注ソフトの操作性などが変化すれば書いたスク リプトは使えなくなります。よって、将来的に使えなくなるような不確定要素 が大きいことから書籍という形で深く言及するのを避けました。もちろん、注 文の自動化は自動売買の重要な部分のひとつで、気になる方も多いと思います ので、それは私のウェブサイト (http://oaive.com) に追加コラムという形で掲載させていただきました。既にご覧になれますので、本書を読み終えた人は是非注文の自動化に挑戦してみてください。Q:システムトレードに向いているのはどういう人だと思われますか?
A:入念に調査・研究を繰り返すことができるこだわりを持った人だと思います。 システムトレードの場合、事前の研究がほぼすべてです。十分に検証されてい ないシステムを実践で扱うことは、うまく動作しないどころか大きな損失を被 る危険性をはらんでいます。抜け目なく何度も検証を繰り返すことの出来る入 念さが重要です。
そして何より、システムトレードや自動売買が「楽して儲ける方法」だと考 えていない人だと思います。
[377ページ] × If a.Cells(ii + 11, 7).Value > a.Cells(ii + 11, 18).Value _ Or a.Cells(ii + 30, 7).Value < a.Cells(ii + 30, 19).Value Then longexit: ○ If a.Cells(ii + 11, 7).Value > a.Cells(ii + 11, 18).Value _ Or a.Cells(ii + 11, 7).Value < a.Cells(ii + 11, 19).Value Then longexit: ---------------------------------- [380ページ] × If a.Cells(ii + 11, 7).Value < a.Cells(ii + 11, 18).Value _ Or a.Cells(ii + 30, 7).Value > a.Cells(ii + 30, 19).Value Then shortexit: ○ If a.Cells(ii + 11, 7).Value < a.Cells(ii + 11, 18).Value _ Or a.Cells(ii + 11, 7).Value > a.Cells(ii + 11, 19).Value Then shortexit: ---------------------------------- 本文197ページの1行目に記載されているコードは 「Public Equity As Long, Contracts As Long, Profit As Long」ではなく 「Public Equity As Double, Contracts As Double, Profit As Double」でした。 Long型で宣言すると、一部の場合においてオーバーフローを起こす可能性があるため、 Double型での宣言に変更しました。 ---------------------------------- 本文84ページの14行以降に記載されている 範囲指定の方法は 「length(1) - 1」ではなく 「length(1) + 1」でした。 また、それ以降の範囲指定方法についても同様です。 ---------------------------------- 本文91(93)ページの「マル14、15」のコードが サンプルシートのものと異なります。 正しくはサンプルシートのコードですが、 本書に記載されているコードでも動作自体には支障ありません。 ○[サンプルにあるコード] For i = length_temp + 4 To lastrow If i >= length(3) + length_temp Then Cells(i, 16) = Cells(i, 14) - Cells(i, 15) Cells(i, 17) = WorksheetFunction.Average(Range("P" & i, "P" & i - length(3) + 1)) Else Cells(i, 16) = Cells(i, 14) - Cells(i, 15) End If Next ×[本文にあるコード] For i = length_temp + 4 To lastrow If i = length_temp + 4 Then Cells (i, 16) = Cells (i, 14) - Cells (i, 15) ElseIf i >= length(3) + length_temp + 4 Then Cells (i, 16) = Cells (i, 14) - Cells (i, 15) Cells (i, 17) = WorksheetFunction .Average (Range ("P" & i , "P" & i - length (3) + 1) ) Else Cells(i, 16) = Cells(i, 14) - Cells(i, 15) End If Next ---------------------------------- 本文116ページの10〜11行目に記載されている内容は 「pDI > 0 かつ mDI > 0」ではなく、 「pDI < 0 かつ mDI < 0」でした。 なお、これによるコードの修正はございません。 ---------------------------------- 本文197ページ 図表5-4 におけるコードの一部は 「Public s_price(4) as Integer」ではなく、 「Public s_price(4) as Long」でした。 ---------------------------------- 本文349ページに記載されている、 ストキャスティクスマクロの修正における変更は 「length(1) = input_temp(6)」ではなく 「length(1) = input_temp(4)」でした。 ---------------------------------- 本文367ページに記載されている、 「Result」シートの書き込み位置の指定は以下の通りです。 ○ If b.Range("B3") = "" Then endrow = 3 Else endrow = b.Range("B2").End(xlDown).Row + 1 End If × endrow = b.Range("B2").End(xlDown).Row + 1 ---------------------------------- 本文219、231、241、345、351、359ページに記載されている、売買枚数を算出するためのコードは以下の通りです。 ○ Contracts = WorksheetFunction.RoundDown(((Equity * Risk_Ratio) / (StopLoss)), Unit_Degits) × Contracts = WorksheetFunction.RoundDown(((Equity * Risk_Ratio) / (StopLoss * Units)), Unit_Degits) ---------------------------------- サンプルシートでは上記の問題が訂正されています。 詳細に関しましてはそちらをご覧ください。 お詫びして訂正いたします。
■Yahooファイナンス版において、YahooファイナンスのWebページ構造による Webテーブル番号のランダム変更に対応しました。 詳細はサンプルシートで確認してください(2007年3月5日)
■第5章〜第7章において、建玉数を建てるだけの資金残高が不足している場合、強制的に建玉数を「0」としていましたが、これを「資金残高で建てられるだけの枚数」に変更しました。
詳しくは、該当箇所をサンプルシートで確認してください。