変数と自分で行う計算
ローソク足から値幅と中間値を計算し、結果を表示します。
あるローソク足の高値が108、安値が101なら、差は7です。この値幅を各ローソク足で計算し、描画します。
もう1つのプログラムでは、2つの価格の中間値を計算します。どちらも、変数と簡単な算術演算を使います。
ローソク足が表すもの
ローソク足は、ある期間のデータをまとめたものです。期間の長さは時間足で決まります。例えば1時間足のデータなら、1本が1時間を表します。
基本となるデータは5つです。
open:期間の始値。high:期間の高値。low:期間の安値。close:期間の終値。volume:期間の出来高。単位はデータ提供元によります。
英語名の頭文字を取ってOHLCVと呼びます。この本の最初の例題では、すでに確定したローソク足のサンプルデータを使います。
closeは、プログラムが今処理しているローソク足の終値です。次のローソク足に進めば、その終値を使います。他の基本データも同じです。
少し歴史を:ローソク足の由来
ローソク足による表示のルーツは、18世紀の日本の米相場にあります。そこで生まれた相場分析の手法から、19世紀にローソク足チャートが発展しました。Steve Nisonの著書Japanese Candlestick Charting Techniques(1991年)によって、欧米でも広く知られるようになりました。
太い「実体」は始値と終値の間を表し、細い「ヒゲ」は期間中の高値と安値を示します。
歴史と図解:AAII Journal(英語)。
値幅を計算する
高値が108、安値が101なら、その期間に価格が動いた範囲は7です。
108 − 101 = 7
コードでは次のように書きます。
candle_range = high - lowhigh - lowは式です。プログラムがこれを評価して結果を求めます。-は引き算です。
candle_rangeは変数の名前です。=によって、右側の式の結果をこの名前に結び付けます。この操作を代入と呼びます。
「highとlowの差を計算し、その結果をcandle_rangeという名前にする」と読んでください。それ以降の行では、この名前で値を使えます。
分かりやすい名前を選ぶ
candle_rangeという名前なら、ローソク足の値幅だと分かります。xのような名前では、コードから意味を読み取りにくくなります。
この本では、英語の小文字で変数名を書き、単語をアンダースコアでつなぎます。数字で始めたり、空白を含めたりしないでください。candle_rangeとCandle_rangeは別の名前になります。
英字の名前を使う理由
言語のキーワードやPyneライブラリの名前は、def、close、plotのように英語に基づいています。英語の変数名なら、それらとも統一でき、日本語を話さない人もコードを読みやすくなります。後からプログラムを渡したり、共同作業をしたりするときにも役立ちます。
Pyne codeでは、変数名にアクセント付き文字や英字以外の文字も使えます。アクセントのない英字を使うのは、命名上の推奨です。別の言語のキーボードでも入力しやすく、国際的にコードを共有しやすくなります。そのため、この本ではこの形式に統一しています。
別パネルに表示する指標を作る
scriptsフォルダーにcandle_range.pyを作り、次のプログラムを書きます。
"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script
@script.indicator("Candle Range", overlay=False)
def main():
candle_range = high - low
plot(candle_range, "Range", color=color.orange, linewidth=2)main()の最初の行で値を計算し、2行目でcandle_rangeという名前を通じてplotに渡します。値は、使う前に代入しておく必要があります。
overlay=Falseは別パネルを指定します。値幅を専用のスケールで見られます。例えば、7という値幅と、100前後の価格では値の大きさが異なります。
保存し、前と同じデモデータで実行してください。

結果の読み方
高い位置の点は大きな価格差、低い位置の点は小さな値幅を示します。この計算は、ヒゲも含む高値と安値を使っています。
陽線と陰線で同じ値幅になることもあるため、この値から値動きの方向は分かりません。正しいローソク足データではhighはlow以上なので、結果が負になることはありません。
次のローソク足で変数はどうなるか
プログラムは各ローソク足で、次の2つの手順を繰り返します。
- そのローソク足の
highとlowからcandle_rangeを計算します。 plotが、そのローソク足の位置に値を表示します。
例えば、次のようになります。
- 1本目:
high= 108、low= 101なので、candle_range= 7。 - 2本目:
high= 110、low= 106なので、candle_range= 4。 - 3本目:
high= 109、low= 103なので、candle_range= 6。
チャートには7、4、6の3つの点が作られます。変数には、各ローソク足で現在の計算結果が代入されます。
過去のローソク足の値を参照する方法や、状態を保持する方法は後で学びます。
足し算、掛け算、割り算
コードでは、次の記号を使って計算します。
+:足し算。-:引き算。*:掛け算。/:割り算。
掛け算と割り算は、足し算と引き算より先に行います。先に計算する部分を括弧で指定できます。
価格範囲の中間値は、次のように求めます。
midpoint = (high + low) / 22つの価格を足し、その結果を2で割ります。high = 108、low = 101なら、中間値は104.5です。
小数点にはピリオドを使います。コードでも104.5と書きます。コンマは別の役割を持ち、例えば関数の引数を区切ります。
中間値を描画する
candle_midpoint.pyを作ります。
"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script
@script.indicator("Candle Midpoint", overlay=True)
def main():
midpoint = (high + low) / 2
plot(midpoint, "Midpoint", color=color.purple, linewidth=2)ここでは再びoverlay=Trueを使っています。中間値をローソク足と同じ価格スケールで見たいからです。

実行後にローソク足を1本選び、その位置の点を見てください。ヒゲも含めた値幅全体の中央にあります。始値と終値で決まる実体の中央とは、異なる場合があります。
括弧が大切な理由
次の2つの式は、異なる計算を表します。
(high + low) / 2
high + low / 22行目では、先にlowだけを2で割り、それにhighを足します。先ほどの108と101なら、結果は158.5です。これは2つの価格の中間値ではありません。
構文としてはどちらも正しいのに、結果が違います。手計算できる例を使えば、意図した計算になっているかをすぐ確認できます。
自分で試す
終値から始値を引き、ローソク足の実体の変化を符号付きで描画してください。
- ファイル名を
candle_change.pyにします。 - 指標のタイトルを
"Candle Change"にし、別パネルに表示します。 - 計算結果の名前を
candle_changeにします。 - 描画の名前を
"Change"にします。
実行前に、次の3つの場合の結果を計算してください。
open= 100、close= 104。open= 100、close= 97。open= 100、close= 100。
解答
結果は4、−3、0です。正なら終値が始値より高く、負なら低く、0なら同じ価格です。
"""
@pyne edge
"""
from pynecore.lib import close, color, open, plot, script
@script.indicator("Candle Change", overlay=False)
def main():
candle_change = close - open
plot(candle_change, "Change", color=color.blue, linewidth=2)3つのプログラムを比べる
値幅、中間値、変化を求めるプログラムを順に開いてください。どれもOHLCデータから変数を計算し、次の行で描画しています。データはローソク足ごとに処理します。違うのは計算とoverlayの設定です。
次の章では2本のローソク足を比較し、前のローソク足のデータを参照する方法を学びます。