いろいろな指数を割り出す続き
- 昨日作成したもの
各種指数収納DB
class signsDb(SQLObject):
平均値を求める関数
def average(values):
ボラティリティ(正確なものではないが)を求める関数
def ratediv(values):
の3つを作った。(昨日分)
- 今日作成するもの
銘柄コードsearchCodeをキーに株価データを取り出し、各種指数を計算してsignsDbに収納する。
def signsPut(searchCode):
終値price、出来高qty両配列の初期化。
prices = []
qty = []
株価データベースstockPriceから、searchCodeをキーに株価の推移データを全部取り出す。
peeps = stockPrice.select(
stockPrice.q.code ==searchCode,
取り出すに際しては、stockPriceに収納した順番の逆に並ぶようにする。(先頭に最新分、最後に今年1月4日分)
orderBy = -stockPrice.q.id)
逆順に取り出したデータを配列に追加して行く。stockPrice上の終値が0でなかったら、配列pricesに、出来高が0でなかったら配列qtyに追加する。
for i in peeps:
if i.fnPrice != 0 : prices.append(i.fnPrice)
if i.dekiDaka != 0 : qty.append(i.dekiDaka)
銘柄searchCodeのボラティリティdiv、平均出来高aveDekidaka、指数statを求める。
if prices !=[]:
div = ratediv(prices)
aveDekidaka = int(sum(qty) / len(qty))
sstat = [max(prices[1:41]),min(prices[1:21]),min(prices[1:41]),max(prices[1:21])]
for m in range(len(stat)):stat[m] = int(stat[m])
searchCode,div,aveDekidaka,stat[0]〜[3]、最新の終値price[0](逆順に取り出したので配列の先頭が最新となる)を、それぞれsignsDbに収納。
signsDb(
code = searchCode,
divRate = div,
qty = aveDekidaka,
max40 = stat[0],
min20 = stat[1],
min40 = stat[2],
max20 = stat[3],
p_today = int(prices[0])
)
冒頭に述べた通り。たしかに実行時間が1/3ぐらいになった。データベースを定義するときに、はじめからキャッシュに溜め込まない設定にも出来るようだが、ソースもどっか行っちゃったし詳しくもないので省略…申し訳ない。
connection.cache.clear()