2011年12月31日土曜日

景気の波10-IndexSimulator


■GraphControll バージョンアップ

グラフコントロールをバージョンアップした。

今までは、日付(x軸)のスクロールしかできなかったが、
グラフコントロールフォームに左右に垂直スクロールバーを設け、
Y軸をスクロールできるようにした。

今までは、グラフ表示範囲から外れると、パラメタを修正して、再描画するしかなかったが、垂直スクロールバーを設けることで、より、グラフのハンドリングが良くなったので、報告する。


-------------------------------------------------------------------------------------------------------------
※2015/12/5よりIndexSimulator は改定を重ね、新ソフトウェアStockFinderとして再リリースした。
再リリースの主な項目は以下の通りであるが、コードのほとんどを書き直したため、高速化するとともに、操作性も全く別のものに改善された。
1)チャートワークシート、インターネットデータ取得シートを本体ソフトウエアからの分離による、ファイルの肥大化防止。
2)指標連動性の分析機能追加



概要紹介ページ
http://katsuyama-shin.blogspot.jp/2015/12/stockfinder.html
公開ページ
http://www.vector.co.jp/soft/winnt/business/se511919.html

2011年12月30日金曜日

景気の波09


IndexSimulator03-RSI

銘柄や期間により、適した指標が異なるようである。

■RSI
今回はRSI指標の取り扱い及び運用設定を説明する。

  • RSI指標の簡単な説明

設定した期間の株価の前日比の総計に対して、上げ幅の総計がどれだけあるかを算出する。
RSIの数値は0%から100%の範囲で変動するように設定された指標である。
そのなかで、RSI値が高いときには、相場が頂点に近く、低いときは底値に近いと読むように設定されている。

  • この際、執行ボーダーラインについて、一つの数値で、プラスマイナスで指定できるように、RSI指標は、-100%~+100%の間で変動するように数値を調整している。
  • 下記パラメタはユーザーの判断にゆだねられている。


  1. 執行ボーダーライン:RSI値がどの程度高いときに、どの程度低いときに執行するか。
  2. 執行比率:所有資産のうち、執行に回す割合。
  3. RSI期間:RSI算出のためにデータを採用する期間。


■各種パラメタ設定方法

計算時に設定するDataシート上の各種パラメタを説明する。計算結果に影響を与えるためには、パラメタ変更後に[計算]ボタンを押す必要がある。

RSI専用のパラメタ

  • R_Border:執行するボーダーラインを%絶対値で指定 +R_Borderを超えたら売り、-R_Borderを下回ったら買い執行
  • R_Rate:執行する際に運用する、買付買力や持ち株数に対する比率を指定する。100%のときは、持っている資金や株をすべて執行に回すこととなる。
  • R_Span:RSI指標を算出するのに使用する株価データの期間。決まりはないが、通常は14が採用されているようた。

 

パラメタの設定

共通的パラメタ

  • 元株数:スタート時に保有している株式数を設定する。(0は不可。)
  • 元手:スタート時の買付買力を設定する。(0の時は買い執行ができない。)
  • 取引単位:株式取引単位を設定(銘柄により決められている。100株単位など、自然数で指定)
  • P_Weight:PhaseIndexへの重み付け(合算比率) ⇒ここでは、0%と指定
  • C_Weight:ChangeIndexへの重み付け(合算比率)⇒ここでは、0%と指定
  • R_Weight:RSIへの重み付け(合算比率)⇒ここでは、100%と指定
  • GraphSpah:株価Index と 資産Index を何行前のデータの比率からの変化とするか、指定(グラフ表示行数と一致させれば、グラフの左端が0となり、運用成績が見やすくなる。)



RSI算出には直接関係のないパラメタ

  • LongSpan:長期移動平均の採用行数  ⇒グラフには表示可能。
  • ShortSpah:短期移動平均の採用行数 ⇒グラフには表示可能。



パラメタの設定


■RSI指標は実際どうなのか。


  • 銘柄コード8933のRSI指標による運用結果を見てみる。



  • 今年を見てみると、運用成績が良いように見える。しかし、たまたま、東日本大震災前に手仕舞っていたため、その被害を受けず、震災で下げた株を買っているため、成績が良くなっている。たまたまの運と考えた方が良いだろう。




  • 2009年後半~2010年前半を見てみると、RSI指標を活用しても、運用成績が良くなっていない。
  • RSIのグラフの変化をみて、売り買いする技術もあるようだが、本シミュレーターでは、高度な判断は取り入れていない。



■以下Excel VBAコード
'CCRは計算日を表示している行番号
'--------------------------------------------------------------------------------------------------
'・RSI指標算出コード
Function my_RsiIndex(ByVal CCR As Long) As Single '-----------------RSIインデックスを算出 最大を100% 最少を-100%となるように調整
   With Worksheets("Data")
        Dim EndPriceCol As Integer:                 EndPriceCol = .Range("終値").Column  '終値が記載されている桁番号
        Dim RsiDate As Long:                        RsiDate = .Range("R_Span").Value   'ユーザーが指定する計算期間
        Dim A As Long, B As Long
        Dim n As Long, ChangePrice As Long
        'まず計算可能か判定?
        If Cells(CCR, EndPriceCol).Value = 0 Then Exit Function
        If Len(Trim(Cells(CCR + RsiDate - 1, EndPriceCol).Value)) = 0 Then Exit Function  '検証データが未入力のとき、脱出
        A = 0: B = 0
        For n = 0 To RsiDate - 1
            ChangePrice = Cells(CCR + n, EndPriceCol).Value - Cells(CCR + n + 1, EndPriceCol).Value '終値の前日比を算出
            If ChangePrice > 0 Then A = A + ChangePrice '値上がりのときの値動きを加算
            If ChangePrice < 0 Then B = B - ChangePrice '値下がりのときの値動きを加算
        Next
        If (A + B) = 0 Then '一定期間中の変動幅がゼロのとき
            my_RsiIndex = 0 'RSIはゼロとする。(ゼロでの除算を避けるため)
        Else        'そうでなければ、
            my_RsiIndex = A / (A + B) * 2 - 1 '普通にRSI指標を算出。二倍して1を引くのは、0%~100%の数値の幅を-100%~100%の幅に変換するため
        End If
    End With
End Function


'--------------------------------------------------------------------------------------------------


'--------------------------------------------------------------------------------------------------
'・RSIによる運用コード
Function my_rTrade(ByVal CCR As Long, _
                    ByVal IndexCol As Integer, _ 'RSI指標の表示されているセルの桁番号
                    ByVal StocksCol As Integer, _ '保有株数登録セルの桁番号
                    ByVal CashCol As Integer, _     '買付買力登録セルの桁番号
                    ByVal Border As Single, _      'ボーダーは、ユーザー指定する値を参照
                    ByVal Rate As Single) As Long    '運用比率は、ユーザー指定する値を参照


    With Worksheets("Data")
        If Rate = 0 Then Exit Function
        Dim EndPriceCol As Integer:                 EndPriceCol = .Range("終値").Column
        Dim Slope(5) As Single, n As Integer
        Dim SellFlg As Boolean, BuyFlg As Boolean
        Dim RSI As Single
                
        RSI = Cells(CCR + 1, IndexCol).Value  '昨日のRSI指標を参照 (本日のRSI指標はまだ存在しない。CCRは計算日の行)


        If RSI > Border Then SellFlg = True  '指標がプラスボーダーラインを超えるときに売り
        If RSI < -Border Then BuyFlg = True   '指標がマイナスボーダーラインを下回るときに買い


        my_rTrade = my_TRADE(CCR, StocksCol, CashCol, SellFlg, BuyFlg, Rate) '売り、買い、運用比率に基づいて執行
    End With
End Function
'--------------------------------------------------------------------------------------------------


'--------------------------------------------------------------------------------------------------
'・運用ファンクション 取引株数を求める。(各指標共通)
Function my_TRADE(ByVal CCR As Long, _
                    ByVal StocksCol As Integer, _
                    ByVal CashCol As Integer, _
                    ByVal SellFlg As Boolean, _
                    ByVal BuyFlg As Boolean, _
                    ByVal Rate As Single) As Long '売買数量算出
    With ThisWorkbook.Worksheets("Data")
        Dim myTradingUnit As Integer:   myTradingUnit = .Range("TradingUnit").Value '売買株式単位(銘柄により異なる。)
        Dim EndPriceCol As Integer:     EndPriceCol = .Range("終値").Column '終値表示桁番号
    End With
    
        If myTradingUnit = 0 Then myTradingUnit = 1
        If SellFlg Then my_TRADE = my_TRADE - Int(Cells(CCR + 1, StocksCol).Value * Rate / _
                                                myTradingUnit) * myTradingUnit '売り株数算出
        If BuyFlg Then my_TRADE = my_TRADE + Int(Cells(CCR + 1, CashCol).Value / _
                                         (Cells(CCR, EndPriceCol).Value * myTradingUnit) * Rate) * myTradingUnit '買い株数算出
End Function

※RSI指標の算出方法は、『テクニカル指標の読み方・使い方』(伊藤智洋著 日本実業出版社刊)を参考にした。





-------------------------------------------------------------------------------------------------------------
※2015/12/5よりIndexSimulator は改定を重ね、新ソフトウェアStockFinderとして再リリースした。
再リリースの主な項目は以下の通りであるが、コードのほとんどを書き直したため、高速化するとともに、操作性も全く別のものに改善された。
1)チャートワークシート、インターネットデータ取得シートを本体ソフトウエアからの分離による、ファイルの肥大化防止。
2)指標連動性の分析機能追加



概要紹介ページ
http://katsuyama-shin.blogspot.jp/2015/12/stockfinder.html
公開ページ
http://www.vector.co.jp/soft/winnt/business/se511919.html

 

2011年12月27日火曜日

景気の波08-IndexSimulator02


■グラフコントロールの使用方法

今回は、グラフコントロールの使用方法を説明する。グラフ表示のハンドリングにこだわり作成した。この機能だけでも、このツールの価値があると思っている。ぜひ、ダウンロードして、活用してもらいたい。

1)Graphシートをアクティブにすると、グラフが自動表示される。
※"アクティブにする"とは、「入力可能にする」という意味。シートの場合は、開くということ。



グラフコントロールフォーム

2)グラフ採用データの指定。

  • グラフのX軸は日付、Y軸は、Dataシートの各項目値から最大6種類選択できる。
  • 指定方法は、GraphシートのB~G列の1行目にマウスカーソルを当てると、選択可能な項目値のリストがプルダウンで表示される。
  • 項目名にIndex がある場合は右軸(%値) 、ない場合は左軸(円)が値を示す。


3)ボタン

  • [再読込み]:GraphシートのB~G列の1行目の指定により、Dataシートからデータを転記
  • [表示パラメタリセット]:グラフコントロールの下方にある、InputBoxの値を空にする。
  • [グラフ再描画]:読込まれたデータ、パラメタにより、グラフを再描画する。


4)PhaseIndex   ChangeIndex   RSI Index

  • Dataシートの運用計算が、位相 変化 RSI の各指標への重みづけを表示。このフォームで指定できません。指定しなおすためには、Dataシートの黄色に塗られたセルで指定してから、再度計算する必要がある。


5)InputBox

  • 表示期間:グラフ表示幅(日数or行数)を指定。250日で約一年。
  • 価格軸:価格軸に表示する数値の最大値、最小値を指定
  • Index軸:Index軸に表示する数値の最大値、最小値を%で指定
  • グラフ貼付範囲セル:グラフを貼り付けるセルの範囲を指定。この欄を空欄にすると、グラフ描画の際、マウスで、表示セル範囲を対角線で指定することができる。


※表示期間は、DataシートのGraphSpanの値と一致させると、グラフの左端が基準となって、株価Index・資産Indexの変化を確認することができる。

6)スクロールバー

  • 株価データのある範囲で、グラフを左右にスクロールさせることができる。右にバーを移動させると、グラフ全体が右に移動して、グラフの左端に隠れていたデータが表示される。


7)表示終了

  • Dataシートなど、他のシートをアクティブにすると、グラフ表示終了する。


8)その他

  • Graphシートはグラフを表示するだけであり、計算は、Dataシートで実行する必要がある。

-------------------------------------------------------------------------------------------------------------
※2015/12/5よりIndexSimulator は改定を重ね、新ソフトウェアStockFinderとして再リリースした。
再リリースの主な項目は以下の通りであるが、コードのほとんどを書き直したため、高速化するとともに、操作性も全く別のものに改善された。
1)チャートワークシート、インターネットデータ取得シートを本体ソフトウエアからの分離による、ファイルの肥大化防止。
2)指標連動性の分析機能追加



概要紹介ページ
http://katsuyama-shin.blogspot.jp/2015/12/stockfinder.html
公開ページ
http://www.vector.co.jp/soft/winnt/business/se511919.html
 


 

2011年12月25日日曜日

景気の波07-IndexSimulator 01

前回から随分と、時間が経ってしまった。

今回、過去の株価データについて、各種指標がどのような値を示してきているか、シミュレートするソフトを作成したので、公開することとした。

OFFICE-KATSUYAMA IndexSimulator で検索してみてほしい。おそらく、年明けころから、ダウンロード可能になると思う。


結論から言えることは、 

指標頼りの投資では、大きな利益を上げることはできない
というとだ。



・長期にわたる上げ局面では、指標頼みとするよりも、同じ株を持ち続けていた方がよい。


上げ局面での運用成績


・長期にわたる下げ局面では、同じ株を持ち続けるよりも損失を幾分か抑えることはできるが、損失は免れない。

下げ局面での運用成績


であれば、配当利率の高い株を安いときに買って、持ち続けることがもっとも利益を上げるコツと思われる。

したがって、長期の上げ局面では、株を保持したままとし、長期の下げ局面では、株を現金化した方が、よい。ということだ。

ただ、長期の上げ局面なのか、下げ局面なのかは、しばらくたってからでないとわからないということが、困難なところである。

以下に、IndexSimulatorの簡単な説明をする。

IndexSimulatorは、

Ⅰ.株価データ、Indexの計算結果をグラフ表示する。

IndexSimulator Graphシート


Ⅱ.複数の銘柄の株価データを扱い、各種Indexのパラメタを調整して、シミュレート

Dataシート この画面で、各種Indexのパラメタをセットし、計算する。株価データは別シートから読み込んで使用する。


Ⅲ.インターネットの株式サイトからデータをコピペで取込。

①MSN Japan の株式情報を利用

②ほしい銘柄のページを開く

③時系列データを表示


④時系列データをコピー

⑤ペーストボタンを押して、銘柄名を指定

⑥データがペーストされたら、センドボタンを押す。


⑦Dataシートに株価データが送られる。

MSN の株式情報 時系列データからデータをコピー&ペーストそして、データシートにセンド

今回は、ここまで。次回以降に、各Indexのパラメタ設定方法等を細かく説明する。


-------------------------------------------------------------------------------------------------------------
※2015/12/5よりIndexSimulator は改定を重ね、新ソフトウェアStockFinderとして再リリースした。
再リリースの主な項目は以下の通りであるが、コードのほとんどを書き直したため、高速化するとともに、操作性も全く別のものに改善された。
1)チャートワークシート、インターネットデータ取得シートを本体ソフトウエアからの分離による、ファイルの肥大化防止。
2)指標連動性の分析機能追加



概要紹介ページ
http://katsuyama-shin.blogspot.jp/2015/12/stockfinder.html
公開ページ
http://www.vector.co.jp/soft/winnt/business/se511919.html