Python Parabolic SAR実施
17178 ワード
Parabolic計算式に従ってParabolicを計算するにはすべてのデータが必要です.
しかし、分封のような場合は、データ全体を受信するのに時間がかかるため、Parabolicの計算は難しい.しかし、以前のParallic値を知っていれば、この問題は解決します.
そこで,初期パラメータ値を手動で設定する際に,パラメータ値を解くコードを記述した.
バイナンス取引所のTradingViewと完全に一致していることを確認した.
これは私がやりたいことなので、利便性などは気にしません.一度価格を追加してくれれば、更新してあげます.
しかし、分封のような場合は、データ全体を受信するのに時間がかかるため、Parabolicの計算は難しい.しかし、以前のParallic値を知っていれば、この問題は解決します.
そこで,初期パラメータ値を手動で設定する際に,パラメータ値を解くコードを記述した.
#global variable for psar
psar_low = 0 # current lowest value
psar_high = 0 # current highest value
psar_trend = (0,0) # psar trend start value
psar_accel = 0
psar_max = 0
def psar_init(df, start, idx, acceleration, maximum):
global psar_trend, psar_accel, psar_max
psar_trend = (df['datetime'][len(df)-idx],start)
psar_accel = acceleration
psar_max = maximum
def psar_next(df):
global psar_low, psar_high, psar_trend
start_idx = -1
psar = []
for i in range(len(df)):
if df['datetime'][i] == psar_trend[0]:
start_idx = i
break
for i in range(len(df)):
psar.append(0)
if start_idx == -1: #check it initialized
print('[!] You must call psar_init method first.')
exit()
if psar_trend[1] >= df['high'][start_idx]:
trend = 'down'
psar_low = df['low'][start_idx]
else:
trend = 'up'
psar_high = df['high'][start_idx]
af = 0.02
psar[start_idx] = psar_trend[1]
for i in range(start_idx+1, len(df)):
if df['high'][i] > psar_high: #update highest value
psar_high = df['high'][i]
if trend == 'up':
af += psar_accel
if df['low'][i] < psar_low: #update lowest value
psar_low = df['low'][i]
if trend == 'down':
af += psar_accel
af = psar_max if af >= psar_max else af #check af is higher than max value
if trend == 'up':
psar[i] = af * psar_high + (1-af) * psar[i-1]
else:
psar[i] = af * psar_low + (1-af) * psar[i-1]
#check psar trend change
if trend == 'up' and psar[i-1] != 0:
if psar[i-1] >= df['low'][i]:
trend = 'down'
psar[i] = psar_high
psar_trend = (df['datetime'][i], psar[i]) #update psar trend
psar_low = df['low'][i]
psar_high = df['high'][i]
af = 0.02
elif trend == 'down' and psar[i-1] != 0:
if psar[i-1] <= df['high'][i]:
trend = 'up'
psar[i] = psar_low
psar_trend = (df['datetime'][i], psar[i]) #update psar trend
psar_low = df['low'][i]
psar_high = df['high'][i]
af = 0.02
psar[i] = round(psar[i],2)
return psar
使用方法は以下の通りです.psar_init
が先に行われた後、psar_next
がコールされ続ける.if not isInit:
psar_init(df,37449.4 ,22, 0.02, 0.2)
isInit = True
print(psar_next(df))
初期パラメータ値はトレンドの開始部分である必要があります.次の図では、左端のParabolic値は37449.4で、現在の22番目の下位にあります.したがって、因子で22を加える.実は4を置いても大丈夫ですバイナンス取引所のTradingViewと完全に一致していることを確認した.
これは私がやりたいことなので、利便性などは気にしません.一度価格を追加してくれれば、更新してあげます.
Reference
この問題について(Python Parabolic SAR実施), 我々は、より多くの情報をここで見つけました https://velog.io/@kunshim/파이썬-Parabolic-SAR-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol