2012年1月3日火曜日

景気の波12 - 最終回


今回で景気の波についての報告を終了する。

まず私の仮説から。


  • 大きな相場変動期には、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 件のコメント:

コメントを投稿