FC2ブログ
現役プログラマー村健の、投資に役立つプログラムを作るための勉強ブログです。 自動売買、システムトレードに挑戦!します。 勉強と習得の成果を記録です。
本ブログについて
本ブログは、プログラマー観点で投資への対費用効果を上げるために何ができるか?を考えていくブログです。
基本的には、ツール作成・公開、投資に関わるプログラム情報、最終的には 完全なる自動売買を目指しています。

現在、HPの方で現在作成中のツールや発注ロジックなどを公開中です。
VBAから、開いたIEでフォームにデータを入力、ボタンを押す

objIE.document.all.loginId.Value = "ログインID"
objIE.document.all.passwd.Value = "パスワード"
objIE.document.forms(0).submit
loginID、passwd、formsの番号はHTMLによって異なるため、
ソースで確認する。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
スポンサーサイト



VBAからIEを起動する
メニュー→ツール→参照設定で「Microsoft Internet Controls」を追加
Public objIE As Object 'IEオブジェクト参照用
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '可視設定。

起動したIEでURLを開く
objIE.Navigate "ここに開きたいURL"

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
現在、VBAでいろいろ遊んでいるのですが、
自動売買プログラムを作る人の手間が省けるような
仕組みを考えてみたりしました。

自動売買のロジックは各人の手法があると思いますが、
各証券会社へのWebによるやりとりはほぼ同じロジックになるので、
共通な処理として提供しよう、というものです。
(プログラマーにはあたりまえの事ですが^^;)

誰かこういったソースを配布していないものでしょうか。
と思いつつ、暇つぶしに考えて作っています。

・自動銘柄選定ロジック
 リアルタイムデータを分析して買い・売りを判別する、
 各人ごとのオリジナルなロジック

・各証券会社アクセス用標準モジュール
 証券会社へのWebを使ったアクセス機能をまとめたもの

・共通Webアクセス処理群の標準モジュール
 Webにアクセスする為の機能をまとめたもの

「各証券会社アクセス用標準モジュール」と
「共通Webアクセス処理群の標準モジュール」を
公開・提供します。

使い方としては、「自動銘柄選定ロジック」で証券会社へのWebアクセス
を行いたい場合は、
「各証券会社アクセス用標準モジュール」の関数に
いくつかの条件を渡してコールします。

例えば、
この銘柄が買い!と判断した場合は、
「各証券会社アクセス用標準モジュール」のOrder関数に
銘柄番号、現物、買い、成り行き、株数、を渡してコールすれば完了。

その他に、ログイン、確認、取り消し等、ほとんどの機能を
関数コールで実現します。

「各証券会社アクセス用標準モジュール」は、証券会社毎に
ファイルを作成する必要があります。
それを補助するために、テンプレートと、「共通Webアクセス処理群」
の標準モジュールを用意します。


こういった共通処理を部品化できれば、以下の恩赦を受けることができそうです。

・証券会社へのアクセス(ログイン、発注、確認等)は関数コールだけでよくなり、
 「自動銘柄選定ロジック」のみに注力できる。

・もし証券会社のHP構成が変わっても、
 「各証券会社アクセス用標準モジュール」を新しいものに入れ替えるだけで、
 「自動銘柄選定ロジック」に手を加える必要がない。
 また、新たな証券会社が増えても同様である。

・複数人でもみくちゃにされれば、高機能なものが出来上がる。
 (バグがない、多機能、高速)

デメリットもあるとは思いますが

 ・「各証券会社アクセス用標準モジュール」を新規作成・更新は誰がするか

 ・場合によっては、「自動銘柄選定ロジック」にも手を加える必要があるかも

 ・処理速度と安定動作のトレードオフ



その他にも、売買判定用のロジック、資金管理等、
共通化できる部品があるなら共通化したいですね。

最終的には、他言語で作成したDLLでの提供ですね。

そうすれば、VBAユーザは処理速度が速くなりますし、
他言語でプログラムしている人も使うことができます。
VB.NETならVBAからの移植も簡単ですしね。


以下、試しに作っているものです。
クラスを使えばもっときれいになったのかもしれませんが、
調べたらVBAのクラスは継承ができない?
のような事が書いてあったので、
とりあえず全部標準モジュールです・・・

ソースはここにのせてます。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
VBAでYahooにログインするマクロを組んでみました。
そんなに試験をしてないのでバグがあるかもしれませんが。

改造すれば証券会社のログインや発注もできると思います。

使い回しができやすいように、標準モジュールにいくつかの命令を
まとめました。

今後、色々な証券会社への発注できるものを作ったり、
標準モジュールを整備したりしたいですね。


'作成者:村健
'V0.01
'使い方
'このモジュールファイルをインポートしてください
'メニュー→ツール→参照設定で「Microsoft HTML Object Library」を追加してください。
Option Explicit

Public objIE As Object 'IEオブジェクト参照用

'=================================================
'名前   :初期設定
'機能概要 :IEオブジェクトの作成、可視設定など
'引数   :なし
'戻り値  :なし
'タイミング:IEオブジェクトを使用する前に必ず実行する
'=================================================
Sub SetInitialize()

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")

    objIE.Visible = True '見えるようにする

End Sub

'=================================================
'名前   :Webアクセス
'機能概要 :指定したURLをオープンする。
'引数   :URL
'戻り値  :Webアクセス失敗。ページがない、タイムアウト等
'タイミング:IEオブジェクトを使用する前に必ず実行する
'=================================================
Function UrlAccess(url As String) As Boolean

    'URLを開く
    objIE.Navigate url
    
    '開けるまでまつ
    UrlAccess = UrlAccess_Wait
    
End Function

'=================================================
'名前   :Webアクセスを待つ
'機能概要 :現在OPENしているページの読み込みが完了するまで待つ
'      タイムアウト検出あり
'引数   :なし
'戻り値  :Webアクセス失敗。ページがない、タイムアウト等
'タイミング:ページをOPENしたら必ず実行する
'=================================================
Function UrlAccess_Wait() As Boolean

     Dim waitTime As Date

    '読みこみ完了まで待つ
    waitTime = DateAdd("s", 20, Now()) '20秒後を算出
    
    Do While objIE.Busy = True '読み込み中なら以下を繰り返す
     DoEvents
     If waitTime < Now() Then '指定時間経過したら
     Exit Do
     End If
    Loop

    'まだbusyなら
    If objIE.Busy = True Then
     UrlAccess_Wait = False 'アクセス失敗
    End If
    
    'もし404なら
    If CompTitle("サーバーが見つかりません") = True Then
     UrlAccess_Wait = False
    End If
    UrlAccess_Wait = True 'アクセス成功

End Function

'=================================================
'名前   :htmlのタイトルの文字列と比較
'機能概要 :指定した文字と、現在開いているHTMLのTITLEタグが一致するか
'引数   :比較したい文字列
'戻り値  :一致:true、不一致:false
'タイミング:タイトルを比較したいとき
'=================================================
Function CompTitle(ByVal title As String) As Boolean

    Dim doc As MSHTML.HTMLDocument
    Set doc = objIE.Document
    
    'タイトルを取得
    If title = doc.title Then
     CompTitle = True
    Else
     CompTitle = False
    End If

End Function
WebAccess.bas


Option Explicit

Private Sub CommandButton1_Click()
    'ログイン
    StockLogin
End Sub

Private Sub CommandButton2_Click()
    If objIE.Visible = True Then
     objIE.Visible = False
    Else
     objIE.Visible = True
    End If

End Sub


'ログイン実行処理
Private Sub StockLogin()
    
    SetInitialize

    If UrlAccess(Cells(2, 3).Value) <> True Then
     MsgBox ("アクセスエラー")
    End If
    
    objIE.Document.all.login.Value = Cells(3, 3).Value
    objIE.Document.all.passwd.Value = Cells(4, 3).Value
    objIE.Document.forms(0).Submit
    
    If UrlAccess_Wait <> True Then
     MsgBox ("アクセスエラー")
    End If
    
End Sub
Sheet1

VBA_LOGIN


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング