デマーカー(Demarker Technical Indicator, DeM)

 

概要

デマーカーはチャート分析の第一人者として知られるトム・デマーク(Tom Demark)氏が作ったテクニカル指標です。特定の期間を設定し、その期間の最大値とひとつ前の期間の最大値を比較して相場の買われ過ぎや売られ過ぎを示します。0から0.3であれば売られ過ぎ、0.7から1.0であれば買われ過ぎと判断するオシレータ系テクニカル指標です。基本的な使い方はRSIと同様になります。

図1 デマーカーの描画例
計算方法(日足の場合)

当日高値と前日高値を比較しDeMaxを計算します。当日の高値の方が高ければ、当日高値と前日高値の差を取り、それ以外の場合は0とします。

$$ \rm{} High(i) > High(i-1)の場合 \\ DeMax(i) = High(i) – High(i-1) \\ それ以外の場合 \\ DeMax(i) = 0 \\ $$

DeMaxと同様に、当日安値と前日安値からDeMinを計算します。当日安値が前日安値より安ければ、当日安値と前日安値の差を取り、それ以外の場合は0にします。

$$ \rm{} Low(i) < Low(i-1)の場合 \\ DeMin(i) = Low(i-1) – Low(i) \\ それ以外の場合 \\ DeMin(i) = 0 \\ $$

DeMinとDeMaxのSMAからデマーカー(DMark)を計算します。nは任意ですが、日足であれば、14日が良く使われます。

$$ \rm{} DMark(i) = SMA(DeMax, n)/\{SMA(DeMax, n) + SMA(DeMin, n)\} $$
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_demax = df['High'] - df['High'].shift(1)
df_demax.loc[df['High']-df['High'].shift(1) < 0] = 0
df_demin = df['Low'].shift(1) - df['Low']
df_demin.loc[df['Low'].shift(1)-df['Low'] < 0] = 0

df_sma_demax = df_demax.rolling(14).mean()
df_sma_demin = df_demin.rolling(14).mean()

df_demarker = df_sma_demax/(df_sma_demax + df_sma_demin)

matplotを使用した描画例です

canvas_color = '#fffafa'
line_color = '#c8ced1'
font_color = '#171510'
colorup = 'r'
colordown = 'b'

n_data = -100
data = df[n_data:]
ohlc = np.vstack((range(len(data)), data.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)
ax2.plot(range(len(data)), df_demarker.values[n_data:], color='red', ls='-', label='Demarker(14)')
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.set_ylim([-0.05,1.05])
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_demarker.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)

#上下のバンド描画
bandx = [-5,-5,105,105]
banddown = [0.3,0,0,0.3]
bandup = [0.7,1.0,1.0,0.7]
ax2.fill(bandx,bandup,color="b",alpha=0.1)
ax2.fill(bandx,banddown,color="b",alpha=0.1)

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

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

リンク先はこちら

デマーカーを使った予想

デマーカーを使用した予想は逆張りとなり、図2が予想例となります。

図2 デマーカーを使った予想例
注意点

デマーカーのみでの予想の場合、ラインを超えたとしても、いつトレンドが反転するかわからないので、他のインジケーターと組み合わせて使うことをお勧めします。


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


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