
岡三オンライン証券の岡三RSSではExcelを使った自動売買が可能です。
Excelマクロを使用するケースで自動売買を実現するために、自動で繰り返しマクロを実行する設定を行いました。
繰り返し間隔は5秒ごとにしてありますが、これは変えることが可能です。
でもExcelの計算処理が遅いのか岡三RSSの通信速度が遅いのかわかりませんが、時間間隔をあまり短くしても処理が追いつかなかったので、5秒程度がよいのかなと思っています。
それでは見ていきましょう。
マクロによる注文処理の自動継続
現在、岡三RSSを使って自動売買をしている。
その中で、実際の注文はExcelマクロから出している。
理由は、そのほうが安定するから。
Excelシートに直接注文関数を書く方式だと、なぜだかうまく動作しないことがあった。
なのでその後はずっとExcelマクロの方から注文関数を使って注文を行っている。
Excelマクロでは、Excelシート上で発注条件がオンになったかどうかをチェックして、オンであれば注文を出す、ということを行っている。
この動作は1回で終了するのではなく、定期的に繰り返し行いたい。
それをするには、Excelマクロのサブルーチンを数秒ごとに定期的に呼び出して実行する設定を行う。
Excelマクロの例
以下にマクロの記述例を示す。
Sub Tyumon()
Dim mytime As Date
Dim myDate As Date
Application.CommandBars("岡三RSS2").Controls(5).Execute
Application.ScreenUpdating = True
Application.Calculation = xlCalculationManual
Calculate
'ここと
'ここの間に注文処理を記述する
mytime = TimeValue(Now())
If mytime >= TimeValue("23:59:45") Then
myDate = DateValue(Now() + 1) '翌日のOnTimeセット
Application.OnTime myDate + TimeValue("00:00:05"), "Tyumon"
Else
Application.OnTime mytime + TimeValue("00:00:05"), "Tyumon"
End If
End Sub
上の例では、Application.OnTime で5秒後にTyumon関数を呼び出している。
これをすることで繰り返しTyumon関数が呼び出され、手動で止めるまで繰り返される。
myDate を使用している部分は、24時を超える時刻を指定しても関数の呼び出しがうまく行かないので、「新しい日付+5秒」にするためである。
ソースコードの上のほうにある Application.CommandBars("岡三RSS2").Controls(5).Execute は岡三RSSで通信を行って株価情報等を更新するコマンドである。
また、Excelの設定として Application.Calculation = xlCalculationManual として、計算を手動実行するようにし、Calculate で計算を実行している。
そうしないと正しく情報が更新される前に計算が実行され誤発注が起こる恐れがある。
条件判定や注文関数などの注文処理をソースコードの中間部分に記述してやる。
コードが出来上がったら、Excel上から一度マクロを呼び出して実行すれば、あとは自動で繰り返し実行してくれる。
まとめ
- Excelマクロを繰り返し実行するには Application.OnTime を使う
- 計算モードは手動実行にしておいたほうが安心