NTAA JOURNAL 2017.6

1
2
3
4
5

Vol.4

寄稿
K チャート入門

1
2
3―コンセプトから計算法まで ―645

日本テクニカルアナリスト協会 理事

7

古城 鶴也

8

6
7
8

9

9

10

10

11 発端は 1990 年のバブル崩壊

らくは、この直線に沿って推移しているのだが、 111213K チャートは、筆者が 1990 年に創案し、1995

14 年に公表した独自の手法である。
15

1989 年末に 38,915 円の高値をつけた日経平

あるとき、株価は、この直線から離れていってし 12。 し か し、 13
ま い、2 度 と 戻 っ て は 来 な い（Fig.2）
その後の株価の動きをみると、別の見えない直線 14に沿って動いているように見える（Fig.3）。そし 1516 均は、翌年 4 日の大発会には前年末比 202 円安、て時が来ると、株価はまた離れ、次の直線に沿っ 16

18 なった。3 月には一時 30,000 円の大台を割り込

ンドの転換、Fig.3 は新しいトレンドの始まりと捉 18

17 5 日には前日比 438 円安という波乱の滑り出しと19 んだことから、下げ止まりを期待する投資家も多20 かった。しかし、その後も一進一退を繰り返しな

21 がら水準を切り下げて、10 月には 20,221 円と前22 年末の半値近い水準まで下落したのである。
23て動き出す。Fig.1 はトレンドの継続、Fig.2 トレ 17
えることもできる。

19

では、株価が直線からどのくらい離れたら、元 20に戻らないのだろうか。あるいは、どのくらいま 21
221990 年を通じてみると、前日比で 400 円以上

23

24 下落した日は 59 回にも及び、反対に 400 円以上

24

25 上昇した日も 42 回に達した。毎週、大幅下落が25

26 あり、それに近い頻度で大幅反騰があったことに

26

27 なる。まさに乱高下を繰り返したのである。これ

27

28 によって、いつ損切りするのか、あるいは難平を

28

29 入れるのか、混乱して適切な判断ができない投資

29

30 家は多かった。
31

30

相場関係者にしても同じである。大手証券各社

32 からは度々相場底打ちコメントが発表され、地場新

31

Fig.1．株価は直線に沿っているように見える

32

33 聞はそれを大きく伝えた。いつか損切りしなければ

33

34 ならないと分かっていても、相場が戻るといわれれ

34

35 ば待ちたくなるのが人情である。逃げる機会を見35

36 失った。これがバブル崩壊の傷を大きくしたのであ36

37 る。どこかで、もう元には戻らない、投げざるを得

37

38 ないという客観的な判断を下すことはできなかった

38

39 のだろうか。アナリストとして、自分にできること

39

40 はなかったのだろうか。深い疑問が残った。

40

41

41

良く知られているように、株価は見えない直線

42 に沿うように推移する場面がある（Fig.1）。しば日本テクニカルアナリスト協会

Fig.2．株価は直線から離れ、2 度と戻らない
2017.642
57

Technical Analysts Journal

1

2 つのグループを、過去何日間かの株価群と直1

過去の株価群と同一集団といえるかどうかが分か

3

近株価に置き換えたらどうだろう。直近株価が、 223るのではないか。直近株価が過去の株価群と同一4集団なら、これまでのトレンドが続き、トレンドか

5
6

4
5

らかい離していても元に戻る動きとなるのではな

6

トレンドが変わる可能性があり、過去のトレンド

8

いか。直近株価が過去の株価群と異なる集団なら、 778
9

Fig.3．株価は新しい直線に沿って動いている

1011に戻る可能性は低いのではないか。その境目をグ

9

ラフにしてローソク足に重ねれば、株価が大きく 10
動いたときに、日常的変動の範囲内なのか、基調 11

12 でなら元に戻るのだろうか。元に戻るのであれの転換を警戒しなければならないのかが、一目瞭 12

14 によっては、買い乗せや売り乗せの好機といえる本概念である。しかし、実際に K チャートを描い 14

13 ば、今のポジションを解消する必要ないし、場合然となるのではないか。これが、K チャートの基 13

15 かもしれない。しかし、もう戻らないのであれば、てみないことには、使えるかどうか分からない。

17 のポジションを持たなければならない。元に戻る

一般的で、スイッチを入れると、黒い画面に「How 17

19 ので、この見極めはとても重要である。判断の分というプログラム言語のプログラム入力画面であ 19

16 今のポジションを解消し、場合によっては、反対

18 か否かによって正反対の投資行動が求められる
20 かれ目となる水準を知ることができたとしたら、
21 1990 年の疑問は解決できるかもしれない。
22

23 K チャートの着想

1990 年当時、パソコンの OS は「MS‑DOS」が 16

many ﬁles ?」という白文字が表示された。BASIC 18
る。
「Lotus 1‑2‑3」という表計算ソフトもあった 20が、四則演算と集計くらいしかできなかった。

21

K チャートを見たければ、自分でプログラムを 22

書いて、パソコンに描画させるしか方法はなかっ 23

24
25

15

筆者は、学生時代を農学部で過ごした。そこで、

26 新しい殺虫剤が既存の薬よりも効果があるかどう

27 かを調べる方法を習った。駆除対象の昆虫は生き28 物なので、同じ種類でも個体によって、薬に対す

29 る抵抗力が強いものから弱いものまで、さまざま

30 なものがいる。1 匹ずつに薬を投与したのでは、た。しかし、計算プログラムを書くためには、t 24
検定の計算方法を四則演算に分解する必要があ 25る。グラフを表示するプログラムでは、line（x1, 26
y1, x2, y2）または box（x1, y1, x2, y2）という形 27
で、すべての画像を直線と四角形の組合せに分解 28
し、xy 座標に置き換える必要がある。

29

特に、チャートを作図するプログラムには苦労 30

31 薬の効果の差なのか、個体によって異なる抵抗力した。例えばチャートの縦軸メモリである。表示 31

33 ループを 2 系列用意し、新薬と既存薬を投与して切りの良い数字のメモリを適切な数、自動的に刻 33

32 の差なのかが区別できない。そこで、100 匹のグ
34 データを取る。その結果を統計処理して、効果に35 差があるかどうか判断する方法である。
36

2 つのグループの平均値に差があるかどうかを

37 判断するには、t 検定という方法を使う。t 検定の38 結果、2 つの値に差があると判定されれば、2 つ

39 のグループは別の母集団ということになり、薬の40 効果にも違いがあるといえる。差がなければ、241 つのグループは同一母集団であり、薬効に違いは
42 ないと判断する。
58

される期間の株価の最高値と最安値を元にして、 32
むロジックは難しかった。しかも、メモリの表示 34
は普通の数字だが、間隔は対数である。統計書や 35
プログラム開発入門書を何度も読み直して独学で 36
プログラムを組み、K チャートを表示できるよう 37になるまでに、5 年近くを要した。

K チャートの見方

38
39
40
41

K チャートは、水色の帯で示される下値圏、緑 42

テクニカルアナリストジャーナル

2017.6NTAA JOURNAL 2017.6

1
2
3
4
5
6
7
8
9

色の実線で示される回帰値、桃色の帯で示される
高値圏の 3 つで構成されており、水色と桃色のたなびく雲の間を株価が推移するような図柄となる。上方にある赤い実線はボリンジャーバンドの＋2σ、下方にある紺色の実線は同−2σである。
K チャートは、ボリンジャーバンドと混同されることも多いので、差異が分かるように参考表示している。想定通りなら、水色の帯の下端から桃色の帯の上端までの間に株価の 95% が含まれ、水10 色の帯の上端から桃色の帯の下端までの間、すな
11 わち上下の帯に挟まれた空白部分に 75% が含ま
12 れているはずである。
13

中央の緑色の実線は、20 期（日、週、月）でVol.4

経平均日足は、年初から連続して下値圏の下端を押し下げるように推移しており、K チャートは1989 年末までのトレンドとは異なる局面を迎えた可能性が高いことを示唆していた。1 月後半には持ち直したものの、2 月後半には再び下値圏を大きく押し下げる展開となって、異様な下落であることを示唆した。

1
2
3
4
5
6
7

Fig.5 の日経平均週足は、1 月に下値圏の下端を割り込んだ後、いったん下げ止まったものの、2

89

月末には大陰線となって下値圏を割り込み、下落 10の強烈さを示唆した。3 月は同様の強烈な下げが 11
続き、上昇相場が完全に崩壊したことを示した。

12

Fig.6 の日経平均月足は、2 月は下値圏で下げ止 13

14 計算された最小自乗法による回帰値であり、価格まったものの、3 月には下値圏を割り込み、異常 14

16 辺を上下しながら推移し、基本的には、回帰値か発があったが、その後再び下げ基調となり、月足 16

15 推移のトレンドを表している。株価は回帰値の周17 ら上方または下方へ長期間かい離し続けることは18 ない。
19

下値圏の下端は、直近 20 期の価格推移が続い

20 ているのであれば、この水準を割り込む可能性はな下落であることを示唆した。5 月にかけて小反 15
も下降基調入りが鮮明となった。

17

結果的に、1990 年は長い下落相場の序章に過 18

ぎなかったが、K チャートの日足や週足の動きか 19
20

21 2.5% 以下である。下値圏の上端は、直近 20 期の

21

22 価格推移が続いているのであれば、この水準を割

22

23 り込む可能性は 12.5% 以下である。

23

24

24

高値圏の上端は、直近 20 期の価格推移が続い

25 ているのであれば、この水準を上回る可能性は

25

26 2.5% 以下である。高値圏の下端は、直近 20 期の

26

27 価格推移が続いているのであれば、この水準を超

2728 える可能性は 12.5% 以下である。

28

29

29

下値圏を割り込む、あるいは高値圏を上回る可30 能性が 2.5% ということは、直近 20 期の価格推31 移が続いている可能性が 1/40 しかないというこ

30

Fig.4．日経平均の日足（ 〜 1990/3）

31

32 とである。それぞれの水準を 2 回連続して突破

32

33 す る 可 能 性 は 1/40 の 2 乗、1/1600、3 回 連 続

33

34 なら同 3 乗の 1/64000 である。これは裏を返せ

34

35 ば、2 回連続突破なら 1599/1600、3 回連続なら

35

36 63999/64000 の確率で過去の推移とは異なると

36

37 いうことになる。通常の相場では、株価は回帰値

3738 を中心として、下値圏と高値圏の間を往復するよ

38

39 うに推移するが、連続して下値圏を割り込む、あ39

40 るいは高値圏を上回るときは、トレンドが転換し41 た可能性が大きいと判断するほうが妥当である。
42

1990 年 の 状 況 を再 確 認 し て み る。Fig.4 の 日
日本テクニカルアナリスト協会

40
41
Fig.5．日経平均の週足（ 〜 1990/3）
2017.642
59

Technical Analysts Journal

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

10

10

11

Fig.6．日経平均の月足（ 〜 1992/12）

12
13

対象

15 という判断ができた可能性がある。

17 Fig.7 は米国の新設住宅着工許可件数の推移を示し

日経平均
日足

K チャートは、経済指標の分析にも有効である。

週足20 月次レポートで発表、同業アナリストや知り合い

21 のマスコミ関係者に注意喚起をしたが、残念なが
23

注意喚起が早過ぎたからである。米国でサブプ

24 ライムローン問題が浮上したのは 2007 年 3 月、25 ベアスターンズ傘下のヘッジファンドが行き詰

月足

22 ら広く周知するには至らなかった。

13

ダウ工業株
米ドル／円

データ期間

有効データ数

1990/1/2〜2015/12/31
1990/1/4〜2015/12/30

6,536
6,375

1990/1/4〜2015/12/30

長期国債先物 1999/7/22〜2015/12/30

18 たものである。2006 年半ばには、下落基調が鮮19 明となっていたことが分かる。これを見て筆者は

12

Table 1．供試データ

14 ら、1990 年 3 月の時点で相場から撤退すべきだ
16

11

Fig.7．経済指標でも有効

日経平均
ダウ工業株

6,375

4,020

1976/4/1〜2015/12/30
1983/9/1〜2015/12/31

2,055
1,670

長期国債先物 1998/1/4〜2015/12/30
日経平均
1976/4〜2015/12
ダウ工業株
1983/9〜2015/12

922
459
370

米ドル／円

1980/1/4〜2015/12/30

米ドル／円
1980/1〜2015/12
長期国債先物 1993/9〜2015/12

1,858

414
250

14
15
16
17
18
19
20
21
22
23
24
25

26 まったのは 2007 年 7 月、ベアスターンズが破た

それぞれから逸脱した回数を調べた。

28 が倒産したのは 2008 年 9 月であった。K チャー

値と安値の平均値）を用いて計算するので、中値 28

30 いた。

た回数、75% 上限を上回った回数、75% 下限を 30

27 んしたのは 2008 年 5 月、リーマンブラザーズ
29 トで異常が認められてから、2 年以上が経過して
31

32 バックテストとファットテール問題
33
34

このようにして計算した K チャートのバンド

35 は、本当に意図した範囲を示しているのだろう
36 か。そこで、長期間の過去データを用いて、想定37 される範囲からどれだけ逸脱したかを実測してみ38 た。用いたデータは、Table 1 の通りで、株式会
39 社 QUICK が提供する情報サービス「Qr1」で取得
40 できる、最長期間のデータである。
41

また、比較対照する指標として標準偏差を用い

42 るボリンジャーバンド、標準誤差バンドを計算し、60

26

具体的には、K チャートについては、中値（高 27が 95% 上限を上回った回数、95％下限を下回っ 29
下回った回数をカウントした。ボリンジャーバン 31
ドについては、ティピカル値（高値、安値、終値 32の平均値）を用いて計算するので、ティピカル値 33
が移動平均＋2 標準偏差を上回った回数、移動平 34
均−2 標準偏差を下回った回数、移動平均＋1 標 35
準偏差を上回った回数、移動平均−1 標準偏差を 36下回った回数をカウントした。標準誤差バンドで 37
は、中値を用いて計算したので、中値が回帰値＋ 38
2 標準誤差を上回った回数、回帰値−2 標準誤差 39を下回った回数、回帰値＋1 標準誤差を上回った 40
回数、回帰値−1 標準誤差を下回った回数をカウ 41
ントした。

テクニカルアナリストジャーナル

2017.642

NTAA JOURNAL 2017.6

1
2
3
4
5
6
7
8
9

ボリンジャーバンドは、米国のジョン・ボリン

ジャー氏が 1990 年ごろに考案した指標である。
ティピカル値を用いて計算し、20 日間で計算した標準偏差の 2 倍の値を、同じ期間で計算した移動平均に加減する。株価が移動平均を中心として正規分布することを前提としており、移動平均±2標準偏差の間に約 96% が入ると考えられている。
標準誤差バンド（Standard Error Bands）は、
ジョン・アンダーソンが考案した指標で、略して SE

10 バンドともいう。最小自乗法で計算した回帰値に

11 標準誤差を一定数倍した値を加減する。ここでは、
12 20 日間の中値を用いて回帰値と標準誤差を計算
13 し、標準誤差の倍数として 2 を用いた。回帰値±

Vol.4

線で挟まれた範囲が標準誤差バンド、95% 上限と95% 下限の実線で挟まれた範囲が K チャートである。ボリンジャーバンドは、上昇局面においては

123価格の下方に大きな余裕があるのに対して、価格

4

価格の上方に大きな余裕があるのに対して、価格

6の上方には余裕が少ない。反対に下降局面では、 5の下方には余裕が少ない特徴がある。標準誤差バ

ンドは、ボリンジャーバンドと同様の傾向はある
もののはるかに軽微で、バンドの幅は 3 者の中で789最も狭い。K チャートは標準誤差バンドに似てい 10
るが、バンドの幅は標準誤差バンドよりも広く、 11
バンド幅の拡大、縮小の変化が大きい傾向がある。 12
Table 2 を見ると、ボリンジャーバンドでは、 1314 2 標準誤差の間に約 95% が入ると期待されるから

日経平均、ダウ工業株、米ドル、長期国債先物の 14

標準偏差と標準誤差の違いを概略的に述べる±2 標準偏差の範囲から 1 割強が逸脱していた。 16

15 である。
16

17 と、標準偏差が、データがどのくらい散らばって18 いるかを示すのに対し、標準誤差は、平均値がど

19 のくらい散らばっているかを示す。標準誤差の中20 心値は回帰値であるため、移動平均に比べて遅行21 性が少ない特徴がある。

日足、週足、月足のいずれにおいても、移動平均 15
この範囲には約 95% が入るとされているが、実 17
際には 87、88% 程度しか入っておらず、ダウ工 18
業株の月足では 16.22% と、想定の 3 倍以上逸脱 19
することが分かった。

20

標準誤差バンドでは、同じ 4 指標の日足、週足、 21

3 つのチャートがどの程度異なるのかを Fig.8

月足のいずれにおいても、回帰値±2 標準誤差の 22

24 がボリンジャーバンド、＋2SE と−2SE の一点鎖

95% が入るとされているが、実際には 90% 程度 2422

23 に示した。＋2σと−2σの点線で挟まれた範囲

範囲から 1 割弱が逸脱していた。この範囲には約 23

25

25

26

26

27

27

28

28

29

29

30

30

31

31

32

32

33

33

34

34

35

35

36

36

37

37

38

38

39

39

40
41
42

40

Fig.8．日経平均週足と各バンド±2σ：ボリンジャーバンド、±2SE：標準誤差バンド、5％上限 / 下限：K チャート
日本テクニカルアナリスト協会

2017.641
42
61

Technical Analysts Journal

Table 2．バンド範囲から逸脱する確率（1）

1
2

5

8

11
12
13

7.89
8.30
7.61

Ｋチャート
4.46
4.93
4.16

10.25
12.99

8.26
8.52

5.00
4.97

米ドル／円
長期国債先物

13.67
10.95

8.40
8.25

5.71
4.89

ダウ工業株
米ドル／円

16.22
14.01

9.49
8.23

5.16
5.58

ダウ工業株

長期国債先物

12.63

13.07

11.60

7.73

9.61

7.23

4.62

5.03

5.24

ボリンジャーバンド：移動平均±2 標準偏差、標準誤差バンド：回帰値±2 標準誤差、K チャート：存在確率 95% の範囲。計算期間はすべて 20 期。

1

対象

2

日経平均
ダウ工業株

ボリンジャーバンド

米ドル／円

58.37
58.84

56.82

標準誤差
47.33
45.35

44.49

Ｋチャート
24.34
24.12

22.61

44.94
45.67

23.87
24.50

5

米ドル／円
長期国債先物

57.91
59.22

47.39
45.06

23.92
23.37

7

ダウ工業株

ダウ工業株
米ドル／円

長期国債先物

60.24

67.76

69.46
64.01
54.40

45.24

46.07

48.51
41.65
40.16

22.72

26.04

23.91
22.57
19.35

ボリンジャーバンド：移動平均±1 標準偏差、標準誤差バンド：回帰値±1 標準誤差、K チャート：存在確率 75% の範囲。計算期間はすべて 20 期。

6
8
9
10
11
12
13
14

15 しか存在せず、想定の 2 倍近くが逸脱したことに16 なる。

K チャートでは、同じ 4 指標の日足、週足、月18 足のいずれにおいても、存在確率 95% の範囲か
19 ら 5% 前後が逸脱しており、おおむね想定通りで20 あった。
21

4

59.18
60.39

14

17

3

長期国債先物
日経平均

日経平均
月足

10

12.35

標準誤差

長期国債先物
日経平均

日経平均
月足

9

11.87
11.60

週足

7

週足

6

米ドル／円

ボリンジャーバンド

日足

4

日足

3

対象

日経平均
ダウ工業株

Table 3．バンド範囲から逸脱する確率（2）

脱はおおむね想定通りと、他の 2 指標に比べて信 15
頼度が著しく高く、ファットテール問題も回避で 16きることが示された。

K チャートの計算方法

17
18
19
20

Table 3 を見ると、ボリンジャーバンドでは、K チャートは t 検定をベースとして組み立てら 21

22 同じ 4 指標の日足、週足、月足のいずれにおいても、れたが、公式通りの算式で示される信頼区間は非 2224 していた。この範囲には約 67% が入るとされてので、信頼区間を計算期間分累積することを思い 24

26 とになる。

果は想定通りであることを示唆している。

23 移動平均±1 標準偏差の範囲から 6 割前後が逸脱

常に狭いものだった。そのままでは利用できない 23

25 いるが、実際にはその半分程度しか存在しないこついた。公式からは離れるが、バックテストの結 25

27

標準誤差バンドでは、同じ 4 指標の日足、週足、

26

この計算ロジックは、EXCEL のセル関数では計 27

28 月足のいずれにおいても、回帰値±1 標準誤差の算できないのだろうか。EXCEL には t 検定を計算 28

30 約 67% が入るとされているが、実際にはその 2/3

ことではないように思えた。筆者が普段利用して 30

K チャートでは、同じ 4 指標の日足、週足、月プログラムには変わりがない。プログラミングに 32

29 範囲から 45% 前後が逸脱していた。この範囲にはする関数がいくつか用意されており、そう難しい 29

31 程度しか存在しないことになる。

いる VBA マクロは、簡便とはいえコンピュータ・ 31

32

33 足のいずれにおいても、存在確率 75% の範囲か

34 ら 23% 前後が逸脱しており、おおむね想定通り
35 であった。

は、いろいろな作法や決め事があり、普通の投資 33
家にはハードルが高いことも予想される。

34

しかし、K チャートのバンド幅を計算するロ 35

以上から、ボリンジャーバンドや標準誤差バン

ジックは、見た目以上に複雑な繰り返し計算と 36

38 とが分かった。このことは、価格の分布が正規分とには成功したものの、シートは A 列から CK 列 38

40 るファットテールであることを示唆しており、標なった。以下にセル関数で求める方法と、ユーザー 4042 意味する。一方、K チャートが示す範囲からの逸で参照されたい。

36

37 ドでは、想定よりも逸脱する率が著しく大きいこなっていた。結果的に、セル関数に置き換えるこ 37

39 布よりもなだらかで、すそ野が厚い分布、いわゆ

まで 89 列を使用する、予想以上に煩雑なものに 39

41 準偏差や標準誤差ではリスク管理が難しいことを定義関数を登録して求める方法の両方を示したの 41

62テクニカルアナリストジャーナル

2017.642

NTAA JOURNAL 2017.6

1
2
3
4
5
6
7
8

なお、K チャートの計算ロジックや計算プログ

ラムについての著作権は主張するが、使用権は開放するので自由に利用してもらって構わない。ただし、利用については自己責任の下に行われるものとし、利用した結果について、筆者は一切の責任を追わない。

＜K チャートの計算方法・セル関数で計算する＞

910以下で作成された EXCEL シートは、VBA マク

11 ロと全く等しい結果を返す。しかし、VBA では簡

12 単な計算も、セル関数に置き換えると大変煩雑な13 ものになってしまった。K チャートを計算するに14 は、現状では 89 列が必要である。
16 1．データの入力

ここでは、A1 セルに銘柄名を入れ、2 行目に各18 列のタイトルを入れるものとする。分析対象とな
19 る価格データを入れるのは A 列 〜 F 列である。

20 A 列：A2 セルに「日付」と入力し、A3 セル以下
21に「=AVERAGE(H2:H22)」という計算式を入れる。H3 セルをコピーし、I23 以下、データのある最終行までを選択して貼りつける。

1
2
3
4

2．Sx の計算

5

Sx の計算では、計算対象とする価格系列について、19 日前を 1、18 日前を 2…1 日前を 19、当日を 20 というように時間の番号を振り、それぞれの時間番号から時間番号の平均を差し引いた値

6
7
8
9

の 2 乗を累積する計算を行う。Sx は、「=DEVSQ(xx 10: yy)」という式で求められるが、累積途中の値も 11使用するためブレークダウンした計算を行う。

12

J 列：J1 セルに「20」と入力し、計算期間が 20 13であることを明示する。J2 セルに「時間」と 14入力し、J3 セルから J22 セルまでに 1 から 15

15
17

Vol.4

に日付のデータを入れる。上から古い順に並

20 までの数字を入力する。

16

K 列：K1 セルに「=(J1+1)/2」という計算式を入 17
力する。K2 セルに「Sx」と入力し、K3 セル 18に「=J3‑$K$1」という計算式を入れる。K3 19
セルをコピーし、K4 セルから K22 セルまで 20を選択して貼りつける。

21

べ、最下段の行が最新データとなるように

L 列：L2 セ ル に「Sx^2」 と 入 力 し、L3 セ ル に 2224 B 列：B2 セルに「始値」と入力し、B3 セル以下コピーし、L4 セルから L22 セルまでを選択 24

22
23
25

する。

に始値のデータを入れる。

26 C 列：C2 セルに「高値」と入力し、C3 セル以下
27に高値のデータを入れる。

28 D 列：D2 セルに「安値」と入力し、D3 セル以下
29に安値のデータを入れる。

30 E 列：E2 セルに「終値」と入力し、E3 セル以下
31に終値のデータを入れる。

32 F 列：F2 セルに「出来高」と入力し、F3 セル以
33

下に出来高のデータを入れる。

34 G 列：G2 セ ル に「 中 値 」 と 入 力 し、G3 セ ル に
35「=(C2+D2)/2」という計算式を入れる。G3 セ「=K3^2」という計算式を入れる。L3 セルを 23
して貼りつける。

25

M 列：M1 セルに「=DEVSQ(J3:J22)」という計算 26
式を入れる。M2 セルに「累積 Sx^2」と入力 27
し、M3 セルに「=L3」という計算式を入れる。 28
M4 セルには「=M3+L4」という計算式を入れ、 29
M4 セルをコピーし、M5 セルから M22 セル 30までを選択して貼りつける。M1 セルの値と 31
M22 セルの値が等しいことを確認する。

32
33

3．Sy の計算

34

Sy の計算では、計算対象とする価格系列につ 35

ルをコピーし、G4 以下、データのある最終

いて、それぞれの価格から価格系列の平均値を差 36

38 H 列：H2 セ ル に「 対 数 」 と 入 力 し、H3 セ ル に「=LOG10(G3)*1000」という計算式を入れる。
39「=DEVSQ(xx : yy)」という式で求められるが、累 38

36
37

40
41

行までを選択して貼りつける。

H3 セルをコピーし、H4 以下、データのある
最終行までを選択して貼りつける。

42 I 列：I2 セルに「中値平均」と入力し、I22 セル

し引いた値の 2 乗を累積する計算を行う。Sy は、 37
積途中の値も使用するためブレークダウンした計 39算を行う。便宜上、N 列は空列とする。

40

O 列：O2 セルに「Sy1」と入力する。O22 セルに 41「=($H3‑$I22)^2+N22」という計算式を入れ 42

日本テクニカルアナリスト協会

2017.663

Technical Analysts Journal

る。O22 セルをコピーして、O23 からデータ

1のある最終行まで選択して貼りつける。

2
3

P 列：P2 セルに「Sy2」と入力する。O22 セルをコピーして P22 セルに貼りつける。
「=($H3‑

4$I22)^2+O22」 と い う 計 算 式 が 入 る の で、

5「$H3」 を「$H4」 に 書 き 換 え る。P22 セ ル

6をコピーして、P23 からデータのある最終行

7まで選択して貼りつける。

8
9Q 列 〜 AG 列：Q2 〜 AG2 セ ル に は「Sy3」 〜「Sy19」と数字を 1 つずつ加算しながら入力

10する。Q22 〜 AG22 セルには左隣のセルをコ11

ピーして貼りつけ、「$H」に続く数字は 1 つ

12ずつ加算する。Q22 〜 AG22 のセルをコピー

13

し、Q23 〜 AG23 からそれぞれの最終行まで

14を選択して貼りつける。

15

19
21

26 4．Sxy の計算

Sxy の計算では、計算対象とする価格系列につ28 いて、それぞれの時間番号から時間番号の平均を29 差し引いた値に、それぞれの価格から価格系列の30 平均値を差し引いた値を掛け合わせた結果を累積31 する。Sxy は「=COVAR(xx : xx, yy : yy)* zz」とい

32 う計算式で求められるが、累積途中の値も使用す

33 るためブレークダウンした計算を行う。便宜上、
34 AI 列は空列とする。

35 AJ 列：AJ2 セルに「Sxy1」と入力する。AJ22 セルに「=($H3‑$I22)*$K$3+AI22」という計算
36

式を入れる。AJ22 セルをコピーして、AJ2337からデータのある最終行まで選択して貼りつ

38

ける。

39

40 AK 列：AK2 セ ル に「Sxy2」 と 入 力 す る。AJ22

セルをコピーして AK22 セルに貼りつける。
「=($H3‑$I22)*$K$3+AJ22」という計算式が

41
42
64

をコピーして貼りつけ、「$H」に続く数字と「$K$」に続く数字をそれぞれ 1 つずつ加算す

78
9る。AL22 〜 BB22 のセルをコピーし、AL23 10〜 BB23 からそれぞれの最終行までを選択し 11て貼りつける。

12

BC 列：BC1 セ ル に「=COVAR(H3:H22,J$3:J$22) 13*$J$1」 と 入 力 す る。BC2 セ ル に「 累 積 14
Sxy」 と 入 力 す る。BB22 セ ル を コ ピ ー し 15

で、「$H21」 を「$H22」 に、「$K$21」 を 18
して、BC23 からデータのある最終行まで選 20等しいことを確認する。

5．Sek の計算

22
23
24

Se は、Sy ‑ Sxy * Sxy / Sx という式で計算する。 25

25
27

力する。AL22 〜 BB22 セルには左隣のセル

6

択して貼りつける。BC1 の値が BC22 の値と 21ことを確認する。

24「Sxy19」と数字を 1 つずつ加算しながら入5に 書 き 換 え る。AH22 セ ル を コ ピ ー し て、貼りつける。AH1 の値が AH22 の値と等しい

23

AL 列 〜 BB 列：AL2 〜 BB2 セルには「Sxy3」〜

4「$K$22」に書き換える。BC22 セルをコピー 19

AH23 からデータのある最終行まで選択して22択して貼りつける。

3

セルに貼りつける。
「=($H21‑$I22)^2+AG22」という計算式が入るので、「$H21」を「$H22」

20

して、AK23 からデータのある最終行まで選2

計算式を入力する。AH2 セルに「累積 Sy^2」と入力する。AG22 セルをコピーして AH22

18「$K$4」に書き換える。AK22 セルをコピー

1て BC22 セ ル に 貼 り つ け る。「=($H21‑ 16$I22)*$K$21+BB22」という計算式が入るの 17

16 AH 列：AH1 セ ル に「=DEVSQ(H3:H22)」 と い う
17

入るので、
「$H3」を「$H4」に、「$K$3」を

累積途中の Sx、Sy、Sxy の値を用いて計算し、そ 26の計算結果をさらに累積する。標準誤差を計算す 27
る「STEYX(xx : xx, yy : yy)」とは計算結果が異なる。 28
便宜上、BD 列は空列とする。

29

BE 列：BE2 セ ル に「Se1」 と 入 力 し、BE22 セ 30
ル に「=O22‑AJ22^2/$M$3+BD22」 と い う 31
計算式を入れる。BE22 セルをコピーして、 32
BE23 からデータのある最終行まで選択して 33
貼りつける。

34

BF 列：BF2 セルに「Se2」と入力し、BE22 セル 35をコピーして BF22 セルに貼りつける。BF22 36
セ ル に は「=P22‑AK22^2/$M$3+BE22」 と 37
いう計算式が入るので、「$M$3」を「$M$4」 38に 書 き 換 え る。BF22 セ ル を コ ピ ー し て、 39
BF23 からデータのある最終行まで選択して 40貼りつける。

41

BG 列 〜 BW 列：BG2 〜 BW2 セルには「Se3」〜 42

テクニカルアナリストジャーナル

2017.6NTAA JOURNAL 2017.6

1
2
3
4
5
6
7
8
9
10
11
12
13

「Se19」と数字を 1 つずつ加算しながら入力する。BG22 〜 BW22 セルには、左隣のセルをコピーして貼りつけ、「$M$」に続く数字
を 1 つずつ加算する。BG2 〜 BW22 のセルをコピーし、BG23 〜 BW23 からそれぞれの最終行までを選択して貼りつける。

BX 列：BX2 セルに「Sek」と入力し、BW22 セルをコピーして BX22 セルに貼りつける。BX22

セ ル に は「=AH22‑BC22^2/$M$21+BW22」と い う 計 算 式 が 入 る の で、「$M$21」 を上下限までのかい離幅（対数）である。

4と い う 式 を 入 れ、 確 率 が 0.25、 自 由 度

6

CE 列：CE1 セ ル に「=T.INV.2T(0.25,$J$1‑1)」 5
が $J$1‑1 の 場 合 の t 値 を 求 め る。CE2 セル に「 範 囲 75」 と 入 力 す る。CE22 セ ルに「=$CE$1 * SQRT((1/$J$1+(1‑$K$1) * (1‑789$K$1)/$M$1)*BZ22)/1000」という計算式を 10

らデータのある最終行まで選択して貼りつけ 12
でのかい離幅（対数）である

視覚的な区切りとするため、便宜的に BY 列をに「=BX22/($J$1‑2)」という計算式を入れる。
BZ22 セルをコピーして、BZ23 からデータのある最終行まで選択して貼りつける。

22 CA 列：CA2 セルに「Beta」と入力する。CA22 セ
233

る。この値が、回帰値から 75% の上下限ま 13

18 BZ 列：BZ2 セルに「Ve」と入力する。BZ22 セル

21

貼りつける。この値が、回帰値から 95% の

2択して貼りつける。

して、BX23 からデータのある最終行まで選

17 空列とする。

20

CD23 からデータのある最終行まで選択して入 れ る。CE22 セ ル を コ ピ ー し て、CE23 か 11

15 6．K チャートの範囲の計算

19

う計算式を入れる。CD22 セルをコピーして、 1「$M$22」に書き換える。BX22 セルをコピー

14
16

Vol.4

ルに「=BC22/$M$1」という計算式を入れる。

14
15

7．作図用データの計算

16

視覚的な区切りとするため、便宜的に CF 列を 17空列とする。

18

CG 列：CG2 セ ル に「95% 下 限 」 と 入 力 す る。 19
CG22 セ ル に「=10^(CC22‑CD22)」 と い う 20
計算式を入れる。CG22 セルをコピーして、 21
CG23 からデータのある最終行まで選択して 22
貼りつける。

23

CA22 セルをコピーして、CA23 からデータ

CH 列：CH2 セ ル に「75% 下 限 」 と 入 力 す る。 24

26 CB 列：CB2 セ ル に「Alpha」 と 入 力 す る。CB22
セルに「=I22‑CA22*$K$1」という計算式を
27

計算式を入れる。CH22 セルをコピーして、 26

24
25

28

のある最終行まで選択して貼りつける。

入 れ る。CB22 セ ル を コ ピ ー し て、CB23 かCH22 セ ル に「=10^(CC22‑CE22)」 と い う 25
CH23 からデータのある最終行まで選択して 27
貼りつける。

28

らデータのある最終行まで選択して貼りつCI 列：CI2 セルに「回帰値」と入力する。CI22 セ 29

31 CC 列：CC2 セ ル に「LR」 と 入 力 す る。CC22 セル に「=(CB22+CA22*($J$1))/1000」 と い う
32

CI22 セルをコピーして、CI23 からデータの 31

29
30

33
34
35
36

ける。

39
40
41
42

ある最終行まで選択して貼りつける。

32

計算式を入れる。CC22 セルをコピーして、

CJ 列：CJ2 セ ル に「75% 上 限 」 と 入 力 す る。 33

貼りつける。この値が、価格系列を基に計算

計 算 式 を 入 れ る。CJ22 セ ル を コ ピ ー し て、 35

CC23 からデータのある最終行まで選択してされた、回帰値の対数である。

37 CD 列：CD1 セ ル に「=T.INV.2T(0.05,$J$1‑1)」
38

ル に「=10^CC22」 と い う 計 算 式 を 入 れ る。 30

CJ22 セ ル に「=10^(CC22+CE22)」 と い う 34
CJ23 からデータのある最終行まで選択して 36
貼りつける。

37と い う 式 を 入 れ、 確 率 が 0.05、 自 由 度 が

CK 列：CK2 セ ル に「95% 上 限 」 と 入 力 す る。 38

る。CD2 セ ル に「 範 囲 95」 と 入 力 す る。
CD22 セ ル に「= =$CD$1*SQRT((1/$J$1+(1‑

計算式を入れる。CK22 セルをコピーして、 40$J$1‑1 の 場 合 の t 値（ 両 側 検 定 ） を 求 め$K$1)*(1‑$K$1)/$M$1)*BZ22)/1000」 と い

CK22 セ ル に「=10^(CC22+CD22)」 と い う 39
CK23 からデータのある最終行まで選択して 41
貼りつける。

日本テクニカルアナリスト協会

2017.642
65

Technical Analysts Journal

1
2
3
4

＜K チャートの計算方法・ユーザー定義関数を作成して計算する＞

効化」ボタンをクリックしてユーザー定義関数を有効にする。

2．計算の実行

1．事前準備5 （1）EXCEL を起動して、画面上部に「開発」タブ

ユーザー定義関数が入力されている EXCEL ブッが表示されていない場合は、「ファイル」タ6

クを開く。

ブをクリックし、左側メニュー下部にある「オ78

ワークシートに価格系列を入力する。例えば A

10

3
4
5
6
7

列に日付、B 列に始値、C 列に高値、D 列に安値、 8ボンのユーザー設定」メニューをクリック。

下位を新しい日付となるように並べる。

E 列に終値、F 列に出来高など。上位を古い日付、 9右側のウィンドウの右側、「リボンのユーザー

11

2プション」をクリック。表示される「EXCELのオプション」ウィンドウで、左側にある「リ9110

価格系列が始値、高値、安値、終値の 4 本値の 11

設定」欄の中にある「開発」にチェックマー

場合は、中値（=( 高値 + と安値 )/2）の列を作成する。 12「開発」タブをクリックし、「Visual Basic」の14 （2）

合は、中値の自然対数（=log( 中値 , 10)）の列を 14

12クを入れる。

13

ゼロあるいはマイナスの値を含まない系列の場 13

アイコンをクリック。表示されるウィンドウ

15

作成する。

の「挿入」メニューの中にある「標準モジュー1617

回帰値を表示するセルに、「=Kaiki( 開始セル番 16

ル」をクリック。
「標準モジュール」の中の地：終了セル番地 )」と入力する。データは 1 列 17て、以下のソースコードを入力する。「ʼ」の範囲に空欄や文字を含まないこと。元データを自 19「Module 1」が選択されていることを確認し1819とし、複数列を選択しないこと。また、指定した 18

右側は説明なので、入力しなくても計算結果

20

然対数とした場合は、「=10^Kaiki( 開始セル番地： 20に影響はない。

21「開発」タブの「マクロのセキュリティ」を
22 （3）
23
25

終了セル番地 )」とすると自然数の値となる。

表示してすべてのマクロを無効にする」を選ないこと。また、指定した範囲に空欄や文字を含 25

27 （4）ファイルを保存するときは、マクロが有効となる「.xlsm」形式で保存する。

28

29 （5）ファイルを開いたときにシート上部に「セキュリティの警告

30

マクロが無効にされました。
」と表示される場合は、「コンテンツの有31

K チ ャ ー ト の バ ン ド 幅 を 表 示 す る セ ル に、 22「=Kchart( 開始セル番地：終了セル番地 , 確率 )」 23

択する。

26

21

クリック。
「セキュリティセンター」ウィン

ドウの「マクロの設定」メニューで「警告を2415と入力する。データは 1 列とし、複数列に跨がら 24
まないこと。確率は 0.05、0.25 など、0 超 〜 1 26未満の数値で指定する。元データを自然対数とし 27た場合は、「=10^Kchart( 開始セル番地：終了セル 28
番地 , 確率 )」とすると自然数の値となる。

29

（5）
＋
（6）が上限値、（5）−（6）が下限値となる。 30
31

32

32

33

ユーザー定義関数ソースコード

33

34

Option Base 1 '3435-------------------------------------------------------- 配列変数の最初の添え字を 1 に固定'========== セル範囲指定と確率を受け取り、K チャートのバンド幅を返すユーザー定義関数

36

Function Kchart（セル範囲 As Range, 確率 As Variant）

37
39
40
41

36
37

' 使用する変数と型を宣言する

38

35

38

Dim Ans()

As Double '---------------------------------------- 答え

Dim cnt

As Integer ' --------------------------------------- 繰り返しの数を数えるカウンター

Dim Data

As Variant ' --------------------------------------- データ

40

Dim Kakuritsu

As Variant ' --------------------------------------- 確率

41

42

39

42
66

テクニカルアナリストジャーナル

2017.6NTAA JOURNAL 2017.6

1
2
3
4
5
6
7
8
9
10
11
12
13
14

Vol.4

' 初期値を設定する

1

Kakuritsu = 確率 '-------------------------------------------------------- ＊確率を代入する。Kaiki との相違点
cnt = 1 '2-------------------------------------------------------- カウンターに初期値をセット

3

Data = セル範囲 .Value ʻ ----------------------------------------------- 指定範囲にあるデータを格納

4' エラーをチェックする5

If CheckArray(Data) = False Then Exit Function ' ----------- 複数列を選択した場合は中止

6

If CheckData(Data) = False Then Exit Function ' ------------- 指定範囲に空欄や文字があれば中止

7

If CheckRitsu(Kakuritsu) = False Then Exit Function ' ----- 確率の指定が不適切なら中止

8' バンド幅を計算し、結果を返す
Ans = Calc(Data, Kakuritsu) ' ---------------------------------------- Calc にデータ群と確率を渡して、結果を Ans に代入

9Kchart = Ans(1) ' -------------------------------------------------------- ※ Calc からの戻り値の 1 番目を返す。Kaiki との相違点

10

End Function

11'========== セル範囲指定でデータ群を受け取り、回帰値を返すユーザー定義関数

12

Function Kaiki( セル範囲 As Range)

13' 使用する変数と型を宣言する

14

Dim Ans()

As Double '---------------------------------------- 答え

Dim cnt

As Integer ' --------------------------------------- 繰り返しの数を数えるカウンター

Dim Data

As Variant ' --------------------------------------- データ

16

17

Dim Kakuritsu

As Variant ' --------------------------------------- 確率

1718' 初期値を設定する

15
16

19
20
21
22
23
24
25
26
27
28
29
30
31
32

15

18

Kakuritsu = 0.5 ' -------------------------------------------------------- ※ダミー値を代入する。Kchart との相違点
cnt = 1 '19-------------------------------------------------------- カウンターに初期値をセット

20

Data = セル範囲 .Value ʻ ----------------------------------------------- 指定範囲にあるデータを格納

21' エラーをチェックする22

If CheckArray(Data) = False Then Exit Function ' ----------- 複数列を選択した場合は中止

23

If CheckData(Data) = False Then Exit Function ' ------------- 指定範囲に空欄や文字があれば中止

24

If CheckRitsu(Kakuritsu) = False Then Exit Function ' ----- 確率の指定が不適切なら中止

25' 回帰値を計算し、結果を返す
Ans = Calc(Data, Kakuritsu) ' ---------------------------------------- Calc にデータ群と確率を渡して、結果を Ans に代入
Kaiki = Ans(2) '26-------------------------------------------------------- ※ Calc からの戻り値の 2 番目を返す Kchart との相違点

27

End Function

28
29'========== データ群と確率を受け取り、K チャートのバンド幅と回帰値を計算して返す

30

Function Calc(Data As Variant, Kakuritsu As Variant)

31' 使用する変数と型を宣言する
Dim Ans(2)As Double '---------------------------------------- 答え

32

33

Dim cnt

As Integer ' --------------------------------------- 繰り返し回数を数えるカウンター33

34

Dim FirstNo

As Integer ' --------------------------------------- 繰り返しの開始番号

Dim EndNo

As Integer ' --------------------------------------- 繰り返しの終了番号

34

35
36
37
38
39
40

35

Dim KeisanKikan As Integer ' --------------------------------------- 計算期間36

Dim Alpha

As Double '---------------------------------------- α

Dim Beta

As Double '---------------------------------------- β

Dim Gosa

As Double '---------------------------------------- K チャートのバンド幅

Dim K

As Double '---------------------------------------- 回帰値

37
38
39

Dim PriceAverage ------------------------------------------------------- As Double ' 価格の平均値

40

41

Dim SeAs Double '---------------------------------------- Se

41

42

Dim Sek

As Double '---------------------------------------- Sek

42

日本テクニカルアナリスト協会

2017.667

Technical Analysts Journal

1

Dim Sum

As Double '---------------------------------------- 合計

1

2

Dim SxAs Double '---------------------------------------- Sx

Dim Sxy

As Double '---------------------------------------- Sxy

2

Dim SyAs Double '---------------------------------------- Sy

Dim t

As Double '---------------------------------------- t 値

3
4
5

3
4

Dim TimeAverage ------------------------------------------------------- As Double ' 時間の平均値

6

Dim Ve7

As Double '---------------------------------------- Ve

9

KeisanKikan = UBound(Data, 1) ' ---------------------------------- 計算期間はデータの数

8

t = Application.WorksheetFunction.TInv(Kakuritsu, KeisanKikan ‑ 1)

9

' ------------------------------------------------------- t 値はワークシート関数から取得

10FirstNo = 1

11' ------------------------------------------------------- 繰り返しの開始番号をセット

EndNo = KeisanKikan ' ------------------------------------------------ 繰り返しの終了番号は、データの数

12' 平均値を求める

13

For cnt = FirstNo To EndNo '------------------------------------- データの数だけ繰り返す

14

Sum = Sum + Data(cnt, 1) ' ------------------------------------ Data を集計

15
17

Sxy = Sxy + (cnt ‑ TimeAverage) * (Data(cnt, 1) ‑ PriceAverage)

22
'

24

-------------------------------------------------------- 累積途中の Sx、Sxy、Sy を用いて Se を計算（K チャート独自）
Sek = Sek + Se '----------------------------------------------------- Se を累積（K チャート独自）

25' 必要なパラメータを計算する
Ve = Sek / (KeisanKikan ‑ 2) ' ----------------------------------- Sek を用いて計算（K チャート独自）

27

Beta = Sxy / Sx ' ------------------------------------------------------- βを計算

28

Ans(1) = t * Sqr((1 / KeisanKikan + (1 ‑ TimeAverage) * (1 ‑ TimeAverage) / Sx) * Ve)30' ------------------------------------------------------- Ans(1) にバンド幅をセット

31

Ans(2) = PriceAverage + Beta * (KeisanKikan ‑ TimeAverage)32' ------------------------------------------------------- Ans(2) に回帰値をセット

33

Calc = Ans' ------------------------------------------------------- 計算結果を返す

End Function

35
36

40
41

68

27
29
30
31
32
34

38
39

Dim Ans

As Boolean ' -------------------------------------- 答え

Dim Temp

As Variant ' --------------------------------------- データ数を一時保管するダミー変数

40

Dim i

As Long '------------------------------------------- 次元数を数えるカウンター41' 初期値をセットする

42

26

37

' 使用する変数と型を宣言する

39

24

36

Function CheckArray(Data As Variant)

38

23

35

'========== 複数列が選択されているかどうかを判断する

37

21

33

' 結果を返す

34

20

28

Alpha = PriceAverage ‑ Beta * TimeAverage ' ------------- αを計算

29

19

25

Next cnt

26

18

22

Se = Sy ‑ Sxy * Sxy / Sx

23

14

17

Sy = Sy + (Data(cnt, 1) ‑ PriceAverage) * (Data(cnt, 1) ‑ PriceAverage)

21

13

TimeAverage = (KeisanKikan + 1) / 2 ' ----------------------- 時間の平均値

Sx = Sx + (cnt ‑ TimeAverage) * (cnt ‑ TimeAverage)

20

12

16

For cnt = FirstNo To EndNo '------------------------------------- データの数だけ繰り返す

19

11

PriceAverage = Sum / KeisanKikan ' -------------------------- 価格の平均値' Sx、Sy、Sxy、Se、Sek を計算する

18

10

15

Next cnt

1667' 初期値をセットする

8

5

42
テクニカルアナリストジャーナル

2017.6NTAA JOURNAL 2017.6

1
2
3
4
5
6
7
8

Ans = True

Vol.4

' ------------------------------------------------------- 答えの初期値は真1' 配列変数の次元を数える

2

On Error Resume Next ' ----------------------------------------------- エラーが出たら繰り返しを終了

3

Do While Err.Number = 0 ' ------------------------------------------- エラーが無い間は繰り返す
i=i+1

4

' ------------------------------------------------------- 次元の数を加算

5

Temp = UBound(Data, i) ' ------------------------------------------ 指定次元のデータが無ければエラー

6

Loop

7

' エラー後の処理
On Error GoTo 0 ' ------------------------------------------------------- エラーが出たら以下を実行

8

9

If UBound(Data, i ‑ 1) > 1 Then ' ---------------------------------- 2 列目以降にデータがあれば

9

10

MsgBox(" 複数の列は指定できません。") ' ----------------- エラーメッセージを表示

10

11
12
13
14
15

Ans = False' ------------------------------------------------------- 答えを偽にする

11

End If12' 結果を返す

13

CheckArray = Ans '------------------------------------------------------ 答えを返す

14

End Function

15

16'========== 指定範囲に空欄や文字などの計算不能データがあるかどうかを判断する

16

17

Function CheckData(Data As Variant)

17

18' 使用する変数と型を宣言する

18

19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

Dim cnt

As Integer ' --------------------------------------- 繰り返し回数を数えるカウンター

Dim Ans

As Boolean ' -------------------------------------- 答え

Dim Number

As Integer ' --------------------------------------- データの数

19
20
21

' 初期値をセットする
Ans = True

22

' ------------------------------------------------------- 答えの初期値は真23

Number = UBound(Data, 1) ' ---------------------------------------- データの数を代入

24' データ数は適切な範囲内か

25

If Number < 3 Or Number > 100 Then ' ------------------------ 3 個未満、100 個超はエラー
MsgBox “ 計算期間は 3 〜 100 の範囲で指定してください。” ʻ エラーメッセージを表示
Ans = False

26' ------------------------------------------------------- 答えを偽に

27

End If28' 指定範囲に空欄や文字はないか29

For cnt = 1 To Number ' ---------------------------------------------- データの最初から最後まで繰り返す

30

If Data(cnt, 1) = "" Then ' ------------------------------------------ データは空欄か

31

MsgBox (" 指定範囲にデータの欠落があります。") ' エラーメッセージを表示

32

Ans = False ' ------------------------------------------------------- 答えを偽に

33

ElseIf IsNumeric(Data(cnt, 1)) = False Then ' -------------- データは数字以外か
MsgBox (" セルに数字以外のデータが含まれています。")

34' ------------------------------------------------------- エラーメッセージを表示

35

Ans = False ' ------------------------------------------------------- 答えを偽に

36

End If37

Next cnt

38' 結果を返す

39

CheckData = Ans ' ------------------------------------------------------- 答えを返す

40

End Function

41

41

42

42
日本テクニカルアナリスト協会

2017.669

Technical Analysts Journal

1'========== 確率の値が適切かどうかを判断する

1

2

Function CheckRitsu(Kakuritsu As Variant)2' 使用する変数と型を宣言する

3

Dim Ans

4

3

As Boolean ' -------------------------------------- 答え

4' 初期値をセットする

5

Ans = True

6

' ------------------------------------------------------- 答えの初期値は真' 確率の指定は適切か

7

If IsNumeric(Kakuritsu) = ﬂse Then ' ----------------------------- 確率は数字以外か

8
9

Ans = False

9

Ans = False

12' ------------------------------------------------------- 答えを偽に' ------------------------------------------------------- 答えを偽に

14

CheckRitsu = Ans ' ------------------------------------------------------ 答えを返す

15

15

End Function

16

16

17
18

11
13

' 結果を返す

14

10
12

End If13

7
8

MsgBox “ 確率には、0.0001 〜 0.9999 の少数で指定してください。” ʻ エラーメッセージを表示

11

6

MsgBox “ 確率には、0.0001 〜 0.9999 の少数で指定してください。” ʻ エラーメッセージを表示
ElseIf Kakuritsu < 0.0001 Or Kakuritsu > 0.9999 Then '‑ 確率は適切な数か

10

5

17
プロフィール18

19 古城 鶴也 MFTA®

191977 年 東 京 農 工 大 学 農 学 部 卒。
20 1987 年日産證券（株）調査部入社。
21 投資情報部長の後、第一投資顧問（株）出向を経て経営企画部部長、
22
有 価 証 券 部 長、デ ィーリング 室
23 長、業務管理部部長を歴任。201324 年ジェイアイ傷害火災（株）財務部、2015 年日本テクニカルアナ
25
リスト協会事務局業務部長。2000
26 年から同協会理事、独自開発の K チャートで MFTA® を
27 取得。2011 年ストックボイスにレギュラー出演。金融
財政事情研究会「テクニカルアナリスト短期養成スクー
28 ル」、早稲田大学、南山大学、明治大学のオープンカレッ
29 ジ等の講師を務める。共著に日本テクニカル分析大全他。

20
21
22
23
24
25
26
27
28
29

30

30

31

31

32

32

33

33

34

34

35

35

36

36

37

37

38

38

39

39

40

40

41

41

42

42
70

テクニカルアナリストジャーナル

2017.6