Pythonで分析してわかったこと
- 金銀比価は、金と銀の割安度を比較する指標。
- 金銀比価は2016年から2020年まで上昇トレンドであり、金が大きく上昇した。
- いまは銀が割安なので、投資するタイミングとしておすすめ。
こんにちは、ウチダです。
最近は株式をほとんど売却して、金・銀・仮想通貨を買い集めています。
金と銀への投資は、SBI証券で純金・純銀積立を使っています。
これは、長期投資した場合に、コストが割安であるためです。
(参考:金へのおすすめの投資方法は?投資コストをシミュレーションします)
少額から投資するとき、どちらがお買い得なのかと悩みますよね。
今回は金と銀の割安度を調べるために、Pythonで金銀比価チャートを作った話を紹介します。
(参考:2022年に株式投資するならどれがいい?)
目次
金と銀はどちらが割安?Pythonで投資の分析をしよう

Pythonはデータ分析に強いプログラミング言語です。
コードがシンプルで分かりやすく、誰でも無料で身につけることができます。
今回は金の価格を銀の価格で割った指数、金銀比価のチャートを作成します。
金銀比価は、金に対する銀の割安度を調べるために使われる指標です。
それぞれの価格データはYahoo Financeから取得します。
#モジュールをインポート
from pandas_datareader import data
import pandas as pd
from pylab import mpl, plt
import numpy as np
import datetime
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline
#データの期間
start = '2000-01-03'
end = datetime.date.today()
#金のデータ
gold_df = data.DataReader('GC=F', 'yahoo', start, end)
gold_open = gold_df['Open']
gold_close = gold_df['Close']
gold_high = gold_df['High']
gold_low = gold_df['Low']
#銀のデータ
silver_df = data.DataReader('SI=F', 'yahoo', start, end)
silver_open = silver_df['Open']
silver_close = silver_df['Close']
silver_high = silver_df['High']
silver_low = silver_df['Low']
#金銀比価のデータ
ratio_df = pd.DataFrame()
ratio_df['Open'] = gold_open / silver_open
ratio_df['High'] = gold_high / silver_high
ratio_df['Low'] = gold_low / silver_low
ratio_df['Close'] = gold_close / silver_close
ratio_df.dropna(inplace=True)
#グラフ作成用のモジュールをインポート
#conda install -c conda-forge cufflinks-py
import cufflinks as cf
import plotly.offline as plyo
plyo.init_notebook_mode(connected=True)
#グラフ用のデータ
qf = cf.QuantFig(
ratio_df,
title='Gold to Silver ratio',
legend='top',
name='Gold/Silver'
)
#グラフの表示と保存
plyo.iplot(
qf.iplot(asFigure=True),
image='png',
filename='goldsilver'
)
作成したグラフがこちらです。

金銀比価は上昇すると、金がアウトパフォームしていることを意味します。
下落は銀が優位です。
2016年から2020年までは上昇トレンドでした。
これは金が大きくアウトパフォームしてきたことを意味します。
しかし、2020年に指数が大きく突出した後、下落しています。
つまりこれから銀の伸びる可能性も見えるわけです。
では、どのように投資したらいいのか?
Pythonでさらに分析していきます。
金と銀の価格には相関がある?Pythonで調べてみた

終値の日時変化を散布図にして、相関関係を調べます。
期間は1500日分(約4年間)にします。
プログラムのコードはこちらです。
#相関を調べるデータ
compare_df = pd.DataFrame()
compare_df['Gold'] = gold_close[-1500:]
compare_df['Silver'] = silver_close[-1500:]
#欠損データの削除
compare_df.dropna(inplace=True)
#終値の日次変化を計算
rets = np.log(compare_df / compare_df.shift(1))
rets.dropna(inplace=True)
#回帰直線を作成
reg = np.polyfit(rets['Gold'], rets['Silver'], deg=1)
#相関図を作成
ax = rets.plot(kind='scatter', x='Gold', y='Silver', figsize=(20,10), fontsize=18)
ax.plot(rets['Gold'], np.polyval(reg, rets['Gold']), 'r', lw=2)
plt.xlabel('Gold price change', fontsize=18)
plt.ylabel('Silver price change', fontsize=18)
plt.savefig("goldsilver_scatter.png")
#相関係数を表示
rets.corr()
作成したグラフがこちら。

きれいな相関関係が見られますね。
相関係数を調べても、非常に高い相関があると分かります。

金と銀の組み合わせは分散投資には向いていません。
これは相関が高すぎるためです。
株式やビットコインなど、他の金融商品と組み合わせると良いと思います。
では、今後はどちらに投資するべきか?
移動平均を使ってトレンドを調べます。
金と銀はどちらが割安?移動平均でトレンドを調べよう

金銀比価のトレンドを調べます。
期間は1500日で、トレンドは短期(50日移動平均)と長期(200日移動平均)を使って調べます。
プログラムのコードはこちらです。
#移動平均を計算
ratio_df['SMA1'] = ratio_df['Close'].rolling(window=50).mean()
ratio_df['SMA2'] = ratio_df['Close'].rolling(window=200).mean()
#チャートに使用するデータ
ratio_date = ratio_df.index[-1500:]
ratio_close = ratio_df['Close'][-1500:]
ratio_sma1 = ratio_df['SMA1'][-1500:]
ratio_sma2 = ratio_df['SMA2'][-1500:]
#チャートの表示と保存
plt.figure(figsize=(20, 10))
plt.plot(ratio_date, ratio_close, lw=2, label = 'Close', color='g')
plt.plot(ratio_date, ratio_sma1, lw=2, label = 'SMA50', color='b')
plt.plot(ratio_date, ratio_sma2, lw=2, label = 'SMA200', color='r')
plt.legend(loc=1, fontsize=18)
plt.xlabel('year', fontsize=18)
plt.ylabel('ratio', fontsize=18)
plt.tick_params(labelsize=18)
plt.savefig("goldsilver_ratio.png")
出来上がったグラフがこちらです。

指数(緑)の上昇は金がアウトパフォームしていることを意味します。
下落は銀が優位です。
2016年から2020年までは短期の移動平均が長期を上回っています。
これは上昇トレンドを意味するので、
金がアウトパフォームしてきたことを意味します。
2020年からは長期が下落トレンドになっているので、
銀価格の上昇が期待されます。
いまから投資するなら、銀がおすすめです。
Pythonで分析した結果のまとめ

今回は金と銀のどちらが割安か、Pythonで分析しました。
いまは銀が割安だと思うので、投資におすすめです。
Pythonで投資の分析をしたいなら、こちらの本がおすすめです。
実例付き、チャート付きで、非常にわかりやすいので愛用しています。
ここまで読んでいただきありがとうございました。^^