目次
概要
リチャード・ドンチャン(Rechard Donchian)氏が提唱する4週ルールを基礎としたトレンドフォロー(順張り)用のブレイクアウトシステムを視覚化したトレンド系のテクニカル指標です。HLバンドともプライス・チャネル(Price channels)とも呼ばれます。

計算方法
高低線は過去n期間における最高値・最安値同士を線で結んでチャート化します。指標は最高値同士を結んだHバンド、最安値同士を結んだLバンド、また、HバンドとLバンドの平均値をとった中間線からなります。nの値は日足の場合、慣用的に10日や20日を使用することが多いです。図1はn=20を使用した描画例です。
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
疑似データを読み込みます
#ファイルの読み込み 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()
高低線を計算します
df_high = df['High'].rolling(20).max() df_low = df['Low'].rolling(20).min() df_medium = (df_high + df_low)/2
matplotを使用した描画例です
canvas_color = '#fffafa' line_color = '#c8ced1' font_color = '#171510' colorup = '#bf0000' colordown = '#006fbf' n_data = -100 data = df[n_data:] 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_high.values[n_data:] , color='darkred', ls='-', label='High') ax.plot(range(len(data)), df_medium.values[n_data:] , color='darkorange', ls='-', label='Medium') ax.plot(range(len(data)), df_low.values[n_data:] , color='darkblue', ls='-', label='Low') ax.grid() #ロゴ読み込み logoURL = "https://neulab.co.jp/wp-content/uploads/logo.png" #logoファイルの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, 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.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(data),12), [x.strftime('%m/%d') for x in df_medium.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('HLbands.png')
以上のコードをGoogle社の提供しているColaboratory上で公開しており、実際に動作させることができます。
リンクはこちら。
高低線を使った予想
高低線を使った予想は以下の通りとなります。レートと中間線(オレンジ)の関係で図2のようにどちらのトレンドにあるかを予想することができます。ただし、トレンドが確実に転換したかを見極める必要があります。
- 買い
- 当日にHバンドをレートが上抜けした時
- レートが中間線が上回っている時(買いトレンド)
- 売り
- 当日にLバンドをレートが下抜けした時
- レートが中間線を下回っている時(売りトレンド)

注意点
設定期間を短くしすぎると、更新が頻繁になりすぎてダマシが多くなる傾向があるので注意が必要です。
※このHPページで紹介しているテクニカル指標を使った取引ルールや売買シグナルの見方は一般的な考え方に基づくものであり、利益の増加や損失の減少を保証するものではありません。ご自身の判断にてお取引いただきますようお願いいたします。
現在、ニューラボでは人工知能による取引アルゴリズムを開発中です。11月にリリース予定。乞うご期待!
自動取引にご興味を持たれましたら お問い合わせページよりお気軽にお問合せください。