程式小專題 – 計算ATR #6 API+ATR

接著就是把 API 與 ATR 的程式片段給接起來啦!

import requests
import pandas as pd
client_id = '你的consumer key' #要註冊才會有
 
endpoint = r"https://api.tdameritrade.com/v1/marketdata/{}/pricehistory".format('SE')
 
payload ={'apikey':client_id,
         'periodType':'month',
         'frequencyType':'daily',
         'frequency':'1',
         'period':'2',
         'needExtendedHoursData':'true'}
 
content = requests.get(url= endpoint, params = payload)
data = content.json() #把json轉成字典
 
df = pd.DataFrame(data['candles']) #把candles字典裝進DataFrame
df_se = df.tail(23).copy() #取最後23天的資料。
df_se.index = range(23) #把index改成0到22 

PreviousClose = df_se.close.shift(1).copy() 
df_se.loc[:,'PreviousClose'] = PreviousClose

TrueRange = df_se[['PreviousClose','high']].max(axis=1).copy()-df_se[['PreviousClose','low']].min(axis=1).copy() 
df_se.loc[:,'TrueRange']= TrueRange

PreAvgTR = df_se['TrueRange'].rolling(window=21).mean().shift().copy() 
df_se.loc[:,'PreAvgTR'] = PreAvgTR

ATR = (df_se['PreAvgTR'].copy()*(21-1) + df_se['TrueRange'].copy())/21 
df_se.loc[:,'ATR'] = ATR

print(df_se[-1:]['ATR'])

真的會動耶!Amazing!

後來我發現從 API 取得的資料跟從台灣券商下載的資料會有些許的不一樣,所以計算出來的 ATR 會有細微的差異,但因為 ATR 只是作為 position sizing 與 stop loss 的參考,所以影響並不大。

另外 Python 是 case sensitive 所以裡面有些 column name 從 AP I取得的時候就是小寫,因此後面的程式碼也跟著改動。

嗯,應該堪用,下週就來實操看看!🤔之後要達成的是如何餵它一串 tickers,然後回傳一串 tickers 與 ATRs。

發表留言