3.「t08-ボリンジャーバンド」を改善して多数銘柄を連続して解析する方法
(2008年3月8日 16:44 AUさんからの質問)
井領さんの作られたKIkabu Mには大変お世話になっています。
今回、私もスクリーニングできるプログラムを作りたいと考えているのですが、今回発売された書籍を購読したら可能かどうか教えていただきたいと存じます。ちなみにプログラム経験は昔学校でかじった事がある程度であまり自身はありません。
内容:上場している全銘柄の株価を抽出し、ボリンジャーバンドの値を2週間分くらい計算したいと思っています。(特に株価を表示したりしたいとは考えていません。)
もし、可能なら抽出作業にはどれほどの時間がかかるのでしょうか?PCはPentium4 3.2G です。
もしよろしければ、ご回答よろしくお願いします。
<回答>
今回発売の本についているCD-ROMのサンプルマクロを途中で止める等して
どのステータスで何をしているか勉強すればボリンジャーバンドでの解析は
マスター出来ると思います。但しその場合もマクロのデバッグでありマクロの
基礎知識の本を一回は読んでいないと難しいと思います。
(なお昔N-BASICでプログラムを組んだことがある方でしたら、同じBASICであり理解できると思います)
なお、今回の本は1銘柄解析のサンプであり、上場している多数銘柄の連続解析例
はないので、これもそれなりにマクロが理解できないと自分では組めません。
もっと親切な回答を書きたいのですが、正直レベルで記述すると以上になります。
<再回答および類似質問に対する回答準備>
前回の回答は何となく誠意が感じられない回答だったので、本を買って欲しいと言う下心を少し入れた別の回答を以下に考えた。
この本はVBAの基礎知識がある方を対象にしており、一度は入門書を読む等多少のVBAの知識がないと理解できないと思います。但しマクロの自動記録が出来る等多少でも触ったことがある方なら、VBAスキルアップの早道は人の作ったマクロを見ることでありこの本は全サンプルソース公開であり勉強の資料として役立つと思います。
なお、上場している全銘柄の株価を抽出し、ボリンジャーバンドで解析する件は今回の本に多数銘柄を解析する方法の記載がないので以下に多数銘柄をボリンジャーバンドで解析する方法を説明します。概略理解できれば自分で組み直すことが出来ると思います。
(1)概略
・「t11-今日の値動き」の銘柄リストの取り込みプロシージャを、「t08-ボリンジャーバンド」に貼り付け連続で多数銘柄の解析を実行します。最終的な全銘柄の解析結果をまとめるマクロ例も合わせて紹介します。
(2)「t08-ボリンジャーバンド」UserForm1モジュールの変更
t08-ボリンジャーバンドのユーザーフォームの「データ取得&解析」ボタンをそのまま使用するが、
実行するプロシージャは下記のように変更のこと。(銘柄リスト作成は(4)項で説明)
Private Sub cmb1_Click()
' Call download 'こちらを消して下記を追加
Call 銘柄リスト作成
End Sub
(3)「t08-ボリンジャーバンド」Module1の変更
・下記の灰色文字を削除(ここではブックの追加を行わない)、ピンク色はそのまま
・下記の赤色文字を追加する(多数銘柄の連続実行であり、シート名を銘柄コードにする)
Sub download()
Application.ScreenUpdating = False
'シートの種類チェックと画像削除
On Error Resume Next
If ActiveSheet.Type <> xlWorksheet Then
Workbooks.Add
Else
Sheets.Add
For Each sheet_name In Worksheets
If sheet_name.Name = ("時系列株価") Then
Worksheets("時系列株価").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End If
Next
End If
On Error GoTo 0
Sheets.Add.Name = "時系列株価"
Sheets.Add.Name = "(" & zno + 1 & ")" & dat2(zno, 0) '変更
datbook = ActiveWorkbook.Name
UserForm1.txt1.Text = ""
・
・
(4)「t08-ボリンジャーバンド」へModule2を追加
・シートを追加して、このシートに新規の制御関係を記載する。
・追加方法は、Visual Basic Editor画面メニューの「挿入」「標準モジュール」をクリック
(本ケースではModule2が追加される)
・そこに「t11-今日の値動き」のプロシージャ「銘柄リスト作成」を貼り付ける。
・貼り付け後の改造は下記を参照。追加(赤色)、削除(灰色)、一部変更(緑色)、そのまま(ピンク)。
Public dat2() As String '表示銘柄datはModule1で使用済みでダブルのでこちらは2を付けた
Public zno As Integer '自動実行No
Public zsu As Integer '自動実行数量
Public datbook As String '追加ブック名
Sub 銘柄リスト作成()
ReDim dat2(3000, 1) As String ’dat → dat2
If UserForm1.txt1.Text <> "" Then
Call 銘柄1個
Exit Sub
End If
If UserForm1.txt3.Text <> "" Then
' Call 銘柄1個
zsu = 0
dat2(0, 0) = UserForm1.txt3.Text
Call 連続実行
Exit Sub
End If
'ファイル指定
flt$ = "txtファイル(*.txt),*.txt"
fff = Application.GetOpenFilename(flt$, , Title:="txtファイル指定")
If fff = "False" Then
MsgBox "銘柄コード記載のtxtファイルを指定して下さい"
Exit Sub
End If
'Call シート追加
・・・略・・
Input #1, dat2(i, 0), dat2(i, 1) ’dat → dat2
・・・略・・
'Range(Cells(2, 1), Cells(i + 1, 2)).Value = dat
'Call 不用シート削除
'UserForm1.Label2.Caption = fff & "から[" & i & "]件取り込みました"
UserForm1.txt1.Text = fff & "から[" & i & "]件取り込みました"
zsu = i - 1
Call 連続実行 '新規追加
Exit Sub
rest:
・・・略 ・・・
End Sub
’------------------------------------------------------------------------------------
Sub 連続実行()
'ブック追加
Workbooks.Add
datbook = ActiveWorkbook.Name
For zno = 0 To zsu
Application.StatusBar = "解析実行中---" & zno + 1 & "/" & zsu + 1
UserForm1.txt3.Text = dat2(zno, 0) ’配列のデータをテキストボックスへ記入
Windows(datbook).Activate
Call download ’データ取得&ボリンジャーバンドで解析
ActiveSheet.Move After:=Worksheets(Worksheets.Count) ’追加シートを最終へ
Application.ScreenUpdating = True ’取りあえず実行結果を見る
Application.ScreenUpdating = False
Next
Call 不用シート削除
Application.StatusBar = "解析実終了"
End Sub
(5) 追加したModule2へ結果集計を追加
・下記のプロシージャをModule2へ貼り付けて下さい。
・これを実行で下図のようにメッセージボックスへ抽出結果を表示します。
・このプロシージャはスタートボタンを付けてないので、解析終了後にメニューの「ツール」から実行して下さい。
・スタートボタン設定や(解析後に引き続き実施でもOK)、結果をシートへ表示に改善等は各自で行って下い。
Sub 連続解析()
Dim kaik(5) As String '買い結果
Dim urik(5) As String '売り結果
Application.ScreenUpdating = False
For Each sheet_name In Worksheets
shname = sheet_name.Name
If shname <> uksh Then
Sheets(shname).Select
For i = 0 To 4 '5日間の場合
If kaik(i) = "" Then
kaik(i) = Cells(i + 4, 1) & ": "
urik(i) = Cells(i + 4, 1) & ": "
End If
If Cells(i + 4, 7) = "買い検討" Then
kaik(i) = kaik(i) & "[" & shname & "] "
End If
If Cells(i + 4, 7) = "売り検討" Then
urik(i) = urik(i) & "[" & shname & "] "
End If
Next
End If
Next
msg = kaik(0) & Chr(10) & kaik(1) & Chr(10) & _
kaik(2) & Chr(10) & kaik(3) & Chr(10) & kaik(4)
kari = MsgBox(msg, 0, "買い抽出銘柄")
msg = urik(0) & Chr(10) & urik(1) & Chr(10) & _
urik(2) & Chr(10) & urik(3) & Chr(10) & urik(4)
kari = MsgBox(msg, 0, "売り抽出銘柄")
End Sub
(5)「t08-ボリンジャーバンド」Module8
・ボリンジャーバンド解析&チャート作成の、このModule8に変更はありません。
<補足説明>
・このボリンジャーバンド作成のModule8をそのまま使用できると言うことは、他の解析ツールもそのまま使用
出来ると言うことです。たとえば「一目均衡表」を多数銘柄連続で行いたい場合は、上記(2)〜(4)のマクロを
そのまま使用し、Module1の実行するマクロ指定を、「Call ボリンジャーバンドST」を「Call 一目均衡」
に変えるだけで実行できます。
・なお、事前準備としては、Module8をModule10(一目均衡表は10になっている)に変える以外に、各種パラメータ
を設定してある「指標シート」も一目均衡表の記載があるシートにする必要があります。(一目均衡表を最後に
作成した関係で、t10ツールの「指標シート」を使用すれば他の全ツールの記載があります)
【ホ−ム】