陰陽足

 

概要
図1 陰陽足の描画例(下側が陰陽足)

陰陽足は相場の値動きの勢いやトレンドを確認するためのテクニカル指標です。もともとは移動平均線をチャート化したもので、増田足とも大引き陰陽足とも呼ばれる日本で開発された指標です。

図1のように足し合わせる期間を変えた短期線、中期線、長期線の3本を組み合わせて使います。

計算方法(n=3の場合)

陰陽足に使う陰陽線を計算します、定義は以下の通りです。終値の移動平均になっていることが分かります。

$$ \rm{} 始値=当日を含まない過去n区間の終値の平均値 \\ 終値=当日を含んだ過去n区間の終値の平均値 $$

例としてn=3の場合の計算結果を表にすると以下のようになります。7日目、9日目と大きく値段が下がったときに転換が反映されていることが分かります。

日数終値 陰陽線の始値  陰陽線の終値 陰線or陽線 
1日目1.00
2日目5.00
3日目9.005.00
4日目3.005.005.67陽線
5日目7.005.676.33陽線
6日目10.006.336.67陽線
7日目2.006.676.33陰線
8日目8.006.336.67陽線
9日目4.006.674.67陰線
10日目(最新)6.00  4.676.00陽線

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_close = df['Close']

df_sma1_open = df_close.copy().shift(1)
df_sma1_close = df_close.copy()

df_sma1 = df.copy()
df_sma1['Open']  = df_sma1_open.rolling(3).mean()
df_sma1['Close'] = df_sma1_close.rolling(3).mean()
#ヒゲの処理
df_sma1['High'] = df_sma1['Open']
df_sma1['High'].loc[df_sma1['Open'] - df_sma1['Close'] < 0] = df_sma1['Close']
df_sma1['Low'] = df_sma1['Close']
df_sma1['Low'].loc[df_sma1['Open'] - df_sma1['Close'] < 0] = df_sma1['Open']


df_sma2_open = df_close.copy().shift(1)
df_sma2_close = df_close.copy()

df_sma2 = df.copy()
df_sma2['Open']  = df_sma2_open.rolling(25).mean()
df_sma2['Close'] = df_sma2_close.rolling(25).mean()
#ヒゲの処理
df_sma2['High'] = df_sma2['Open']
df_sma2['High'].loc[df_sma2['Open'] - df_sma2['Close'] < 0] = df_sma2['Close']
df_sma2['Low'] = df_sma2['Close']
df_sma2['Low'].loc[df_sma2['Open'] - df_sma2['Close'] < 0] = df_sma2['Open']

df_sma3_open = df_close.copy().shift(1)
df_sma3_close = df_close.copy()

df_sma3 = df.copy()
df_sma3['Open']  = df_sma3_open.rolling(75).mean()
df_sma3['Close'] = df_sma3_close.rolling(75).mean()
#ヒゲの処理
df_sma3['High'] = df_sma3['Open']
df_sma3['High'].loc[df_sma3['Open'] - df_sma3['Close'] < 0] = df_sma3['Close']
df_sma3['Low'] = df_sma3['Close']
df_sma3['Low'].loc[df_sma3['Open'] - df_sma3['Close'] < 0] = df_sma3['Open']

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
data_sma1 = df_sma1[n_data:]
ohlc_sma1 = np.vstack((range(len(data_sma1)), data_sma1.T)).T
data_sma2 = df_sma2[n_data:]
ohlc_sma2 = np.vstack((range(len(data_sma2)), data_sma2.T)).T
data_sma3 = df_sma3[n_data:]
ohlc_sma3 = np.vstack((range(len(data_sma3)), data_sma3.T)).T

fig, (ax1, ax2) = plt.subplots(2, 1, gridspec_kw={'height_ratios': [10, 6]}, sharex=True, figsize=(12,9))
fig.patch.set_facecolor(canvas_color)
ax1.patch.set_facecolor(canvas_color)
mpl_finance.candlestick_ohlc(ax1, ohlc, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
ax2.patch.set_facecolor(canvas_color)
mpl_finance.candlestick_ohlc(ax2, ohlc_sma1, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
mpl_finance.candlestick_ohlc(ax2, ohlc_sma2, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
mpl_finance.candlestick_ohlc(ax2, ohlc_sma3, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
ax1.grid()
ax2.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 = ax1
im_sabo = AnnotationBbox(imagebox, (0, 9850), xybox=(0, 9900), xycoords="data", boxcoords="data", pad=0.3, frameon=False)

l1,l2 = ax2.get_legend_handles_labels()
ax2.legend(l1,l2, fontsize=14, edgecolor='none', facecolor=canvas_color)

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

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

ax2.yaxis.tick_right()
ax2.tick_params(labelsize=22, labelcolor=font_color, color=line_color)

ax2.spines['left'].set_color(line_color)
ax2.spines['right'].set_color(line_color)
ax2.spines['top'].set_color(line_color)
ax2.spines['bottom'].set_color(line_color)

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

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

ax2.grid(linestyle='--', lw=1)
ax1.set_axisbelow(True)

fig.savefig('Inyo.png', facecolor=fig.get_facecolor(), edgecolor='none')

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

リンク先はこちら

陰陽足を使った予想の方法

短期線、中期線、長期線のすべてが陽転した時に上昇トレンドに転じたと考えて買いで、3つの線すべてが陰転した時に下落トレンドに転じたと考えて売りで入ります。

注意点

移動平均を基礎に使っていますので、実際の値動きが陰陽足の動きへの反映が遅延する場合があります。


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


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