テクニカル分析には、テクニカル指標を活用します。
分析手法 | 分析法の概要 | テクニカル指標名 |
---|---|---|
トレンド分析 | 株価の方向を教えてくれる | 移動平均線、モメンタム、MACD、ボリンジャーバンド |
オシレーター分析 | 売買タイミングを教えてくれる | RSI、ストキャスティクス、RCI、MACD |
フォーメーション分析 | 株価の天井や底などに加え、今の状態を教えてくれる | トリプル(ダブル)トップ、トリプル(ダブル)ボトム、三角もち合い |
ローソク足分析 | 色や組み合わせ、形が形成された株価水準などから次の展開を予測するのに役立つ | 陽線、陰線、上(下)、ヒゲ、陽(陰)の坊主、十字足、陽(陰)のコマ、包み足、出会い線、行き違い線、かぶせ線、首つり線、トウバ、明けの明星、宵の明星、アイランドリバーサル |
出来高分析 | 出来高が株価動向に先行すると考えられるとき、増減を基に株価の天井や底を予測する、また売買タイミングを教えてくれる | 出来高移動平均線、ボリュームレシオ、逆ウォッチ曲線、信用残/売買高レシオ |
サイクル分析 | 高値や安値をつける時期を予測、また景気循環などを分析する | ライト(レフト)、トランスレーション、コンドラチェフ、グズネッツ、ジュグラー、チキンサイクル |
その他のテクニカル指標 | トレンドや売買タイミングの両方を分析できるもの、独立して体系化された分析手法で将来株価を分析するものに用いる | 一目均衡表、ポイント&フィギュア、ダウ理論、エリオット波動理論、ギャン理論 |
今回は、ボリンジャーバンドについて取り上げます。
ボリンジャーバンドとは?
ボリンジャーバンドは、ジョン・ボリンジャー氏によって1980年代に発案された指標で、統計学の標準偏差の考え方を移動平均線に取り入れたものです。
ボリンジャーバンドでは、ボラティリティー(相場や価格の「ブレ」「変動幅」)を測定するために標準偏差σ(小文字のシグマ)を用いています。
ボリンジャーバンドは、±1、2、3σからのバンドの線で構成され、バンドの中に収まる確率は以下の通りです。
- ±1σに収まる確率=68.26%
- ±2σに収まる確率=95.44%
- ±3σに収まる確率=99.73%
なお、考案者のジョン・ボリンジャーは逆張り指標ではなく、後者の順張り指標として活用することを推奨しています。
※ 変動幅の小さい事を”スクイーズ” と呼び、逆に変動幅の大きな事を”エクスパンション”と呼ばれます。
一般的に中心線となる移動平均線は20~25日線を使い、算出にあたっては「終値」だけでなく、「高値・安値・終値の平均値」を用いる方法もあります。
ボリンジャーバンドをprotraで表示する
「何を今さら?」と思われるかもしれませんが、Protraは仕様上 $Namesおよび$Colorsは6個までしか設定できません。
「±σ」「±2σ」「±3σ」「移動平均線」の指標を表示するには、7本引く必要があるため、Protra本体を修正する必要があります。
これが本題です。
修正コード
C#の本体を修正するので、ビルド環境(Visual Studio)が必要です。
修正箇所は次の通りです。
\Protra\Controls\ChartBox.cs
1 2 3 4 5 6 7 8 9 10 11 12 |
/// /// 仮想描画によって縦軸のスケールを得る /// private void VirtualRendereing() { // グローバル変数の設定 Interpreter.GlobalVariableTable.Clear(); - Interpreter.GlobalVariableTable["$Names"] = new Value(new Value[6]); - Interpreter.GlobalVariableTable["$Colors"] = new Value(new Value[6]); + Interpreter.GlobalVariableTable["$Names"] = new Value(new Value[7]); + Interpreter.GlobalVariableTable["$Colors"] = new Value(new Value[7]); Interpreter.GlobalVariableTable["$IsTimeSeries"] = new Value(true); |
\Protra.Lib\Lang\Builtins\DrawBuiltins.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public Dictionary<int, double>[] Indicators { get; set; } /// /// コンストラクタ。 /// public DrawBuiltins() { _functionList = new List<DrawFunctionRecord>(); MinY = double.MaxValue; MaxY = double.MinValue; - Indicators = new Dictionary<int, double>[6]; - for (var i = 0; i < 6; i++) + Indicators = new Dictionary<int, double>[7]; + for (var i = 0; i < 7; i++) Indicators[i] = new Dictionary<int, double>(); } |
また「TIlib.pt」にも、関数を追加する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
def BB_draw2(obj, color, color1, color2, color3) if obj[0] == null || obj[1] == null return end DrawLine(color, {-1}X, obj[0], X, obj[1]) if color1 DrawLine(color1, {-1}X, obj[0] - obj[2], X, obj[1] - obj[3]) DrawLine(color1, {-1}X, obj[0] + obj[2], X, obj[1] + obj[3]) end if color2 DrawLine(color2, {-1}X, obj[0] - 2 * obj[2], X, obj[1] - 2 * obj[3]) DrawLine(color2, {-1}X, obj[0] + 2 * obj[2], X, obj[1] + 2 * obj[3]) end if color3 DrawLine(color3, {-1}X, obj[0] - 3 * obj[2], X, obj[1] - 3 * obj[3]) DrawLine(color3, {-1}X, obj[0] + 3 * obj[2], X, obj[1] + 3 * obj[3]) end end |
その上で、グラフを表示するためのスクリプトを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
require "Color" require "TIlib" $Names[0] = "MA(20)" $Colors[0] = $White $Names[1] = "+σ" $Colors[1] = $Green $Names[2] = "-σ" $Colors[2] = $Green $Names[3] = "+2σ" $Colors[3] = $Red $Names[4] = "-2σ" $Colors[4] = $Red $Names[5] = "+3σ" $Colors[5] = $SkyBlue $Names[6] = "-3σ" $Colors[6] = $SkyBlue Candle_draw($White, $Yellow) if !$BB $BB = BB_new(20) else BB_next($BB) BB_draw2($BB, $Colors[0], $Colors[1], $Colors[3], $Colors[5]) end if $BB[1] && $BB[3] Indicator(0, $BB[1]) Indicator(1, $BB[1] + $BB[3]) Indicator(2, $BB[1] - $BB[3]) Indicator(3, $BB[1] + 2 * $BB[3]) Indicator(4, $BB[1] - 2 * $BB[3]) Indicator(5, $BB[1] + 3 * $BB[3]) Indicator(6, $BB[1] - 3 * $BB[3]) end |
適用結果
無事、グラフを表示することができました。
Protraは既に開発が止まっているために、足りない部分はコード修正して追加していく必要があります。
「月表示」「矢印キー(左右)による日足グラフの移動(うねり投資検討向け)」など、やりたい事は沢山ありますが、これらは少しレベルが高かった・・・。誰かに託します。
「イザナミ」の機能拡張を見てると、Protraを使うメリットは無料・・だけですが、どんどん差は開くばかり。