ITickerによるテクニカル分析検証例

ITickerのダウンロード

三点チャージ

はらみ線

チャネルブレイクアウト

曜日と株価

ゴールデンクロスとデッドクロス

検証:3点チャージ法
乖離率、ボリュームレシオ、RSIの3つを組み合わせて相場の転換時期を感知しようとする考え方です。
[3点チャージシグナルの一例]
  • 買シグナル:乖離率(26日) < -15、RSI(14日) < 25、VR(25日) < 70 
  • 売シグナル:乖離率(26日) > 15、RSI(14日) > 75、VR(25日) > 250
検索例
「買シグナル:乖離率(26日) ≦ -15、RSI(14日) ≦ 25、VR(25日) ≦ 70」条件で行った検索の一例です。


シミュレーション例
[ウィザードでの設定例]
ITickerではウィザードを使って各項目を設定するだけで様々なシミュレーションを簡単に行うことが出来ます。
また、ユーザ定義でユーザ独自の判定条件を定義・設定することができます。
下図は3点チャージの設定例です。


上記設定を実行させた場合のチャート例です。
ウィザードのバックテストはシグナルが出た翌営業日の始値で売買を行います。


[スクリプトの作成例]
ウィザードを使用しないで、ユーザがスクリプトを作成して様々な処理を行うことも出来ます。
ITickerのヘルプファイルにも3点チャージのサンプルスクリプトを載せていますが、ここでの例はそれと機能はほとんど同じです。ただ、こちらではローソクや出来高棒グラフなどはスクリプトからは作画しておらず、また、最後に簡単な売買シミュレーションの結果を表示するようにしています。
  • 売買ルールは以下の様にしています。
    • 3点チャージ買いシグナルが出た場合、その翌日の始値で買い、20日後の始値で売却
    • 3点チャージ売りシグナルが出た場合、その翌日の始値で売りから入り、20日後の始値で買い戻し
  • 各指標とシグナルの条件は以下の様にしています。
    • 買シグナル:乖離率(26日) < -15、RSI(14日) < 25、VR(25日) < 70 
    • 売シグナル:乖離率(26日) > 15、RSI(14日) > 75、VR(25日) > 250
  • 各指標を作画・マーキングし、3点チャージのマーキングを行います。
  • 売買した場合の取引値・日をラインで表示します。(利益時は緑線、損した時は赤線)
  • 最後に売買記録をダイアログで表示します。

こういった検証の場合、シグナルが出た後の反対売買のやり方によっても成績が大きく異なります。ここでは単純に20日後に反対売買を行っているだけです。ロスカットやルール変更・追加等、後は皆さんの工夫次第です。

◎以下のような操作を行えば、下記サンプルスクリプトがそのまま実行出来ます。
  1. マウスで「'//スクリプト開始」〜「'//スクリプト終わり」までを選択
  2. 右クリック→コピー(C)でクリップボードにコピー
  3. メモ帳などのテキストエディターに貼り付け
  4. 名前はなんでも構いませんが、拡張子を必ずitcにして保存。
    (*メモ帳で保存する場合は、ファイルの種類を必ず「すべてのファイル」に指定して拡張子itcを付けて保存して下さい。)
  5. ITickerからチャートを開き、をクリック。
  6. 選択のダイアログから保存したファイルを選択。
'//スクリプト開始
Option Explicit '変数の明示的な宣言を強制

'//////////////////////
'// 関数の定義
'//
'売買取引のライン引き、差額を返す
Function Trade(i0, i1, pL, hC)
    Dim x0, x1, y0, y1
    Dim col
    x0 = ITGetXPixelFromIndex(i0)
    y0 = hC.GetOpen(i0)
    x1 = ITGetXPixelFromIndex(i1)
    y1 = hC.GetOpen(i1)

    Trade = Round(y1 - y0, 3)

    If Trade > 0 Then
        col = RGB(0,196,0)
    ElseIf Trade < 0 Then
        col = RGB(255,0,0)
    Else
        col = RGB(0,0,255)
    End if
    '取引のライン引き
    pL.SetCnd ITAreaStock, ITStyleSolid, 2, ITModeCopypen
    pL.SetData x0, y0, x1, y1, True, col
End Function

'////////////////////////////
'// オブジェクト・変数の設定
'//
'テクニカル計算、チャート作成用
Dim penAve ,penKairi ,penRsi, penVr
Dim markKairi, markRsi, markVr, mark3
Dim hChart
Dim colBuy, colSell
Dim aMark, aData, aSell, aBuy
colBuy = RGB(191,191,127)
colSell = RGB(191,191,255)

'売買検証用
Dim index
Dim fRecord
Dim strLog
Dim sum, diff
Dim cntWin, cntEven, cntLoss
Dim cntLine 'ライン線数の判定用
Const LINE_MAX = 200 'ライン線の最大数を設定
Const HOLD_TERM = 20 '売買期間の設定

'「ITCreateObjStdPen」はスクリプト内で一回しか設定できません。
ITCreateObjStdPen 8
Set penAve= ITObjStdPen(0) '平均線
Set penKairi= ITObjStdPen(1) '乖離率
Set penRsi= ITObjStdPen(2) 'RSI
Set penVr = ITObjStdPen(3) 'VR
Set markKairi = ITObjStdPen(4) 'kairiマーク
Set markRsi = ITObjStdPen(5) 'Rsiマーク
Set markVr = ITObjStdPen(6) 'Vrマーク
Set mark3 = ITObjStdPen(7) '3点マーク

'「ITCreateObjLinePen」はスクリプト内で一回しか設定できません。
ITCreateObjLinePen LINE_MAX '売買履歴のライン

'時系列データオブジェクトITObjHistDataを作成
Set hChart = ITCreateObjHistData

'配列データ処理用のITObjArrayDataを作成
Set aMark = ITCreateObjArrayData
Set aData = ITCreateObjArrayData
Set aSell = ITCreateObjArrayData
Set aBuy = ITCreateObjArrayData

'///////////////////////////
'// テクニカル計算、チャート作成
'//
hChart.SetCurrentChart '現在開いているチャートの時系列データを取得
aSell.Init hChart.GetCnt, -10 '-10で初期化
aBuy.Init hChart.GetCnt, 10 '10で初期化

'移動平均
penAve.SetCnd ITAreaStock, ITChartLine1, ITStyleDot , 1 , ITModeCopypen 'pen設定
ITCalMA hChart, 26, aData'移動平均26日計算して結果をaDataへ一括格納
penAve.SetAllData aData, aData, True, RGB(255,0,0) 'aDataをpenへ一括格納

'乖離率
penKairi.SetCnd ITAreaOpt1, ITChartLine1, ITStyleSolid, 1 , ITModeCopypen 'pen設定
markKairi.SetCnd ITAreaOpt1, ITChartBar2 , ITStyleSolid, ITRosokuWidth , ITModeMaskpen 'マーク設定
ITSetYRange ITAreaOpt1, 20, -20, 10 '乖離率の縦軸を最大値20、最小値-20、目盛幅10に
ITCalKairi hChart, 26, aData '移動平均26日との乖離率を計算して結果をaDataへ一括格納
penKairi.SetAllData aData, aData, True, RGB(255,0, 0) 'aDataをpenへ一括格納
markKairi.IsSetDataConst aData, ">", 15, aSell, aSell, True, colSell '15より大きい場合のみ売マーク
markKairi.IsSetDataConst aData, "<", -15, aBuy, aBuy,True, colBuy '-15より小さい場合のみ買マーク

'VR
penVr.SetCnd ITAreaOpt2, ITChartLine1, ITStyleSolid, 1 , ITModeCopypen 'pen設定
markVr.SetCnd ITAreaOpt2, ITChartBar2 , ITStyleSolid, ITRosokuWidth , ITModeMaskpen 'マーク設定
ITSetYRange ITAreaOpt2, 400, 0, 100 'VRの縦軸を最大値400、最小値0、目盛幅100に
ITCalVR hChart, 25, aData, 1 'VR25日を計算して結果をaDataへ一括格納
penVr.SetAllData aData, aData, True, RGB(0, 191, 0) 'aDataをpenへ一括格納
markVr.IsSetDataConst aData, ">", 250, aSell, aSell, True, colSell '250より大きい場合のみ売マーク
markVr.IsSetDataConst aData, "<", 70, aBuy, aBuy,True, colBuy '70より小さい場合のみ買マーク

'RSI
penRsi.SetCnd ITAreaOpt3, ITChartLine1, ITStyleSolid, 1 , ITModeCopypen 'pen設定
markRsi.SetCnd ITAreaOpt3, ITChartBar2 , ITStyleSolid, ITRosokuWidth , ITModeMaskpen 'マーク設定
ITSetYRange ITAreaOpt3, 100, 0, 25 'RSIの縦軸を最大値100、最小値0、目盛幅25に
ITCalRSI hChart, 14, aData 'RSI14日を計算して結果をaDataへ一括格納
penRsi.SetAllData aData, aData, True, RGB(0, 0, 255) 'aDataをpenへ一括格納
markRsi.IsSetDataConst aData, ">", 75, aSell, aSell, True, colSell '75より大きい場合のみ売マーク
markRsi.IsSetDataConst aData, "<", 25, aBuy, aBuy,True, colBuy '25より小さい場合のみ買マーク

'3点チャージのマーク
aMark.Init hChart.GetCnt, 0 'aMarkを0で初期化
aData.SetStdPenData1 markKairi '乖離率マークのdata1値をaDataへ一括格納
aMark.CalArray aMark, "+", aData, 0 'aMarkにaData1を加算
aData.SetStdPenData1 markVr 'VRマークのdata1値をaDataへ一括格納
aMark.CalArray aMark, "+", aData, 0 'aMarkにaData1を加算
aData.SetStdPenData1 markRsi 'Rsiマークのdata1値をaDataへ一括格納
aMark.CalArray aMark, "+", aData, 0 'aMarkにaData1を加算
'乖離>15 且つ RSI>70 且つ VR>250 (売)の場合aMarkは-30に
'乖離<-15 且つ RSI<25 且つ VR<70(買) の場合aMarkは30になっている
mark3.SetCnd ITAreaStock, ITChartBar2 , ITStyleSolid, ITRosokuWidth , ITModeMaskpen 'マーク設定
mark3.IsSetDataConst aMark, "=", -30, aMark, aMark, True, colSell '-30の場合のみ売マーク
mark3.IsSetDataConst aMark, "=", 30, aMark, aMark, True, colBuy '30の場合のみ売マーク

'////////////////////
'// 売買検証
'//<BR>strLog = "": cntLine = 0: sum = 0<BR>cntWin = 0: cntLoss = 0: cntEven = 0
For index = 26 To hChart.GetCnt - 1 - HOLD_TERM
    fRecord = False
    If mark3.GetData1(index) = 30 Then '買いの場合
        If cntLine < LINE_MAX Then
            diff = Trade(index+1, index+HOLD_TERM, ITObjLinePen(cntLine), hChart)
            cntLine = cntLine + 1
            fRecord = True
        End If
    ElseIf mark3.GetData1(index) = -30 Then '売りの場合
        If cntLine < LINE_MAX Then
            diff = Trade(index+HOLD_TERM, index+1, ITObjLinePen(cntLine), hChart)
            cntLine = cntLine + 1
            fRecord = True
        End If
    End If

    '売買記録の追加
    If fRecord = True Then
        If diff > 0 Then
            cntWin = cntWin + 1
        ElseIf diff < 0 Then
            cntLoss = cntLoss + 1
        Else
            cntEven = cntEven + 1
        End if
        sum = sum + diff
        strLog = hChart.GetDate(index+HOLD_TERM) & ": " & diff & vbNewLine & strLog
    End If        
Next

ITDraw 'セットしたPenを画面に出力
strLog = "Loss: " & cntLoss & "回" & vbNewLine & strLog
strLog = "Even: " & cntEven & "回" & vbNewLine & strLog
strLog = "Win : " & cntWin & "回" & vbNewLine & strLog
strLog = "Total: " & sum & vbNewLine & strLog
ITMsgBox strLog '売買記録の表示

'//スクリプト終り 

[トップページへ戻る]