スパンモデル(Span Model)

 

概要
図1 スパンモデル

征木利彦氏が考案したテクニカル指標です。一目均衡表を応用してアレンジを加えたもので、考案者の征木氏は自身が考案したもう一つの指標であるスーパーボリンジャーと組み合わせて使用することを推奨しています。

一目均衡表のうち、先行スパン1と先行スパン2、遅行スパンの3つのラインと雲を使用します。一目均衡表では転換線と基準線を判断に使い、先行スパンの2つのラインは雲形成のためにしか使われていませんでしたが、スパンモデルでは、2つの先行スパンの位置関係をトレンドの方向性の判断に使用します。

計算方法

一目均衡表と全く同じ方法でライン(スパン)と雲などを定義し計算します。

以上を図1のように描画します。

Pythonによる実装

必要なライブラリを読み込みます

!pip install mpl_finance #Collaboratoryに入っていないライブラリを読み込みます
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import mpl_finance
import sys
import numpy as np
from datetime import datetime
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
import requests
import io

データをcsvファイルから読み込みます

#ファイルの読み込み
URL = "https://neulab.co.jp/wp-content/uploads/pseudo_data.csv" #csvファイルのURL

datafile = requests.get(URL)#ファイルの読み込み

#データフレームの作成
df_temp = pd.read_csv(io.BytesIO(datafile.content), header=0, index_col=0, parse_dates=True, encoding="UTF-8")

df = df_temp.loc[:,['Open','High','Low','Close']]
df.head()

一目均衡表と同様に先行スパンと遅行スパンを計算します

canvas_color = '#fffafa'
line_color = '#c8ced1'
font_color = '#171510'
colorup = '#bf0000'
colordown = '#006fbf'

df_high_rate = df['High']
df_low_rate = df['Low']

df_high_tenkan = df_high_rate.rolling(window=9).mean()
df_low_tenkan = df_low_rate.rolling(window=9).mean()
df_tenkan = (df_high_tenkan + df_low_tenkan)/2

df_high_kijyun = df_high_rate.rolling(window=26).mean()
df_low_kijyun = df_low_rate.rolling(window=26).mean()
df_kijyun = (df_high_kijyun + df_low_kijyun)/2

df_senkouspan1 = (df_tenkan + df_kijyun)/2
df_senkouspan1 = df_senkouspan1.shift(25)

df_high_senkouspan2 = df_high_rate.rolling(window=52).max()
df_low_senkouspan2 = df_low_rate.rolling(window=52).min()
df_senkouspan2 = (df_high_senkouspan2 + df_low_senkouspan2)/2
df_senkouspan2 = df_senkouspan2.shift(25)

df_chikouspan = df['Close'].shift(-25)

チャートへの描画と保存例です

canvas_color = '#fffafa'
line_color = '#c8ced1'
font_color = '#171510'
colorup = '#bf0000'
colordown = '#006fbf'

n_data = -74
n_data2 = -100
data = df[n_data:]
data2 = df[n_data2:]
ohlc = np.vstack((range(len(data)), data.T)).T

fig = plt.figure(figsize=(12, 8))
fig.patch.set_facecolor(canvas_color)

ax = fig.add_subplot(1, 1, 1)
ax.patch.set_facecolor(canvas_color)
mpl_finance.candlestick_ohlc(ax, ohlc, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
#ax.plot(range(len(data)), df_kijyun.values[n_data:], color='black', label='Kijyun' )
#ax.plot(range(len(data)), df_tenkan.values[n_data:], color='darkred', label='Tenkan')
ax.plot(range(len(data2)), df_senkouspan1.values[n_data2:], color='darkgreen', label='Senkou-span1')
ax.plot(range(len(data2)), df_senkouspan2.values[n_data2:], color='darkblue', label='Senkou-span2')
ax.plot(range(len(data)), df_chikouspan.values[n_data:], color='magenta', label='Chikou-span')
ax.fill_between(range(len(data2)), df_senkouspan1.values[n_data2:], df_senkouspan2.values[n_data2:], facecolor='lime', alpha=0.5)
ax.grid()

#ロゴ読み込み
logoURL = "https://neulab.co.jp/wp-content/uploads/logo.png" #ロゴファイルのURL
img_c = plt.imread(logoURL)
imagebox = OffsetImage(img_c, zoom=0.020) #画像をimageboxにいれる。
imagebox.image.axes = ax
im_sabo = AnnotationBbox(imagebox, (0, 9850), xybox=(0, 9950), xycoords="data", boxcoords="data", pad=0.3, frameon=False)

l1,l2 = ax.get_legend_handles_labels()
ax.legend(l1,l2, loc='upper right', fontsize=14, edgecolor='none', facecolor=canvas_color)

ax.add_artist(im_sabo)
ax.set_ylabel("Price of Something", fontsize=22)
ax.set_ylim(9000., 10000.)
ax.yaxis.tick_right()
ax.yaxis.set_label_coords(0, 0.5)
ax.tick_params(labelsize=24, labelcolor=font_color, color=line_color)

ax.spines['left'].set_linewidth(0)
ax.spines['right'].set_linewidth(0)
ax.spines['top'].set_linewidth(0)
ax.spines['bottom'].set_linewidth(0)

xtick0 = 2
plt.xticks(range(xtick0,len(data2),12), [x.strftime('%m/%d') for x in df_kijyun.index][xtick0::12])

plt.subplots_adjust(left=0.03, right=0.92, bottom=0.1, top=0.99)
plt.grid(which='major',color=line_color,linestyle='-')
plt.grid(which='minor',color=line_color,linestyle='-')

ax.set_axisbelow(True)

plt.savefig('Spanmodel.png')

以上のコードをGoogle社の提供しているColaboratory上で公開しており、実際に動作させることができます。

リンクはこちら

スパンモデルの基本的な使い方

予想の方法は、雲や遅行スパンに関しては一目均衡表と同様、最終日前のデータを使って予想を行いますが、先行スパン1と2を、移動平均線の短期線、長期線に見立ててクロスを見て予想している点が異なります。クロスした場合以下のように売買のトレンドを考えます。

また雲と遅行スパンの使い方については一目均衡表と同様です。

図2がスパンモデルを使った予想の1例です。遅行スパンや雲の使い方についてのより詳しい情報は一目均衡表の項目をご覧ください。

図2 スパンモデルによる予想
注意点

一目均衡表の転換線が9区間の移動平均線に相当する動きをするため、相場の変動に対して9区間の移動平均線と同等の感度で、トレンドを捉えることはできますが、より短期の判断は他のテクニカル指標と組み合わせて使用する必要があります。


※このHPページで紹介しているテクニカル指標を使った取引ルールや売買シグナルの見方は一般的な考え方に基づくものであり、利益の増加や損失の減少を保証するものではありません。ご自身の判断にてお取引いただきますようお願いいたします。


現在、ニューラボでは人工知能による取引アルゴリズムを開発中です。11月にリリース予定。乞うご期待!
自動取引にご興味を持たれましたら お問い合わせページよりお気軽にお問合せください。