トレンド成分とサイクル成分という考え方を、pythonを使って説明します。
2021年12月21日
トレンド成分とサイクル成分
日々観測される値動きは唯一無二のものであり、同じ値動きが再び観測されることはありません。 市場に参加する人はその時々で異なり、また市場参加者のトレードの目的や動機も異なるので、まったく同じ値動きは決して起こらないのです。
まったく同じ値動きは起こりませんが、所詮は人の営みですので、値動きには「過去と似た動きを繰り返す」という特徴があります。 「歴史は繰り返す」は相場も同じで、だからこそ過去の値動きは研究する価値があるのです。
トレーダーは繰り返される傾向をパターンとして認識し、値動きの予測に活かします。 パターン認識が可能な対象はチャートに並ぶローソクの形状だけでなく様々です。
トレンド-サイクル分析
値動きは、「トレンド成分とサイクル成分によって作られる」という考え方があります。 メジャーなものではないので、そんな考えもあるんだな程度で聞いてください。
この2つの力が合わさって値動きは形成されていると考えます。 「トレンド成分と値動き」、「サイクル成分と値動き」の間にものパターンを見出すことができます。
pythonで仮想の値動きを作ってみる
トレンド成分とサイクル成分の話を言葉だけで説明しても分かりづらいと思いますので、具体例をあげて解説します。
まず、こちらの画像をご覧ください。
高値と安値を切り上げる典型的な上昇のZIGZAGを描いています。 状況としては、頻繁に観察される5波動による上昇を終え、エクステンションして上昇継続となるのか、それとも本格的な調整(複数波動による調整)に入るのかという場面です。
こちらの画像及び価格データはpythonで作りました。画像の描写にはmatplotlib
を使っています。もし、色々いじってみたい方がいれば、下記のコマンドでインストールしてください。
pip install matplotlib
画像と価格データを作成したコードは以下のようなものです。
import matplotlib.pyplot as plt
trend = 1
cycle = 3
up = True
x = [0]
for i in range(3):
up = True
for j in range(10):
if up:
value = x[-1] + cycle + trend
x.append(value)
if j == 4:
up = False
else:
value = x[-1] - cycle + trend
x.append(value)
fig = plt.figure(dpi=100, figsize=(8,5))
plt.plot(x)
plt.show()
冒頭のtrend = 1
とcycle = 3
が、トレンド成分とサイクル成分を数値で表したものです。
合計30回の値動きを作成し、その中身は上昇5回と下降5回の繰り返しになっています。 サイクル成分は、上昇時はプラスに作用し、下降時はマイナスに作用します。 トレンド成分は、サイクルの上昇下降に関わらずプラスに働きます。
サイクル成分
サイクル成分だけを取り出して描写してみます。そのためには、cycle = 3
はそのままに、trend = 0
としてやるだけです。
上昇5回、下降5回で、同じ値がプラスとマイナスされるだけなので、一定範囲内を上下すことになります。 サイクル成分は、ボラティリティとも表現できそうです。ボラティリティが大きいと一定範囲を上下するにしても、その範囲が大きくなります。
トレンド成分
今度はトレンド成分だけを抽出してみます。設定をtrend = 1
とcycle = 0
にします。
毎回トレンド成分の1がプラスされるだけなので、直線を描くことになります。 上昇トレンドであれば右肩上がり、下降トレンドであれば右肩下がり。 トレンドが強いと角度が急になります。
2つを合成する
初期設定のtrend = 1
とcycle = 3
のようにどちらも0でない場合、トレンド成分とサイクル成分を合成していることになります。
この設定でプログラムを走らせると最初の画像のようになるわけですが、直線と上下の振幅とを合成しただけで、良く見る値動きパターンを再現できるのはちょっと不思議な感じがします。
トレンド成分とサイクル成分のバランス
上昇時はサイクル成分の3とトレンド成分の1が足されて4ずつ増え、下降時はサイクル成分とトレンド成分が打ち消し合って2ずつ減ります。
上昇と下降は5回ずつ繰り返されるので、20の上昇の後、10の調整、つまり「半値押し」から上昇を再開し高値更新を続けます。
サイクル成分が強い
では、サイクル成分がこれよりも強くなった場合はどうなるでしょうか。例えば、trend = 1
とcycle = 5
といったケースです。
この場合、押しが深くなります。上昇6に対し下降(調整)が4になるので、2/3押しからの高値更新が繰り返されます。 これも相場でよく観察されるパターンだと言えるでしょう。
先ほど、サイクル成分はボラティリティとも言えるという話をしましたが、この例ではボラティリティの増加により、最高値が40から50に変わっています。
トレンド成分が同じでも、サイクル成分が強くなると値幅が増えることになります。
トレンド成分
では逆にトレンド成分が強い場合はどうなるでしょうか。例えば、trend = 3
とcycle = 3
といったケースです。
この場合、調整の動きになっても価格は下がりません。 上昇からヨコヨコを経て上昇を再開するパターンです。 つまり、トレンド成分が強いと「時間の調整」となりやすいわけです。 最高値も上がり、トレンドが強いと価格を大きく動かすという常識ともマッチした見た目になっています。
このようにトレンド成分とサイクル成分をいじると、相場で良く観察される値動きのパターンをいくつも再現できるのです。
言い方を変えれば、相場の値動きを説明できるとなりますから、「値動きはトレンド成分とサイクル成分によって作られる」という考えにも一理あると言えるのではないでしょうか。
押し目買いと戻り売り
相場の基本は、以下の2つです。
この基本的な売買に、トレンド成分とサイクル成分の考え方を活かせないでしょうか。
トレード日記に掲載しているチャート
日々書いているトレード日記には、コメントと共に上記のようなチャートを張り付けています。 チャートにはいくつかのインジケーターを表示しているので、その紹介をします。
TL
もし、値動きからトレンド成分だけを抽出することができれれば、その傾きからトレンドの向きを把握できます。 エントリーはトレンドに沿った方向を考えるので、トレンドを確認した段階で買うのか売るのかが決まることになります。
値動きからトレンド成分だけを取り出すのが、トレード日記で「TL」と表現しているインジケーターです。 トレンドを表している線なので、トレンドライン(Trend Line)の頭文字を取ってTLと呼んでいます。
見た目や使い方は移動平均線と似ています。 どちらもノイズを除去し傾向を捉えようとするものですが、 移動平均線はその名の通り「平均」のアプローチを、TLは値動きからサイクル成分を取り除く「減算」のアプローチを取っています。
オシレーター
上昇トレンドを確認できたとすれば、サイクル成分が上向きになった赤丸のポイントで買えば良いはずです。 赤丸のポイントは、トレンド成分とサイクル成分の方向が一致し、正に「押し目買い」のチャンスと考えられるからです。 また、赤丸の位置が頂点からずれるのは、「順張り」の流儀に従うためです。
しかし、実際の相場はこんな単純なサイクルを繰り返していないのは明らかです。 刻々と変化するサイクルの周期を捉えようとするのが、チャートの下に表示しているオシレーターになります。
一般的なオシレーターが「買われ過ぎ/売られ過ぎ」を見ているのに対し、このオシレーターはサイクルの周期を見ています。
SR
サイクルの方向が反転したポイントは、支持線もしく抵抗線だとも考えられます。 しかし、支持抵抗線だとは言っても反発する時もあれば、突破される時もあるのが現実です。
反発が起こったのかの判断を補助するのがドットで表示している「SR(Support and Resistance)」になります。 サイクル分析による限界に達していたとしても、実際に反発が起こらない限りドットは描写されません。 つまりドットが現れたら反発が起こったと判断できるわけです。
また、トレンド-サイクル分析では、SRを突破する状況をトレンド成分が支配的であると判断します。 これがトレンドモード(TM)と呼んでいるものです。 強いトレンドには乗りたいわけですが、この判断もSRが補助します。
書籍
もし、このページの内容に興味を持った方がいらっしゃれば、この2冊はオススメです。 私が上記のように相場を捉えることになった切っ掛けの本です。