パラボリック(Parabolic Time Price System)

 

概要

1978年にJ・ウェイルズ・ワイルダーによって考案されたトレンド系のテクニカル指標です。損切りオーダー(SAR)を指標として備えており、レートの上下に従い常に途転を繰り返しながらポジションを保持することができます。図1がパラボリックの描画例です。

*途転:買いのポジションを持っている場合は売りのポジションに転換、売りのポジションを持っている場合は買いのポジションに転換すること。

図1 パラボリックの描画例
計算方法

パラボリックは次のSAR、EP、AFの3つの値を計算しチャート上に表示します。

SARがレートとぶつかったところが途転のタイミングで、売りポジションなら買いポジションへ、買いポジションなら売りポジションへ転換します。

感度を良くするにはAFの値を大きくすることで感度が良くなりますが、小さな相場の変動でも、途転のサインが出るのでダマシが多くなります。逆にAFの値を小さくすると、ダマシは減りますが変化への対応が遅くなります。

SARは次のような計算式で計算されます。

$$ \rm{} SAR = 前日のSAR + AF \times (EP – 前日のSAR) $$

この説明ではAFは標準的な0.02を使用し、最初のEPは初日の高値、SARは初日の安値とします。実際のレートと交差する場合、SARを買いポジションだった場合はその日の最高値、売りポジションだった場合はその日の最安値に設定して途転します。

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()

パラボリックを計算します

#初期化
Acc = 0.02
df['SAR'] = df['Low']
df['EP'] = df['High']
f_position = 1
m_min =  df['Low'][0]
m_max =  df['High'][0]
SAR_previous = df['Low'][0]

#ループ
for index, item in df.iterrows():
    
    #更新
    if m_min >  df.at[index, 'Low']  : m_min =  df.at[index, 'Low']
    if m_max <  df.at[index, 'High'] : m_max =  df.at[index, 'High']
      
    if f_position == 1 :
        df.at[index, 'SAR'] = SAR_previous + Acc*(m_max - SAR_previous)
    else :
        df.at[index, 'SAR'] = SAR_previous + Acc*(m_min - SAR_previous)
    
    #途転
    if df.at[index, 'SAR'] > df.at[index, 'Low'] and df.at[index, 'SAR'] < df.at[index, 'High'] and f_position == 1 :
        f_position = -1
        df.at[index, 'SAR'] = m_max
        df.at[index, 'EP'] = m_min
        m_min =  df.at[index, 'Low']
        m_max =  df.at[index, 'High']
        Acc = 0.02
    else:
       if Acc < 0.2:
          Acc = Acc + 0.02
          
    if df.at[index, 'SAR'] > df.at[index, 'Low'] and df.at[index, 'SAR'] < df.at[index, 'High'] and f_position == -1 :
        f_position = 1
        df.at[index, 'SAR'] = m_min
        df.at[index, 'EP'] = m_max
        m_min =  df.at[index, 'Low']
        m_max =  df.at[index, 'High']
        Acc = 0.02
    else:
       if Acc < 0.2:
          Acc = Acc + 0.02
          
    SAR_previous = df.at[index, 'SAR']

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['SAR'].values[n_data:] , color='darkorange', ls='-', label='SAR', marker='x', linewidth = 0)
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.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('paraboric.png')

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

リンク先はこちら

パラボリックを使った予想

パラボリックはトレンド判断の他、逆張りのエントリーをする際に使用します。図2が予想例となりますが、比較的SARとレートの間の交差が生じやすい、つまりダマシが多くなるので注意が必要です(図2はダマシとなった例などを外しています)。

図2 パラボリックを使った予想例
注意点

トレンド相場には強いですが、持ち合い相場には弱いと言われています。また、ダマシが比較的多くなるため、他のテクニカル指標を併用することをお勧めします。


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


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