Skip to content

Instantly share code, notes, and snippets.

@Kouhei-Takagi
Created April 4, 2024 23:52
Show Gist options
  • Save Kouhei-Takagi/75cdf7020ab3920852b1830215668a80 to your computer and use it in GitHub Desktop.
Save Kouhei-Takagi/75cdf7020ab3920852b1830215668a80 to your computer and use it in GitHub Desktop.
VSNasdaq Corr 0.6597
import yfinance as yf
import pandas as pd
class Data:
def __init__(self, symbol, start_date, end_date):
self.symbol = symbol
self.start_date = start_date
self.end_date = end_date
def get_data(self):
data = yf.download(self.symbol, start=self.start_date, end=self.end_date)
return data
# カカオのデータの取得
cacao_instance = Data("CC=F", "1990-01-01", "2024-03-31")
cacao_data = cacao_instance.get_data()
# 銅のデータの取得
copper_instance = Data("HG=F", "1990-01-01", "2024-03-31")
copper_data = copper_instance.get_data()
# 砂糖のデータ取得
sugar_instance = Data("SB=F", "1990-01-01", "2024-03-31")
sugar_data = sugar_instance.get_data()
# ナスダックのデータの取得
nasdaq_instance = Data("^IXIC", "1990-01-01", "2024-03-31")
nasdaq_data = nasdaq_instance.get_data()
# 終値の列のみを抽出してデータフレームに結合
merged_data = pd.concat([
cacao_data["Close"].rename("Cacao_Close"),
copper_data["Close"].rename("Copper_Close"),
sugar_data["Close"].rename("Sugar_Close"),
nasdaq_data["Close"].rename("Nasdaq_Close")
], axis=1).dropna()
# 相関係数を計算
correlation_matrix = merged_data.corr()
# 列名を変数として定義
cacao_close_col = "Cacao_Close"
copper_close_col = "Copper_Close"
sugar_close_col = "Sugar_Close"
nasdaq_close_col = "Nasdaq_Close"
# 終値の列のみを抽出してデータフレームに結合
merged_data = pd.concat([
cacao_data["Close"].rename(cacao_close_col),
copper_data["Close"].rename(copper_close_col),
sugar_data["Close"].rename(sugar_close_col),
nasdaq_data["Close"].rename(nasdaq_close_col)
], axis=1).dropna()
print(merged_data.tail())
from scipy.optimize import minimize
from scipy.stats import pearsonr
# 目的関数の定義: 相関係数を最大化
def objective(params):
a, p_a, b, p_b, c, p_c = params # 各商品価格に対する係数と冪乗
# 混合要素の計算
mixed_close = (merged_data['Cacao_Close'] ** p_a * a) * \
(merged_data['Copper_Close'] ** p_b * b) - \
(merged_data['Sugar_Close'] ** p_c * c)
# ナスダック終値との相関係数
corr, _ = pearsonr(mixed_close, merged_data['Nasdaq_Close'])
return -corr # 最大化のための負の相関係数
# 初期係数と冪乗
initial_params = [1, 1, 1, 1, 1, 1] # 係数と冪乗の初期値
# 最適化の実行
result = minimize(objective, initial_params, method='BFGS')
# 結果の表示
print(f"Optimized Coefficients and Powers: {result.x}")
print(f"Maximum Correlation: {-result.fun}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment