今回で景気の波についての報告を終了する。
まず私の仮説から。
- 大きな相場変動期には、ChangeIndexが有効。相場の頂点を見極めて、手仕舞いを厳格に実行する。
- 停滞期にはRSIが有効。ChangeIndexの成績が顕著になってきたら、上昇期突入のサインととらえ、運用手法を切り替える。
以下に、Phase Change RSI の各指標による運用成績をグラフ化したので、掲載する。いずれも日付の幅は約2年間である。
①上昇の始まり
②頂点を付けた後
③下げ止まり
④停滞期
- あくまで、仮説であり、銘柄や、時期、設定パラメタなど無限の可能性があるため、その通りになるとは限らない。運用はあくまで、各自の責任で行わなければならない。
- 過去のデータを用いているだけであり、未来の株価に適用できる保障はない。
- PhaseIndexは相場の動きが激しいときには、ついていけない。停滞期はRSIに負ける。
以下にPhaseIndexのコードを記す。コードを改変することにより、(運用成績とは別に)独自の指標が作れる。
'-------------------位相算出
Function my_PhaseIndex(ByVal CCR As Long) As Single
' Application.Volatile
With Worksheets("Data")
Dim EndPriceCol As Integer: EndPriceCol = .Range("終値").Column
Dim P_Span As Integer: P_Span = .Range("P_Span").Value
Dim ShortSpan As Integer: ShortSpan = .Range("ShortSpan").Value
Dim LongMACol As Integer: LongMACol = .Range("長期移動平均").Column
Dim ShortMACol As Integer: ShortMACol = .Range("短期移動平均").Column
Dim LBC As Integer 'LBC:LookBackCell
Dim Up As Single, Lp As Single, Bp As Single, Mp As Single 'Up期間中の高値 Lp 期間中の低値 Mp期間中の中央値
Dim Col As Integer '列番号
'計算可能か?
Col = ShortMACol '採用するデータは短い移動平均である。
If Len(Trim(Cells(CCR + P_Span, Col).Value)) = 0 Then Exit Function 'データ未入力⇒脱出
Bp = Cells(CCR, Col).Value: Up = Cells(CCR + 1, Col).Value: Lp = Cells(CCR + 1, Col).Value '現在の終値を Bp Up Lp には直前の値をセット
For LBC = P_Span To 1 Step -1 '期間中の最大値Up 最小値Lpを求める。
'期間に本日は含めない。
If Cells(CCR + LBC, Col).Value > Up Then Up = Cells(CCR + LBC, Col).Value
If Cells(CCR + LBC, Col).Value < Lp Then Lp = Cells(CCR + LBC, Col).Value
Next
Mp = (Up + Lp) / 2 'Mp は中央値
If (Bp - Mp) > 0 Then
my_PhaseIndex = (Bp - Mp) / (Up - Mp)
ElseIf (Lp - Mp) <> 0 Then
my_PhaseIndex = -(Bp - Mp) / (Lp - Mp)
End If
End With
End Function
'--------------Indexによる取引決定----------
Function my_pTrade(ByVal CCR As Long, _
ByVal IndexCol As Integer, _
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 Long: EndPriceCol = .Range("終値").Column
Dim Phase(5) As Single
Dim Slope(5) As Single, n As Integer
Dim DPh(5) As Single
Dim SellFlg As Boolean, BuyFlg As Boolean
Flg1:
If Cells(CCR + 2, IndexCol).Value = 0 Then Exit Function 'データ未入力⇒脱出
For n = 1 To 5 '当日の終値は未入手なので、採用しない。
Phase(n) = Cells(CCR + n, IndexCol).Value
Slope(n) = Cells(CCR + n, IndexCol).Value - Cells(CCR + n + 1, IndexCol).Value
Next n
For n = 1 To StartRow
DPh(n) = Slope(n) - Slope(n + 1)
Next n
'----------勾配が緩くなってきたら売る。(のぼり勾配であっても、手仕舞い)
If (Phase(1) < Border And Phase(1) > 0) And DPh(1) < DPh(2) And DPh(2) < DPh(3) And DPh(3) < DPh(4) Then SellFlg = True
'----------勾配が緩くなってきたら買い。(下り勾配であっても、買い)
If (Phase(1) > -Border And Phase(1) < 0) And DPh(1) > DPh(2) And DPh(2) > DPh(3) And DPh(3) > DPh(4) Then BuyFlg = True
'
'位相による取引 ボーダーをまたいでいるときに取引を実施
If Border < Phase(2) And Border > Phase(1) Then SellFlg = True
If -Border > Phase(2) And -Border < Phase(1) Then BuyFlg = True
'だましを排除
'If (Phase(2) < Border) And (Slope(2) < 0 And Slope(1) > 0) Then BuyFlg = True
'ボーダーより低いところで底を形成
'If (Phase(2) > -Border) And (Slope(2) > 0 And Slope(1) < 0) Then SellFlg = True
'ボーダーより高いところで頂点を形成
'---------------------------------------------------
my_pTrade = my_TRADE(CCR, StocksCol, CashCol, SellFlg, BuyFlg, Rate)
End With
End Function
-------------------------------------------------------------------------------------------------------------
※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 件のコメント:
コメントを投稿