IndexSimulator03-RSI
銘柄や期間により、適した指標が異なるようである。
■RSI
今回はRSI指標の取り扱い及び運用設定を説明する。
- RSI指標の簡単な説明
設定した期間の株価の前日比の総計に対して、上げ幅の総計がどれだけあるかを算出する。
RSIの数値は0%から100%の範囲で変動するように設定された指標である。
そのなかで、RSI値が高いときには、相場が頂点に近く、低いときは底値に近いと読むように設定されている。
- この際、執行ボーダーラインについて、一つの数値で、プラスマイナスで指定できるように、RSI指標は、-100%~+100%の間で変動するように数値を調整している。
- 下記パラメタはユーザーの判断にゆだねられている。
- 執行ボーダーライン:RSI値がどの程度高いときに、どの程度低いときに執行するか。
- 執行比率:所有資産のうち、執行に回す割合。
- 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
0 件のコメント:
コメントを投稿