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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

522閲覧

日本株と米国株の組み合わせの株価を取得したい

mufufu

総合スコア37

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/02/20 04:32

日本株と米国株の組み合わせの株価を取得したいですが、下記のコードをいれても「SyntaxError: invalid syntax」と表示されてしまいます。

ユニクロなら、「9983.T」で取得をできるとおもったのですが、取得できませんでした。なにが違うのでしょうか?

python

1コード 2import numpy as np 3import pandas_datareader.data as web 4import pandas as pd 5import matplotlib.pyplot as plt 6import scipy.stats as ss 7from matplotlib.animation import FuncAnimation 8import japanize_matplotlib 9import pandas_datareader.data as web #データのダウンロードライブラリ 10 119983.T=web.DataReader("9983.T", "yahoo","2020/1/1")['Adj Close'] 12MSFT=web.DataReader("MSFT", "yahoo","2020/1/1")['Adj Close'] 13AMZN=web.DataReader("AMZN", "yahoo","2020/1/1")['Adj Close'] 14 15 169983.T=9983.T/9983.T.iloc[0]#株価の指数化 17 18ln9983.T=np.log(9983.T) 19dln9983.T=ln9983.T.diff().dropna() 20 21MSFT=MSFT/MSFT.iloc[0] 22MSFT 23lnMSFT=np.log(MSFT) 24dlnMSFT=lnMSFT.diff().dropna() 25 26AMZN=AMZN/AMZN.iloc[0] 27AMZN 28lnAMZN=np.log(AMZN) 29dlnAMZN=lnAMZN.diff().dropna() 30 31def portfolio_rebalance(tsd1,tsd2,tsd3): 32 port=pd.concat([tsd1,tsd2,tsd3],axis=1).dropna() 33 port.columns=('p1','p2','p3') 34 port['a1']=0 35 port['a2']=0 36 port['a3']=0 37 port['v']=1 38 39 n=len(port) 40 41 p1=port['p1'].iloc[0] 42 p2=port['p2'].iloc[0] 43 p3=port['p3'].iloc[0] 44 v=port['v'].iloc[0] 45 46 a1=float(v*0.418/p1) 47 a2=float(v*0.363/p2) 48 a3=float(v*0.219/p3) 49 50 port.iloc[0,3]=a1 51 port.iloc[0,4]=a2 52 port.iloc[0,5]=a3 53 54 for i in range(1,len(port)): 55 p1=port['p1'].iloc[i]#今日のAAPLの株価 56 p2=port['p2'].iloc[i]#今日のMSFTの株価 57 p3=port['p3'].iloc[i]#今日のAMZNの株価 58 59 p1_0=port['p1'].iloc[i-1]#前日のAAPLの株価 60 p2_0=port['p2'].iloc[i-1]#前日のMSFTの株価 61 p3_0=port['p3'].iloc[i-1]#前日のAMZNの株価 62 63 a1_0=port['a1'].iloc[i-1]#前日のAAPLの保有株数 64 a2_0=port['a2'].iloc[i-1]#前日のMSFTの保有枚数 65 a3_0=port['a3'].iloc[i-1]#前日のAMZNの保有枚数 66 67 v_0=port['v'].iloc[i-1]#前日のリバランスポートフォリオの価値 68 69 #v=a1_0*(p1-p1_0)+a2_0*(p2-p2_0)+v_0#今日のリバランスポートフォリオの価値 70 71 v=a1_0*p1+a2_0*p2+a3_0*p3#今日のリバランスポートフォリオの価値 72 73 port.iloc[i,6]=v#リバランスポートフォリオの価値のアップデート 74 75 76 port.iloc[i,3]=a1#AAPLの株数のアップデート 77 port.iloc[i,4]=a2#MSFTの株数のアップデート 78 port.iloc[i,5]=a3#AMZNの株数のアップデート 79 80 port['v2']=port.p1/3+port.p2/3+port.p3/3#リバランスの無いポートフォリオの価値 81 return port 82port=portfolio_rebalance(9983.T,MSFT,AMZN) 83 84plt.figure(figsize=(15, 15), dpi=50)#グラフの大きさ 85 86#下記の内容は対数変換されたデータをプロット 87# lnport.v.plot(label="効率的フロンティア",linewidth=1.0) 88# lnport.v2.plot(label="ウェイトを3等分",linewidth=1.0) 89# lnAAPL.plot(label='AAPL',style='-.',fontsize=30)#目盛りの文字の大きさを変更 90# lnMSFT.plot(label='MSFT',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 91# lnAMZN.plot(label='AMZN',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 92 93 94#下記は元のプロット 95port.v.plot(label="効率的フロンティア",linewidth=1.0) 96port.v2.plot(label="ウェイトを3等分",linewidth=1.0) 97 989983.T.plot(label='9983.T',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 99MSFT.plot(label='MSFT',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 100AMZN.plot(label='AMZN',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 101 102plt.margins(x=0) 103plt.legend(loc="upper left",fontsize=30) 104plt.grid(True) 105plt.title("3銘柄と効率的フロンティアのパフォーマンス",fontsize=40) 106plt.show()

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python の場合(他のプログラミング言語でも)、変数名に使用できる文字に制限があります。

2.3. 識別子 (identifier) およびキーワード

ASCII 範囲 (U+0001..U+007F) 内では、識別子として有効な文字は Python 2.x におけるものと同じです。大文字と小文字の A から Z、アンダースコア _先頭の文字を除く数字 0 から 9 です。

なので、9983.T を例えば A9983_T などに変更して下さい。

投稿2022/02/20 04:57

melian

総合スコア19803

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

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

mufufu

2022/02/20 06:05

下記のコードのように、9983.Tの箇所をA9983_Tに変更しましたが、 「RemoteDataError: No data fetched for symbol A9983_T using YahooDailyReade」 と、表示されて、データを取得できませんでした。 import numpy as np import pandas_datareader.data as web import pandas as pd import matplotlib.pyplot as plt import scipy.stats as ss from matplotlib.animation import FuncAnimation import japanize_matplotlib import pandas_datareader.data as web #データのダウンロードライブラリ A9983_T=web.DataReader("A9983_T", "yahoo","2020/1/1")['Adj Close'] MSFT=web.DataReader("MSFT", "yahoo","2020/1/1")['Adj Close'] AMZN=web.DataReader("AMZN", "yahoo","2020/1/1")['Adj Close'] A9983_T=A9983_T/A9983_T.iloc[0]#株価の指数化 lnA9983_T=np.log(A9983_T) dlnA9983_T=lnA9983_T.diff().dropna() MSFT=MSFT/MSFT.iloc[0] MSFT lnMSFT=np.log(MSFT) dlnMSFT=lnMSFT.diff().dropna() AMZN=AMZN/AMZN.iloc[0] AMZN lnAMZN=np.log(AMZN) dlnAMZN=lnAMZN.diff().dropna() def portfolio_rebalance(tsd1,tsd2,tsd3): port=pd.concat([tsd1,tsd2,tsd3],axis=1).dropna() port.columns=('p1','p2','p3') port['a1']=0 port['a2']=0 port['a3']=0 port['v']=1 n=len(port) p1=port['p1'].iloc[0] p2=port['p2'].iloc[0] p3=port['p3'].iloc[0] v=port['v'].iloc[0] a1=float(v*0.418/p1) a2=float(v*0.363/p2) a3=float(v*0.219/p3) port.iloc[0,3]=a1 port.iloc[0,4]=a2 port.iloc[0,5]=a3 for i in range(1,len(port)): p1=port['p1'].iloc[i]#今日のAAPLの株価 p2=port['p2'].iloc[i]#今日のMSFTの株価 p3=port['p3'].iloc[i]#今日のAMZNの株価 p1_0=port['p1'].iloc[i-1]#前日のAAPLの株価 p2_0=port['p2'].iloc[i-1]#前日のMSFTの株価 p3_0=port['p3'].iloc[i-1]#前日のAMZNの株価 a1_0=port['a1'].iloc[i-1]#前日のAAPLの保有株数 a2_0=port['a2'].iloc[i-1]#前日のMSFTの保有枚数 a3_0=port['a3'].iloc[i-1]#前日のAMZNの保有枚数 v_0=port['v'].iloc[i-1]#前日のリバランスポートフォリオの価値 #v=a1_0*(p1-p1_0)+a2_0*(p2-p2_0)+v_0#今日のリバランスポートフォリオの価値 v=a1_0*p1+a2_0*p2+a3_0*p3#今日のリバランスポートフォリオの価値 port.iloc[i,6]=v#リバランスポートフォリオの価値のアップデート port.iloc[i,3]=a1#AAPLの株数のアップデート port.iloc[i,4]=a2#MSFTの株数のアップデート port.iloc[i,5]=a3#AMZNの株数のアップデート port['v2']=port.p1/3+port.p2/3+port.p3/3#リバランスの無いポートフォリオの価値 return port port=portfolio_rebalance(A9983_T,MSFT,AMZN) plt.figure(figsize=(15, 15), dpi=50)#グラフの大きさ #下記の内容は対数変換されたデータをプロット # lnport.v.plot(label="効率的フロンティア",linewidth=1.0) # lnport.v2.plot(label="ウェイトを3等分",linewidth=1.0) # lnAAPL.plot(label='AAPL',style='-.',fontsize=30)#目盛りの文字の大きさを変更 # lnMSFT.plot(label='MSFT',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 # lnAMZN.plot(label='AMZN',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 #下記は元のプロット port.v.plot(label="効率的フロンティア",linewidth=1.0) port.v2.plot(label="ウェイトを3等分",linewidth=1.0) A9983_T.plot(label='9983.T',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 MSFT.plot(label='MSFT',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 AMZN.plot(label='AMZN',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 plt.margins(x=0) plt.legend(loc="upper left",fontsize=30) plt.grid(True) plt.title("3銘柄と効率的フロンティアのパフォーマンス",fontsize=40) plt.show()
melian

2022/02/20 06:10

A9983_T=web.DataReader("A9983_T", "yahoo","2020/1/1")['Adj Close'] の文字列の部分("9983.T")はそのままにしておく必要があります。 A9983_T=web.DataReader("9983.T", "yahoo","2020/1/1")['Adj Close']
mufufu

2022/02/20 08:52

ありがとうございます。日米の株価を同時に取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問