【新・ExcelVBAで極めるシステムトレード 〜最強パワーアップ編】

著者からのお知らせ

以下の改善は1ツールの改善例ですが、●印は多数のツールに適用です。

(1)「tp15-多数ツールでスクリーニング」の最新日が抽出できない不具合の改善(2009/4/46)
(2)「tp01-ダウンロード(Yahoo)」の分割のあった銘柄でエラー発生した場合の改善(2009/5/1)
(3)「tp12-株価比較」の市場名称「ヘラクレス」が「HCS」変更に伴う改善(2009/6/1)
(4)「tp16-鍋蓋足チャート」の抽出銘柄が多くエラー発生ケースの改善(2009/6/20)
(5)「tp01-ダウンロード(Yahoo)」月データに不具合がある場合の改善(2009/9/30)
(6)「tp16-鍋蓋足チャート」の抽出時の参考落下率の表示改善方法(2009/11/2)
(7)「tp01-ダウンロード(Yahoo)」コード番号手入力で銘柄名を表示できるように改善(2009/12/2)
(8)●Excel2003で作成の第2軸チャートが2007では逆表示になる件を直すマクロ(2010/8/17)
(9)「tp11-今日の値動き」のデータフォーム仕様変更に伴う対処方法(2010/5/6)
(10)「tp16-鍋蓋足チャート」の下項目の日付表示位置場所の改善方法(2012/6/10)
(11)「tp11-今日の値動き」今日の値動きのYahooファイナンス仕様変更に伴う対処方法(2012/8/16)
(12)「tp16-鍋蓋足チャート」今日の値動きのYahooファイナンス仕様変更に伴う対処方法(2012/8/17)
(13)「tp12-株価比較」今日の値動きのYahooファイナンス仕様変更に伴う対処方法(2012/8/17)
(14)「tp17-信用倍率」infoseekの掲載終了に伴うYahooファイナンスへ変更方法(2012/11/28)
(15)「tp18-保有日数カレンダー」今日の値動きのYahooファイナンス仕様変更に伴う対処方法(2012/11/29)
(16)「tp12-株価比較」詳細情報のYahooファイナンス仕様変更に伴う対処方法(2014/5/21)
(17)「tp12-株価比較」詳細情報のYahooファイナンス再仕様変更に伴う対処方法(2014/6/3)
(18)●「tp01-ダウンロード(Yahoo)」Yahooファイナンス時系列仕様変更に伴う対処方法(2014/6/26)
(19)「tp16-鍋蓋足チャート」Yahooファイナンス時系列仕様変更に伴う対処方法(2014/6/26)
(20)Yahooファイナンス時系列仕様変更に伴う改善。上記(18)(19)の補助説明(2014/6/27)
(21)Yahooファイナンス時系列仕様変更に伴う改善。mp005の補助説明(2014/8/16)
(22)●「tp01-ダウンロード(Yahoo)」Yahooファイナンス時系列仕様変更に伴う対処方法(2015/1/10)
(23)「tp13-多数を1ツールで解析」Yahooファイナンス時系列仕様変更に伴う対処方法(2015/2/5)
(24)「tp12-株価比較」Yahooファイナンス詳細情報仕様変更に伴う対処方法(2015/2/19)
(25)「tp12-株価比較」Yahooファイナンス詳細情報仕様変更に伴う対処方法(2015/8/30)
(26)●シートに残っていた「クエリ関連リンク」を削除する(2015/9/07)
(27)「tp11今日の値動き」Yahooファイナンス詳細情報仕様変更に伴う対処方法(2016/2/17)(2016/3/28 一部再変更)
(28)「tp12株価比較」詳細情報仕様変更で本日の株価が取得出来ない問題の対処方法(2016/2/19)
(29)「tp12株価比較」)分割銘柄で取得不具合の場合の対処方法(2016/12/18)




(1)「tp15-多数ツールでスクリーニング」の最新日が抽出できない不具合の改善

スクリーニングを実行した場合にダイアログで指定した取得最終日が抽出対象日から漏れて いる不具合がありました。申し訳ありませんが「tp15-多数ツールでスクリーニング」を使用 する場合は以下の改善をお願いします(2009/4/16)。

***************[Module12] ************************************
【変更後】
Sub 結果記録k()

'結果取得
    Sheets("Sheet1").Select
    For i = 1 To chsu1
        If Cells(i + 3, 7) = "買い検討" Then     '+4→+3に変更
’-----------------------------------------------------------
Sub 記録貼付k()
'日付取得
    Sheets("Sheet1").Select
    For i = 1 To chsu1
        kai2(i) = " [" & i & "]" & Cells(i + 3, 1) '+4→+3に変更
    Next

【変更前】
       If Cells(i + 4, 7) = "買い検討" Then

       kai2(i) = " [" & i & "]" & Cells(i + 4, 1)

***************[Module13] ************************************
【変更後】
Sub 結果記録u()

'結果取得
    Sheets("Sheet1").Select
    For i = 1 To chsu2
        If Cells(i + 3, 7) = "売り検討" Then    '+4→+3に変更
’-----------------------------------------------------------
Sub 記録貼付u()
'日付取得
    Sheets("Sheet1").Select
    For i = 1 To chsu2
        uri2(i) = " [" & i & "]" & Cells(i + 3, 1) '+4→+3に変更
    Next

【変更前】
        If Cells(i + 4, 7) = "売り検討" Then

        uri2(i) = " [" & i & "]" & Cells(i + 4, 1)
 ▲ページトップ


(2)「tp01-ダウンロード(Yahoo)」の分割のあった銘柄でエラー発生した場合の改善

分割あった場合は時系列データにその日は株価でなく「分割の情報」が文章で入っています。配列要素の内容も通常と異なるので対処はマクロに織り込んでありますが、一部不十分で特定の日付でエラーが発生する可能性があります。分割のあった銘柄でエラーが発生した場合は以下の改善をお願いします。
なお、ダウンロードは全ツールとも同じプロシージャでありエラーが発生した場合は、申し訳けありませんがそのツールの改善もお願いします(2009/5/1)。

***************[Module1] ************************************
【変更後】
Sub 時系列貼付()

'最終セル
    cend2 = Cells(10000, 1).End(xlUp).Row + 1
    cend3 = cend2 + dsu - 1                '-1を追加

 Range(Cells(cend2, 1), Cells(cend3, 7)).Value = dat2
End Sub

【変更前】
    cend3 = cend2 + dsu
--------------------------------------------------------------------------------------------------
分割のあった銘柄でエラー発生の場合は上記改善で直ります。なお、この不具合原因をチェックしている時、別の
バグが見つかりました。以下のバグは別の箇所でガードしているので特に直さなくとも不具合は発生しませんが、
もし解析マクロを自作される場合は下記の(正)を使用して下さい。

Sub 時系列取得()プロシージャの以下箇所がミスでデータを必要以上取得しています。(全マクロ共通バグ)
(誤) dthtml = Mid$(dthtml, stchk2, chksu)
(正) dthtml = Mid$(dthtml, stchk2, chksu-stchk2)
--------------------------------------------------------------------------------------------------

tp16-鍋蓋足チャートでは下記の cend2 = が漏れていたので「グラフ不可行削除」の下に追加願います。
'グラフ不可行削除
cend2 = Cells(10000, 1).End(xlUp).Row '追加が必要です

なお他のツールでは下記の箇所にcend2 = が入っており問題ありません。
'株データ以外の行削除
cend2 = Cells(10000, 1).End(xlUp).Row
-------------------------------------------------------------------------------------------------
 ▲ページトップ


(3)「 tp12-株価比較」の市場名称「ヘラクレス」が「HCS」変更に伴う改善

市場名称はYahooファイナンスの財務指標から取得していますが、財務指標の今までの「ヘラクレス」が本日(2009/6/1)から「HCS」または「HCG」(「ヘラクレス」もあり?)に変わりました。それにともない以下のマクロ変更が必要です(2009/6/1)。

***************[Module11] ************************************
【変更後】
Sub 市場貼付け()

        ElseIf InStr(1, sizyo(1, i), "ヘラクレス") > 0 Then
            Cells(i + 1, 3) = "J"
        ElseIf InStr(1, sizyo(1, i), "HCS", 1) > 0 Then     '"HCS"を追加
            Cells(i + 1, 3) = "J"
        ElseIf InStr(1, sizyo(1, i), "HCG", 1) > 0 Then    '"HCG"を追加
            Cells(i + 1, 3) = "J"


【変更前】
ElseIf InStr(1, sizyo(1, i), "ヘラクレス") > 0 Then
            Cells(i + 1, 3) = "J"
 ▲ページトップ


(4)「 tp16-鍋蓋足チャート」の抽出銘柄が多くエラー発生ケースの改善

このマクロは1000銘柄程度の解析に使用して、抽出数はMAX400件程度を想定した内容になっています。配列の数量をMAX400にしたため抽出数が400を越えるとエラーが発生します。解析対象銘柄が多く抽出数も多くエラーになる場合は以下のように配列データMAX数を増やして下さい(2009/6/20)。

************* Module50 *****************************
【変更後】
Sub 高速解析()

'結果記録準備
ReDim kaid1(800, 10) As String  '400→800 に変更
ReDim kaid2(800, 10) As String  '400→800 に変更

'結果記録u準備
ReDim urid1(800, 10) As String  '400→800 に変更
ReDim urid2(800, 10) As String  '400→800 に変更

【変更前】
ReDim kaid1(400, 10) As String
ReDim kaid2(400, 10) As String

ReDim urid1(400, 10) As String
ReDim urid2(400, 10) As String   

************* Module51 *****************************
【変更後】
Sub 結果装飾()

Sheets("売り結果").Select
ReDim cutm(500)    '100→500 に変更

Sheets("買い結果").Select
ReDim cutm(500)    '100→500 に変更

【変更前】
ReDim cutm(100)

Sheets("買い結果").Select
ReDim cutm(100)   
 ▲ページトップ


(5)「tp01-ダウンロード(Yahoo)」月データに不具合がある場合の改善

2順目の月データ取得は、単純に-31日を前月としていましたが、場合によっては 月データが欠けるケースが考えられます。もし月が欠ける場合は以下の改善をお願いします。(2009/9/30)。

************* Module1 *****************************
【変更後】
Sub download()
 ・・・・・
'取得2
    For kaisuu = 1 To hisu
        If UserForm1.opt02.Value = True Then
            ymden = ymdst - (1 + Weekday(ymdst))
            ymdst = ymden - 320
        ElseIf UserForm1.opt03.Value = True Then
            ymden = ymdst - (Day(ymdst) + 3)       '元ymden = ymdst - 31
            ymdst = ymden - 1200
        Else

【変更前】
             ymden = ymdst - 31


(6)「 tp16-鍋蓋足チャート」の抽出時の参考落下率の表示改善方法

抽出された時に「■・・%」のように10日前の株価と比較したダウン率(売りはアップ率)を表示していますが、この場合最近の高値からのダウン率が表示していない欠点がありました。しがって1日〜10日前の終値最高値からのダウン率表示(売りは終値最安値からのアップ率)にか変えた方が有効と思われるので改善方法を以下に示します。(2009/11/02)。

************* Module50 *****************************
【変更後】
Sub 結果保存()

    If Cells(ukr, 7) = "買い検討" Then
        kdatm = 1
        maxd = Application.Max(Range(Cells(ukr, 6), Cells(ukr + 10, 6)))  '追加
        ritu = (Cells(ukr, 6) - maxd) / maxd * 100              '追加
        
        'ritu = (Cells(ukr, 6) - Cells(ukr + 10, 6)) / Cells(ukr + 10, 6) * 100  '削除

・・・・・・

    If Cells(ukr, 7) = "売り検討" Then
        udatm = 1
        mind = Application.Min(Range(Cells(ukr, 6), Cells(ukr + 10, 6)))   '追加
        ritu = (Cells(ukr, 6) - mind) / mind * 100               '追加
        
       ' ritu = (Cells(ukr, 6) - Cells(ukr + 10, 6)) / Cells(ukr + 10, 6) * 100 '削除


【変更前】
    ritu = (Cells(ukr, 6) - Cells(ukr + 10, 6)) / Cells(ukr + 10, 6) * 100

         ritu = (Cells(ukr, 6) - Cells(ukr + 10, 6)) / Cells(ukr + 10, 6) * 100

 ▲ページトップ


(7)「tp01-ダウンロード(Yahoo)」コード番号手入力で銘柄名を表示できるように改善

コード番号の4文字数字を手入力で、下記改善前のようにコード番号と社名が表示されない不具合が有りました(2009/12/02)
改善前:「コード【】 銘柄「」のダウンロード」
改善後:「コード【5401】 銘柄「新日本製鐵」のダウンロード」

この不具合は全ツール共通で、エラー発生等の問題はありませんが、コード番号で銘柄も表示したい場合は改善して下さい。

************* Module1 *****************************
【変更後】
Public meino As String   '銘柄コード


【変更前】
Dim meino As String   '銘柄コード

 ▲ページトップ


(8)Excel2003で作成の第2軸チャートが2007では逆表示になる件を直すマクロ

以下のマクロを追加でExcel2007でも第2軸データは正常なチャート表示となります(2010/08/17)。

************* Module2〜9 (各解析ツール) *****************************
【変更後】
'軸の反転 (前の方にあるので切り取ってこの場所へ貼り付け)
  With ActiveChart.Axes(xlCategory)
        .AxisBetweenCategories = True
        .ReversePlotOrder = True
    End With

'バグ対応の以下6行を追加
Dim evrb As Integer   
    evra = Application.Version
    evrb = Val(Left(evra, 2))
If evrb > 11 Then
    Call bug2007
End If

Application.StatusBar = "-- チャート作成完了 -- " ’各ツールのこの行の前に追加
ActiveSheet.Protect DrawingObjects:=True

’---------------------------------------------------------------
Sub bug2007()
'バグ改善プロシージャ追加
 ActiveChart.SetElement (msoElementSecondaryCategoryAxisReverse)
 ActiveChart.SetElement (msoElementSecondaryCategoryAxisNone)
End Sub


【変更前】
・・・・・・・軸の反転は前の方に記述があるので切り取ってこの場所へ貼り付け)
・・・・・・・ バグ対応 ステートメントはなしで今回追加 ・・・・・

Application.StatusBar = "-- チャート作成完了 -- " ’各ツールのこの行の前に追加
ActiveSheet.Protect DrawingObjects:=True             ’上記がないツールはこの行の前に追加

’---------------------------------------------------------------
End Sub 
・・・・・・・ バグ改善プロシージャ「bug2007()」はなし ・・・・・・・
(チャート作成マクロのどのEnd Sub の後ろに追加でもOK)

Sub bug2007()プロシージャは上記ですが、tpk02-ローソク足は下記にして下さい。

***** Module2(tpk02-ローソク足) *****
Sub bug2007()
If heikin = 1 Then
       Exit Sub
End If
 ActiveChart.SetElement (msoElementSecondaryCategoryAxisReverse)
 ActiveChart.SetElement (msoElementSecondaryCategoryAxisNone)
End Sub

「tp13k-多数を1ツールで解析」「tp14k-指定銘柄を9ツールで解析」は各ツールに前述のバグ対応を折り込むこと。
ただし、bug2007()プロシージャはどこかの1モジュールに1個記載があればよい。

なお、「移動平均」ツールは第2軸非表示が漏れていたので下記にDeleteメソッドを追加のこと
'右縦列文字調整(第2軸 xlSecondary側)
With ActiveChart.Axes(xlValue, xlSecondary)
.MaximumScale = max1
.MinimumScale = min1
.Delete            ’追加(tpk03にはあります)
End With

今回の第2軸チャート不具合と関係ありませんが、「tp10-一目均衡表」で日付が斜め文字になります。
2003と同じように縦表示にする場合は下記を追加して下さい(他のツールは既に日付表示指定が入っています)
'下列文字調整 '2007で追加
With ActiveChart.Axes(xlCategory).TickLabels
.Font.Size = 8
.NumberFormatLocal = "mm/dd"
.Orientation = xlDownward
End With

' デ−タのない個所はプロットしない
ActiveChart.DisplayBlanksAs = xlNotPlotted
マニュアルの対処方法はこちらにあります⇒ 2007の第2軸対処方法

 ▲ページトップ


(9)「tp11-今日の値動き」のデータフォーム仕様変更に伴う対処方法

銘柄リストにYagooファイナンスに無い銘柄があった場合、図1から図2へ掲載フォームが変わりました。(2011/05/06気がついた)。

図1:変更前の掲載フォーム

左図の、23行〜27行が不一致銘柄データ

【変更前マクロ】
If sheetn = "今日の値動き" Then
    If InStr(1, hdat(ib + 1), " ") = 0 Then
        dat2(dsu, 7) = ""
        dat2(dsu, 8) = ""
        dat2(dsu, 9) = ""
        ib = ib - 5
    End If
Else
     ・・・・・・・・・・
        ib = ib - 5
    End If
End If


図2:新しい掲載フォーム

左図の、23行24行が不一致銘柄データ
【変更後マクロ】
If sheetn = "今日の値動き" Then
    If InStr(1, hdat(ib + 1), " ") = 0 Then
        dat2(dsu, 7) = ""
        dat2(dsu, 8) = ""
        dat2(dsu, 9) = ""
        ib = ib - 8          '5→8に変更
    End If
Else
     ・・・・・・・・・・
        ib = ib - 8          '5→8に変更
    End If
End If

変更内容の説明:
図1図2とも23行(実際のマクロでは配番号になる)で不具合検出は同じです。
図1の場合は23-5+12=30となり30行から新しいデータを取得します。図2の場合は23-8+12=27となり27行から新しいデータを取得します。
この12の意味が判りづらいと思いますが、データが1銘柄12行でありFor・・Step12でスタート行が12個飛びになっています。

 ▲ページトップ


(10)「tp16-鍋蓋足チャート」の下項目の日付表示位置場所の改善方法

Nexce2007対応になっていましたが、Excel2010未対応でした(2012/06/10気がついた)。


************* Module50 *****************************
【変更後】
Sub txt文字()
    With ActiveSheet.TextBoxes(txname)
        If evrb > 11 Then          ’Excel2007以降に適用
            .VerticalAlignment = xlCenter
        Else
            .VerticalAlignment = xlTop
        End If


【変更前】
Sub txt文字()
    With ActiveSheet.TextBoxes(txname)
        If evrb = 12 Then
            .VerticalAlignment = xlCenter
        Else
            .VerticalAlignment = xlTop
        End If
 ▲ページトップ

【ホーム】