アプリ(中級)
| アプリ(入門) | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


ホーム > Tips > Excel(マクロ, VBA)

シェアウエアでストラテジーサンプルを公開する

更新 : 2008/xx05/04

 



解説:
シェアウエアの検証ソフトで各テクニカル指標を使った、ストラテジーのサンプル(条件式)を公開する。これはライセンスキーを購入した人にだけ行うサポートだ。
株価取得->テクニカル指標作成->ストラテジー記述(ここでサンプルを参考にしてもらう)->検証。

各テクニカル指標で考えつくストラテジー:
・SMA
株価と移動平均線のクロス
株価と高値/安値移動平均線のクロス(チャネルシステム)
終値と移動平均線の乖離率
移動平均線2本のクロス
移動平均線2本の乖離率

・EMA


・RSI
RSIのクロス


xxxRSI
は、今の相場が強弱どちらに傾いているかを調べ、買われ過ぎ売られ過ぎを表す指標です。計算方法は、(期間内の値上がり幅の合計)÷(期間内の値上がり幅の合計+期間内の値下がり幅の合計)×100(%)で求まります。まとめて計算すると分かりづらいので、値上がり幅の合計と値下がり幅の合計を一度セルに格納して、それから RSI を計算します。

まず値上がり幅は  =IF(E4>E5,E4-E5,0) となり、セル G4 に代入します。値下がり幅は、セル H4 に =IF(E4<E5,E5-E4,0) と代入します。この値をもとに、期間 5日のRSI であれば  =AVERAGE(G4:G8)/(AVERAGE(G4:G8)+AVERAGE(H4:H8))*100 で算出します。これはセル I4 に代入しておきます。次にセルを必要行分コピー(コピーの仕方はこちら)しておきます。
RSI の算出が済んだら、ストラテジーを記述します。

(例 1)
最初はよく使われるストラテジーからです。セル J4 に =IF(I4<30,1,IF(I4>70,-1,0)) と代入します。これは、RSI の値(セル
I4)が 30 より小さくなったら買い、70 より大きくなった売る、という意味です。0 は買いでも売りでもなくそのまま(前日の売買シグナルと同じ)を意味します。

(例 2)
ふたつ目もよく使われます。30 を上抜けたら買い、70 を下抜けたら売り、というものです。セル K4に、 =IF(AND(I4>I5,I5<30),1,IF(AND(I4<I5,I5>70),-1,0)) と代入します。

RSI は一般に、70〜80 以上を売り、20〜30 以下を買いとされていますが、いろいろな数値を試してみるといいと思います。

使用例:
(例 1)の条件式を VBA で書いて見ます(マクロの記述方法はこちら)。

Sub Macro5()

    Dim i As Integer
    Dim up As Double
    Dim down As Double

    For i = 29 To 4 Step -1
        '値上げ幅
        If Cells(i, 5) > Cells(i + 1, 5) Then
            Cells(i, 12) = Cells(i, 5) - Cells(i + 1, 5)
        Else
            Cells(i, 12) = 0
        End If

        '値下げ幅
        If Cells(i, 5) < Cells(i + 1, 5) Then
            Cells(i, 13) = Cells(i + 1, 5) - Cells(i, 5)
        Else
            Cells(i, 13) = 0
        End If
    Next

    For i = 25 To 4 Step -1

        up = WorksheetFunction.Average(Range(Cells(i, 7), Cells(i + 4, 7)))
        down = WorksheetFunction.Average(Range(Cells(i, 8), Cells(i + 4, 8)))
        Cells(i, 14) = up / (up + down) * 100

        If Cells(i, 14) < 30 Then
            Cells(i, 15) = 1
        Else
            If Cells(i, 14) > 70 Then
                Cells(i, 15) = -1
            Else
                '買いでも売りでもない(そのまま)
                Cells(i, 15) = 0
            End If
        End If

    Next

    'セルの形式を整える
    Range(Cells(4, 14), Cells(30, 14)).NumberFormatLocal = "0.00_ "
   
End Sub

バックテストする場合、RSI の数値をいろいろ変える必要があります。VBA ならそう手間ではありません(作り方にもよります )が、セルを直接修正するのは、時間もかかるし、間違いやすくもあります。テストの信憑性にも関わってきますので(今後のことも考えて)、ぜひVBA に慣れておくことをお勧めします。



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.