質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

333閲覧

リスト形式株価の演算

kazushige

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/07/06 10:46

編集2018/07/09 04:24

前提・実現したいこと

python3.5でリスト形式の株価データを使って、比率の計算をしたいのですが、
上手くいきません。
ここに質問の内容を詳しく書いてください。(説明があまりにも不十分だったので修正しました)
IDLE(Python3.5 64-bit)を使って、Pythonのjsmモジュールで日本の証券取引所に上場している次のように、株価を取得。

株価のデータ取得(銘柄コード, 開始日, 終了日)

def get_stock(code, start_date, end_date):
# 期間設定
year, month, day = start_date.split("/")
start = datetime.date(int(year), int(month), int(day))
year, month, day = end_date.split("/")
end = datetime.date(int(year), int(month), int(day))
# 株価データ取得
q = jsm.Quotes()
target = q.get_historical_prices(code, jsm.DAILY, start_date = start, end_date = end)
# 項目ごとにリストに格納して返す
date = [data.date for data in target]
open = [data.open for data in target]
close = [data.close for data in target]
high = [data.high for data in target]
low = [data.low for data in target]

return [date, open, close, high, low]

これを使って、
date に取得したい年月日を指定し、その日の株コード、株価データを得る。
data = get_stock(code, date,date)
この株価データ(リスト構造)を使って、次のような比率を計算したいのです。
hDd = (data[3] - data[4])/data[2] #発表日の(高値―安値)/終値
株価データがリスト構造で、エラーが出ました。

エラーメッセージ ``` hDd = (data[3] - data[4])/data[2] #発表日の(高値―安値)/終値 TypeError: unsupported operand type(s) for -: 'list' and 'list' 解決策として、あまり良い方法とは思いませんが、appendを見つけ、これを 利用して、appendでリストの0番目だけ取り上げたら、解決しました dd1 = data[2] dd2 = data[3] dd3 = data[4] h = []#リストの初期化 for i in range(1):   h.append((dd1[i] - dd2[i])/dd3[i])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/07/09 02:02

エラーメッセージはエラーメッセージのところに書いて下さい。
fuzzball

2018/07/09 02:07

jsmkってなんでしょうか?
fuzzball

2018/07/09 02:13

ちょっとググってみたら data.open とか data.close で値を取得しているコードを見かけましたが、それらとは違う方法でデータを取得しているということでしょうか?どのようにデータを取得しているのかコードを書いて下さい。
kazushige

2018/07/09 02:52

初めての投稿で要領が得ず、すみませんでした。解決いたしました。
fuzzball

2018/07/09 04:27

コードは ``` で囲って下さい。
kazushige

2018/07/09 04:38

お手数をお掛けします。すみませんが、コードは``` で囲うとは具体的にどうするのでしょうか。
guest

回答1

0

ベストアンサー

具体的なことは何もわかりませんが、二重以上のリストになっているのではないでしょうか。

リストの構造を確認してみる必要がありそうです。

投稿2018/07/06 11:50

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazushige

2018/07/08 17:20

初歩的な質問に答えていただきありがとうこざいます。二重にはなっていないと思います。みっともないプログラムになりますが、仕方がないので、 appendを見つけたので、それを利用して解決しました。 もっとすっきりした方法がきっとあるのではないかと思うのですが。 dd1 = data[2] dd2 = data[3] dd3 = data[4] for i in range(1): h.append((dd1[i] - dd2[i])/dd3[i])
hayataka2049

2018/07/08 17:22

dd1[i]って書いてるのはdata[2][i]って書いてるのと同じなので、やっぱり二重のリストですね
hayataka2049

2018/07/08 17:23

range(1)だと各子リストの0番目しか見られない訳ですけど、それでよろしいのでしょうか
kazushige

2018/07/09 01:57

range(1)だと各子リストの0番目しか見られない訳ですけど、それでよろしいのでしょうか→jsmの株価データのリスト構造だと受け付けずにエラーになるので、仕方だなくappendでリストの0番目だけ取り上げたら、解決しました。
fuzzball

2018/07/09 04:35

先頭だけでいいなら、各データの先頭 [0] を使って、 (data[3][0] - data[4][0]) / data[2][0] でいいのでは?
kazushige

2018/07/09 05:08

ありがとうございます。うまくいきました。今後共にご指導をお願いいたします。ド素人なの皆さんが言っていることが、なかなか理解できなくて お手数をお掛けします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問