2009年5月1日 星期五

定時自動抓期交所的成交資料

這幾天在趕程式, 空時看 程式交易聚寶盆 的文章, 其中有下載當天(最近30天)的成交資料, 要每天去抓, 覺得不方便。

昨天五月一日(星期五)沒交易, 在自家的主機(Debian)上, 用shell script 配合crontab寫了每天(星期一至星期五)16:30左右, 自動到期交所抓當天成交資料, 並分拆成台指, 小台指, 金指期, 電指期的tick檔, 下星期開始跑, 先暫時這樣。

這個程式只取當期(近月)的tick, 若是4月29日當天,會做以下動作
  • 到期交所抓當天成交資料(Daily_2009_04_29.zip)
  • 解Daily_2009_04_29.zip成Daily_2009_04_29.rpt
  • 參考最後結算日檔(last-trading-days)取出近月tick, 並分成台指, 小台指, 金指期, 電指期,及產生2009_04_29.TX , 2009_04_29.MTX , 2009_04_29.TF , 2009_04_29.TE 四個檔



待處理
  • 還沒有統計成1分鐘K,
  • 及改成perl寫的程式
  • 合併到原有的K線中


用 wget 下載的 script - wget-future-tick

#!/bin/sh

today_tickfile=http://www.taifex.com.tw/DailyDownload/Daily_`date +%Y_%m_%d`.zip

wget -c -a /daily/future_tick.log -P /daily/ $today_tickfile




分拆成台指,小台指,金指期,電指期的 script - proc-tick

#!/bin/sh

todayfile=`date +%Y_%m_%d` # -> 2009_04_29
today=`date +%Y%m%d` # -> 20090429
zipfile=Daily_$todayfile.zip # -> Daily_2009_04_29.zip

workmonth=./tmp1 # 暫存用

# 取得下載檔 size
filesize=`ls -l Daily_$todayfile.zip | cut -d ' ' -f 5 `

if [ "$filesize" -ne '93' ]; then # 超過 93 才有資料

unzip $zipfile # 解zip

# echo Daily_$todayfile.rpt
# echo $todayfile.TX

ltd=`tac last-trading-days` # 最後結算日檔
for td in $ltd
do
#echo "$td="$td , "$today="$today
if [ "$td" -ge "$today" ]; then
#echo " $td > $today "
wkmonth=`echo $td` # 取得最近的結算日 -> wkmonth
fi
done

echo $wkmonth > $workmonth

wkproduct=`cut -c 1-6 $workmonth` # 當期交易商品月份
# echo $wkproduct

# 用 sed 及 awk 分拆檔案
# TX 台指
head -n 1 Daily_$todayfile.rpt > $todayfile.TX # 留表頭第一行
sed '/MTX/d' Daily_$todayfile.rpt | sed -n '/TX/p' | sed -n 's/ //gp' | awk -F, 'BEGIN{OFS=","}($3=='$wkproduct'){ print $1,$2,$3,$4,$5,$6 }' >> $todayfile.TX

# MTX 小台
head -n 1 Daily_$todayfile.rpt > $todayfile.MTX
sed -n '/MTX/p' Daily_$todayfile.rpt | sed -n 's/ //gp' | awk -F, 'BEGIN{OFS=","}($3=='$wkproduct'){ print $1,$2,$3,$4,$5,$6 }' >> $todayfile.MTX

# TE 電指期
head -n 1 Daily_$todayfile.rpt > $todayfile.TE
sed -n '/TE/p' Daily_$todayfile.rpt | sed -n 's/ //gp' | awk -F, 'BEGIN{OFS=","}($3=='$wkproduct'){ print $1,$2,$3,$4,$5,$6 }' >> $todayfile.TE

## TF 金指期
head -n 1 Daily_$todayfile.rpt > $todayfile.TF
sed '/GTF/d' Daily_$todayfile.rpt | sed -n '/TF/p' | sed -n 's/ //gp' | awk -F, 'BEGIN{OFS=","}($3=='$wkproduct'){ print $1,$2,$3,$4,$5,$6 }' >> $todayfile.TF

rm $workmonth # 刪除暫存檔
fi


crontab中的內容

# 分 時 日 月 星期 要執行的指令
34 16 * * 1-5 redjoetseng cd /daily/ && run-parts /etc/cron.tick/01get/wget-future-tick #每天抓future成交記錄
44 16 * * 1-5 redjoetseng cd /daily/ && run-parts /etc/cron.tick/02proc/proc-tick #依商品分拆future成交記錄


註:
  1. windows下也有crontab 排程(自動執行)程式 - CRONw
  2. 修改金指期(TF)部份,有GTF要除掉。(2009-05-06)



台灣期交所下載網頁

沒有留言:

張貼留言

聯絡表單

名稱

以電子郵件傳送 *

訊息 *