[Python筆記]從csv求出期貨的OHLC

這次的目標是台灣期貨交易所提供的前 30 個交易日期貨每筆成交資料,從裡面的csv求出當日的OHLC。

在這裡我們用代號 TX 的台指期大盤指數為計算的目標。

名詞與狀態定義

在一開始我們要先定義幾個名詞:

  • Open:當日開盤價
  • High:當日最高價
  • Low:當日最低價
  • Close:當日收盤價

以及現實生活中的期貨交易狀態:

  1. 交易時間:

    • 盤內交易(就是在交易所交易):由 08:45:00 開盤至 13:45:00 收盤為止的所有交易,在一般的期貨網看到的 K 線圖多只會顯示盤內交易的 OHLC
    • 盤後交易(即場外櫃買、OTC):15:00:00 ~ 隔日 05:00:00
  2. 到期日:

    • 每個月的第三個星期三
  3. 到期月份:共五種,也就是五個不同的契約,可以把它們完全分開來看。每次交易都可以選擇要買哪一種契約。

    • 最近一個月
    • 最近第二個月
    • 最近第一個季月(3 的倍數的月份)
    • 最近第二個季月
    • 最近第三個季月

這裡只看看最近一個月契約的價格。

實作

# 這其實主要是在練習pandas這個套件的操作
import sys
import pandas as pd

filename = sys.argv[1]
df = pd.read_csv(filename,encoding='big5',dtype={'到期月份(週別)' : str,'商品代號' : str})

tx = df[df['商品代號'] == 'TX     ']
tx.reset_index(drop=True, inplace=True)


# 這裡是把時間以84500到144500作為盤內交易的操作
# 並以「第一筆」的到期月份當成「最近一個月」
useful = tx[(tx.成交價格 > 0) & (tx.成交時間>=84500) & (tx.成交時間<=144500) & (tx['到期月份(週別)'] == tx.loc[0,'到期月份(週別)'])]
useful.reset_index(drop=True, inplace=True)

# 用.loc取值,並用int取整數部份
openprice = int(useful.loc[0,'成交價格'])
closeprice = int(useful.loc[len(useful)-1,'成交價格'])
high = int(useful.loc[useful['成交價格'].idxmax(),'成交價格'])
low = int(useful.loc[useful['成交價格'].idxmin(),'成交價格'])

print(openprice,high,low,closeprice)

範例

$ python3 ohlcExtract.py input.csv

可以打開鉅亨網之類的期貨網站對照一下。

$ python3 ohlcExtract.py Daily_2018_08_20.csv
> 10687 10715 10652 10671

$ python3 ohlcExtract.py Daily_2018_08_31.csv 
> 10975 11024 10953 11022

$ python3 ohlcExtract.py Daily_2018_09_28.csv 
> 11011 11039 10921 10955

$ python3 ohlcExtract.py Daily_2018_10_01.csv 
> 10968 11018 10966 11006