いろいろな指数を割り出す続き

  • 昨日作成したもの

各種指数収納DB

class signsDb(SQLObject):

平均値を求める関数

def average(values):

ボラティリティ(正確なものではないが)を求める関数

def ratediv(values):

の3つを作った。(昨日分)

  • 今日作成するもの


def signsPut(searchCode):
銘柄コードsearchCodeをキーに株価データを取り出し、各種指数を計算してsignsDbに収納する。

prices = []
qty = []
終値price、出来高qty両配列の初期化。

peeps = stockPrice.select(
stockPrice.q.code ==searchCode,
株価データベースstockPriceから、searchCodeをキーに株価の推移データを全部取り出す。

orderBy = -stockPrice.q.id)
取り出すに際しては、stockPriceに収納した順番の逆に並ぶようにする。(先頭に最新分、最後に今年1月4日分)

for i in peeps:
if i.fnPrice != 0 : prices.append(i.fnPrice)
if i.dekiDaka != 0 : qty.append(i.dekiDaka)
逆順に取り出したデータを配列に追加して行く。stockPrice上の終値が0でなかったら、配列pricesに、出来高が0でなかったら配列qtyに追加する。

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を求める。

signsDb(
code = searchCode,
divRate = div,
qty = aveDekidaka,
max40 = stat[0],
min20 = stat[1],
min40 = stat[2],
max20 = stat[3],
p_today = int(prices[0])
)
searchCode,div,aveDekidaka,stat[0]〜[3]、最新の終値price[0](逆順に取り出したので配列の先頭が最新となる)を、それぞれsignsDbに収納。

connection.cache.clear()
冒頭に述べた通り。たしかに実行時間が1/3ぐらいになった。データベースを定義するときに、はじめからキャッシュに溜め込まない設定にも出来るようだが、ソースもどっか行っちゃったし詳しくもないので省略…申し訳ない。