株式投資を自動で行うシステムトレードを行うための環境設定について

勝手に株式売買を行い、利益を積み上げていってくれるというのがシステムトレードの目指すところです。
完全自動売買を実現するまでには一部手動で行い、だんだんと自動でできるように一部をプログラムやマクロで実行するようにしていくという方向性が良いと思い、実行していっています。

現在では完全に自動化とはいかないまでもだんだんと形をなしてきているので、その中身について説明していきたいと思います。

注:今回はどのようなロジックでシステムトレードを行うのかというよりは、どのような環境でシステムトレードを行うのかという環境の部分について説明します。

<目次>

パソコンの自動起動

パソコンのBIOS機能に自動起動機能があります。時間を設定するとその時間にパソコンを起動してくれるというものです。

お名前デスクトップなど外部で365日間起動させておいてプログラムで動かすという手もありますが、私は自宅のPCを毎日決まった時間に起動させてプログラムを実行しています。
サラリーマンで働いているので昼の時間の自宅PCは使用していないからです。

電気代はかかりますがモニターをオフにしておくなどの工夫をしています。

家族がいる人は触らないように話をしておく必要がありそうですが。まぁリスクはありますね。

家のパソコンを使うことに関するメリットとデメリットは以下と考えています。
メリットは費用が安い、遊休資産の活用ができる
デメリットは外出先から動かせない、自分以外の人間が触れてしまう

といったところでしょうか。代替手段はお名前デスクトップなどの外部パソコンなので検討してみてください。

岡三RSS

岡三証券のサービスです。エクセルシートに株価を取り込んで発注までエクセルシート上でできてしまうという神サービスです。有料ですが、無料お試し期間があります。
岡三証券はA8.net
のセルフバックで岡三証券の申し込みをすることでキャッシュバックを受けることができるのでA8.netの無料登録をしておくのがオススメです。

UWSC

このソフトはWINDOWSをマクロ化して動かすことができるという点です。エクセルのVBAとか動作を記録、を通常のWINDOWSでできるというイメージです。

岡三RSSを自動立ち上げさせて、UWSCと岡三RSSの機能で自動売買を行っていきます。

まとめ

これらがシステムトレードをやる上で必要になってくるサービスになります。具体的なやり方については次回以降順を追って説明していきたいと思います。

Excelで実施している処理をVBAでどう書くかはマクロの記録で調べるべし

Excelの普段の業務をVBAで書きたい!実現したい!という時に基本に立ち返り、オブジェクトメソッドに分けてどのようにVBAで実現したらよいか考える、というのが王道だと思いますがなかなか調べたりテストしたりするのが面倒な時があります。
その際に役に立つのがマクロの記録という機能です。

<目次>

マクロとは

例えばVBAでA1に100を入力するプログラムを書いてみます。

Sub InputNumber()

Range("A1").Value=100

End sub

このプログラムを書いた時点でエクセル側はInputNumberというマクロとして認識します。
Excelの開発タブからマクロの一覧を開くとInputNumberというマクロが認識されており、このことからもVBEで書かれたプロシージャーごとにエクセル側ではマクロと認識されていることがわかります。
(個人的にはVBEで実行するのが好きですが、エクセルの開発でマクロ一覧を呼び出し、エクセルから実施することもできます。)
VBAで書いたプロシージャーはエクセル側でマクロと認識されるという点がポイントです。

マクロの記録がリファレンスにぴったり

エクセルで「マクロを記録」を行うと、Excel側で行った処理をVBAになおしてVBEに自動的に記載していってくれます。
エクセルとVBEを横並びに置いて、マクロの記録を実行してエクセルの操作を続けていると作業毎にどんどんVBEに記述されていっていることがわかります。

VBAを自分で書く時に処理のやり方に困ったらインターネットで調べるのも良いですが、マクロの記録を使ってオブジェクトの指定の仕方や、メソッドの記載の仕方を調べるのが楽で良いです。

生成されたVBAの記述をコピー&ペーストで活用できるので非常に簡単に操作を調べて、テストまで持っていくことができます。

まとめ

普段エクセルを使って行っていることをVBAにするなら、マクロの記録を使って処理方法を確認するのが簡単で良い方法です。 

(VBAの技①)VBAを書く上で知っておいたほうが良いTIPSを紹介する①(Withで記述をシンプルにする)

次に具体的にプログラムを書いていく際に、書きやすくするシンプルなTIPSの一つとして「Withでまとめる」事について解説したいと思います。

<目次>

WITHは記述をまとめるプログラム

WITHは記述をまとめるプログラムです。使い方によっては記述の量を減らせるので重宝します。

例えばA1セルにテストと入力し、太字にした上でフォントサイズを20にしてみましょう。
普通に書けば以下のようになります。

Sub NORMAL()

Range("A1").Value="テスト"
Range("A1").Font.Bold=True
Range("A1").Font.Size=20

End sub

です。これでは、Range("A1")が3回も出てくるので記載が煩雑です。この場合出てくるセルが1つだけなのでよいですが、ブックやシートをまたがるとどのA1なのか混乱しますし、できるだけシンプルに書くということがミス防止にもつながりますので、なるべくまとめておきましょう。

具体的な書き方は以下です。

Sub USEWITH()

With Range("A1")
      
      .Value="テスト"
      .Font.Bold=True
      .Font.Size=20

End with

End sub

これで同様の効果を得られます。

WITHを入れ子にする

先ほどがWITHの基本的な使い方でした。ところでまだ共通の場所があったのがわかりますでしょうか。そうFontですね。WithをWithで入れ子にしてみましょう。

Sub USEWITH2()

With Range("A1")
      
      .Value="テスト"

      With .Font
            .Bold=True
            .Size=20
      End with      

End with

End sub


私はEnd Withの記述を忘れがちなので、自戒を込めて忘れないようにというアドバイスを贈りたいと思います。

同一オブジェクトに処理を重ねる場合には、「ウィィィズ!」の掛け声とともに記述をまとめてシンプルに記述してみてください。

(Excel)VBAを本当の初心者に説明する用にまとめておく③(文字列/数値入力・取得)

実際にコードを書いてみましょう。一般的に一番最初にプログラムを実行するときには"Hello World"と打つのが一般的です。
文字列をコンピュータに表示させるという最も簡単なプログラムを実行してみることでVBAの記述のルールを確認すると良いでしょう。
前回までの記事を参考にVBEを立ち上げて標準モジュールにプログラムを書き込んでいきましょう。

<目次>

 

VBAでプログラムを書く際の基本ルール

・Subで開始し、End Subで終わるべし
・Subの後はプロシージャー名を記入し、()で締めるべし
 ※SubからEnd Subまでの一連の処理をプロシージャーと呼びます。このプロシージャーに名前をつけて管理します
・文は改行で区切るべし
・分が長くなった場合には「 _」(スペース、アンダーバー)とすると、「 _」の前後を一行として認識してくれるので活用すべし
・コメントを書きたい場合は「'[bash]コメント」とすると、bash以降がコメントになるのでメモを残すべし


Hello World の表示(文字列のメッセージボックスへの表示)

基本的な書き方のルールとしては、下記になります。

 

Sub プロシージャーの名前()

プログラム内容

End Sub 

 

今回はHello Worldの表示なのでプロシージャーの名前をShowHelloWorldとしましょう。

中身ですが字下げをするとわかりやすいです。メッセージを表示するのはMsgboxを使います。

Sub ShowHelloWorld()

Msgbox("Hello World")

End Sub

これでツールバーのプレイボタンを押してみてください。これで画面にHello Worldと表示されたと思います。

このようにプログラムを書くウィンドウにプロシージャを書き、ツールバーで実行するのが基本的な流れになっています。

 

セルの値を変える(セルの指定、セル内での計算)

文字列の表示ができたので次はセルの値を変えていきたいと思います。

まずプロシージャー名を決めます。なんでもいいですが私のほうではChangeCellにしておきます。
次に決めないといけないことはどこのセルを変えるのかということです。

 

1つのセルの指定について

”どこ”の部分を指定してあげなければいけません。セルを表す方法は複数ありますが、Rangeを使うこととしましょう。
Rangeを使うにしてもその際にはどのブックのどのシートのどのセルであるかということを指定してあげる必要があります。

今開いているシートのセルA1を指定する場合に真面目に書くと、
(Activebook.ActiveSheet.)Range("A1")
ということになります。

今開いているという部分は省略可能なのでカッコをつけておきます。

セルを指定する方法は下記です。これらは全てA1セルを表します。

Range("A1")
Cells(1,1)
Cells(1,"A")

数字で管理したほうがわかりやすいので私はCells(1,1)を愛用しています。

上記に加えて、基準セルからの相対位置で指定する方法もあるので一応紹介しておきます。
Cells(1,1).Offset(1,0)
A1から1 つ下(行方向 1 、列方向 0)の指定をするため、Cells(1,1).Offset(1,0)はCells(2,1)を表します。

セルに文字列や数字を入れるにはこのようにします。数字は""(クオーテーション)で囲ってあげましょう。
Range("A1").Value = "文字列"
Cells(2,1).Value = 1

そこで下記を実行してみてください。

Sub ChangeCell()

Range("A1").Value = "文字列"
Cells(2,1).Value = 1
Cells(3,"A").Value = 2
Cells(1,1).Offset(3,0).Value = 3

End Sub

f:id:kazooloop:20170301141733j:plain

うまくいきましたでしょうか?

 

複数セルの指定について

複数セルの指定も複数あり、下記になります。

Range("A1","B3") 省略するとRange("A1:B3")
Range(Cells(1,1),Cells(2,3))

これで複数のセルを指定できます。

Sub ChangeCells()

Range("A1","B3").Value = "文字列"
Range(Cells(3,1),Cells(5,3)).Value = 1

End Sub

f:id:kazooloop:20170301142006j:plain

うまくいきましたでしょうか?

 

セルの中身の取得

今まではセルを変更・入力してきましたが、今回は中身を取得する方法を説明します。

A1セルに100と入力して、この数値をVBAで取得してみましょう。

セルの中身の取得に関してもValueメソッドで行うことができます。

 

Sub Getcontent()

Range("A1").Value

MsgBox(Range("A1").Value)

End Sub

これでOKです。100がメッセージボックスで表示されたでしょうか?

(Excel)VBAを本当の初心者に説明する用にまとめておく②(VBE/個人用マクロブック)

今回はExcelにてVBAを使っていくのに必要なVisual Basic EditorというExcelの機能の一部分を見ていきたいと思います。
VBAはこのVisual Basic Editorに入力して実行していくことになります。

そのためVBAを学ぶにあたってはこのVisual Basic Editorの使い方に慣れる必要があります。
解説に使うのはWindowsのものになります。MAC版は若干動きが異なるようです。

<目次>

開発タブとVBEの立ち上げ方

まずエクセルを立ち上げてオプションから「開発」タブを有効にしてください。開発タブの中に「Visual Basic」というボタンがあるのでクリックすると「Visual Basic Editor」が起動されます。
これでVisual Basic Editorが立ち上がります。
このVisual Basic Editorに命令文を書き込んでExcelを動かしていくわけです。

VBEの見方

VBEを立ち上げたら色々な種類がありますが、まずは「標準モジュール」でプログラムを書いていくことにしましょう。
標準モジュールは、プロジェクトで右クリックするか、挿入メニューやツールバーから選ぶ方法があります。
いずれかの方法で標準モジュールを追記すると下記のような画面が出てきます。

f:id:kazooloop:20170228092840j:plain

 

左上がプロジェクト一覧です。プログラムの集合体をいくつかのブロックに分けて格納します。その下のプロパティはそのプロジェクトの属性を表すものです。
例えば、名前がmodule1になっていることが確認できると思います。プロパティウィンドウで編集すると、Excelのファイルも同時に変化するのもポイントです。

右側の欄に実際に命令文を記入していくことになります。

作業時のVBEの場所

作業時にはエクセルがどのように変化したか確認するために、左右にウィンドウを並べてVBEにプログラムを書いていくと良いでしょう。手っ取り早いやり方はエクセルとVBEを同時に起動した後、WINDOWSの下部のメニューバーを右クリックして「WINDOWを左右に並べて表示」を選択することです。
そうすると画面がに分割され左右にエクセルとVBEが両方並んで表示されます。

(応用)マクロはどこに保存するか(ファイルか個人用マクロブックか)

マクロは基本的にはファイルに保存することが多いです(上のケースも同様)。
しかし、この方法ではマクロを使用するときに、毎回ファイルを開く必要があります。これでは少々手間ですので、全ファイル共通で使用するマクロを持つ方法を紹介します。
それは個人用マクロブックに保存する方法です。
個人用マクロブックとは個人用マクロブックを作成すると、Excel起動時に非表示の状態で常に自動的に開かれます。そのため個人用ブックにマクロを保存しておけば、そのマクロをいつでも利用できます。
さらにはショットカットキーを設定しておけばいつでもマクロを呼び出せるため、自分だけのカスタムExcelを作ることができるようになります。

個人用マクロブックの作り方

それでは具体的な作り方に入ります。具体的な作り方は簡単です。「マクロ記録」ボタンをクリックして表示される「マクロの記録」ダイアログボックスの「マクロの保存先」で「個人用マクロブック」を選択する。
これだけです。これで個人用マクロブック「PERSONAL.XLSB」が作成されます。

個人用マクロブックの保存場所

そうすると個人用マクロブックが各ユーザーのExcel起動用のフォルダ「C:\ユーザー\(アカウント名)\AppDate\Roaming\Microsoft\Excel\XLSTART」 に保存されます。
WINDOWSのスタートメニューから「PERSONAL.XLSB」を検索するとファイルの保存場所を直接確認することができます。

まとめ

今回はVBAの開発環境である、VBEの起動、見方について説明しました。個人用マクロブックについては非常に便利な機能ではありますが、とっつきにくい人は後回しでも問題ないと思います。
それでもプログラムの集合体であるModuleがどこのファイルにつながっているか?(どこのファイルに書かれたものか)は意識しておくと良いと思います。