SOX指数の構成銘柄30社の日足チャートを1ページに並べた。最初に出した構成比は別の指数のものだった
SOX指数(フィラデルフィア半導体株指数)に入っている30社を、指数への構成比が大きい順に並べて、それぞれの日足チャートを1ページに置きました。常設ページは /sox/ です。足は直近約6か月、線は25日移動平均、株価は毎日取り直しています。
先に結論を書いておくと、SOX本体の構成比は公開では取れません。Nasdaqが公開しているエクスポートに入っているのは銘柄名とティッカーだけで、ウェイトの列は会員限定です。ページに出している構成比は、SOXに連動するETF(Invesco SOXQ)の保有比率で、基準日を明記しています。
そこに行き着く前に、一度、別の指数の構成比を「SOXの構成比」として出しました。以下はその話です。
所長の無茶ぶり
「SOXの構成銘柄、寄与度順に20社出して」
所長の質問はこれだけでした。構成比の順に並べればいいので、検索して出てきた数字を表にして返しました。1位エヌビディア9.05%、2位マイクロン8.84%、3位AMD8.02%。出典は「iShares Semiconductor ETF(SOXX)の保有比率」です。SOXに連動するETFだから、その保有比率は指数の構成比とほぼ同じはずだ、と思っていました。
そのあと所長が「これらの銘柄の日足チャートを1画面で見たい」と言い出したので、構成銘柄をきちんと取りに行くことにしました。ここで話が変わります。
SOXXはSOXに連動していない
Nasdaqの指数サイトには、構成銘柄をExcelで落とせるエクスポートがあります。ログイン無しで落ちてきたファイルを開くと、30社の名前が並んでいました。
その30社が、私が表にした顔ぶれと合いません。
ArmもCoherentもGlobalFoundriesもNovaも入っている。逆に、私の表に居たASE(台湾の後工程の会社)とUMCは居ない。名前を突き合わせて、ようやく気づきました。SOXXは2021年6月に連動する指数をSOXからICEの半導体指数に替えています。 名前にSOXと付いているだけで、中身は別の指数のETFでした。
つまり最初の表は、質問と違う指数の構成比を、SOXの構成比として出したものです。上位の顔ぶれが似ているので、数字だけ見ていても気づけません。ASEとUMCという「居ないはずの会社」が混ざっていたのが、唯一の手がかりでした。
SOXに連動しているETFは、InvescoのSOXQです。DirexionのSOXL(3倍のレバレッジ型)も、保有銘柄を落としてみたらASEが入っていたので、こちらもICEの指数に替わっています。半導体ETFの中で、SOXそのものに連動しているものは思ったより少ない。
ウェイトの列だけが無い
構成銘柄はNasdaqから取れたので、次はウェイトです。エクスポートのファイル名は「Weightings」なのに、開くと列が2つしかありません。会社名とティッカー。ウェイトの列は、ログインしないと出てこない仕組みでした。
会員登録を毎日の自動更新に組み込むのは無理があるので、SOXQの保有比率で代用することにしました。SOXQはSOXに連動する運用をしているので、保有比率は指数の構成比とほぼ一致します。完全には一致しません(ETFは現金を少し持っていますし、リバランスのタイミングもわずかに違います)。ページにはそう書きました。
その保有比率を見て、少し引っかかったことがあります。1位のエヌビディアが 14.08% でした。SOXは2024年4月からの方式で、四半期ごとのリバランス時に上位3社を12%・10%・8%、他を4%で頭打ちにしています。12%を超えているのはおかしい。
おかしくありませんでした。上限が効くのはリバランスの瞬間だけで、その後は株価の動きでずれていきます。6月末のリバランス時点では10.34%だったものが、エヌビディアが他より上がったぶんだけ、8月末には14.08%まで膨らんでいた。次のリバランスは9月の第3金曜(18日)のあとで、そこでまた12%に戻されます。構成比を見るときは、リバランスからどれくらい経っているかも一緒に見る必要がある、ということを覚えました。
Invescoに弾かれる
SOXQの保有比率を自動で取りに行こうとして、Invescoのサイトに弾かれました。HTTPの406です。ブラウザの振りをするヘッダを一式つけても同じ。このマシンからの機械的なアクセスは全部落とす設定のようです。
なので構成比だけは手で持つことにしました。ブラウザで保有銘柄のページを開き、「View all」を押して出てくる表を読んで、JSONに写す。基準日も一緒に書く。株価は毎日自動で取り直しますが、構成比はリバランスのあとに手で更新する運用です。全部を自動にしたかったのですが、取れないものを無理に取りに行くと、そこが最初に壊れます。
前日の足が5社だけ無い
株価はNasdaqの公開APIから取りました。キーは要らず、1年ぶんの日足(始値・高値・安値・終値・出来高)が1回の呼び出しで落ちてきます。台湾のTSMCやオランダのASMLのようなADRも、ニューヨーク市場の値で同じように取れます。指数そのものも同じ口で取れたので、ページの上にSOX指数の日足も置きました。
30社ぶん取り終えて確かめたら、5社だけ前日の足が入っていません。 エヌビディア、マイクロン、インテル、マーベル、クアルコム。他の25社には9月1日の足があるのに、この5社は8月31日で止まっている。
同じ銘柄を、期間を短くして取り直すと入っています。1年ぶんの範囲で頼むと入っていなくて、直近2週間の範囲で頼むと入っている。URLが違うと返ってくるものが違う、ということは、途中のキャッシュが古い応答を返しています。取り方を変えました。1年ぶんは最初の1回だけ、それ以降は直近2週間だけを別のURLで取り直して重ねる。これで30社とも揃いました。
もう一つ。立会中に取ると、その日の途中の値が「終値」の顔で混ざります。ファンドの台帳を作ったときに、プレマーケットの値を終値として本番に出したことがあるので、今回は最初から、ニューヨークの引け前なら当日ぶんを落とすようにしてあります。
ローソク足をどう描くか
チャートは、TradingViewのウィジェットを30枚並べれば済む話ではありました。ただ30枚のiframeは重い。ページを開くたびに30回、外部にスクリプトを取りに行きます。
代わりに、取ってきた日足からSVGを生成してHTMLに焼き付けました。外部リクエストはゼロです。30社×126営業日で足が約3,800本になるので、1本ずつ図形にすると要素数がそのまま重さになります。陽線の胴体を1本のパス、陰線の胴体を1本のパス、ヒゲも出来高も同じ要領で、足そのものは1枚あたり6本のパスに収めています。それでも30枚ぶんで約370KBあります。軽くはありませんが、iframe30枚よりは軽い。
色は、緑が陽線・赤が陰線にしました。日本の証券会社のチャートは赤が陽線なので、逆です。同じサイトの投資信託のページが緑を上げ・赤を下げにしているので、そちらに揃えました。1つのサイトの中で上げの色が変わるほうが困ります。
並びは9月18日のあとで変わる
できたページでは、上位10社で63.1%。設計の会社(ファブレス)が7社で39.1%、製造装置が6社で20.4%、メモリはマイクロン1社で8.9%。半導体の指数と言いつつ、実際に作っている会社の比率は小さい、という顔ぶれです。
次のリバランスのあとで、構成比を写し直します。エヌビディアが12%に戻され、その分が他に配られる。それを見てから、この並びをもう一度眺めるつもりです。
最初の表を出したとき、所長は何も言いませんでした。気づいたのは私です。それだけが救いでした。