Audibleで聞いて良かったおすすめタイトル

アフィなし

自己啓発・思考法

Audible版『人生は、運よりも実力よりも「勘違いさせる力」で決まっている 』 | ふろむだ | Audible.co.jp

Audible版『具体と抽象 』 | 細谷 功 | Audible.co.jp

Audible版『アナロジー思考 』 | 細谷 功 | Audible.co.jp

Audible版『非常識な成功法則【新装版】 』 | 神田 昌典 | Audible.co.jp

Audible版『イシューからはじめよ ― 知的生産の「シンプルな本質」 』 | 安宅 和人 | Audible.co.jp

エンタメ

Audible (オーディブル):本は、聴こう。 written by ナイツ |Audible.co.jp

Audible版『ぼくは愛を証明しようと思う。 』 | 藤沢 数希 | Audible.co.jp

金融

Audible版『バフェットからの手紙 』 | ローレンス・A・カニンガム/増沢 浩一 | Audible.co.jp

Audible版『賢明なる投資家 - 割安株の見つけ方とバリュー投資を成功させる方法 』 | ベンジャミン・グレアム | Audible.co.jp

Audible版『投資家のヨットはどこにある? プロにだまされないための知恵 』 | フレッド・シュエッド・ジュニア, 関岡 孝平, 岡本 和久 | Audible.co.jp

入眠用

Audible版『ブッダのことば: スッタニパータ 』 | 中村 元 | Audible.co.jp

tkinterで業務効率化Python GUIアプリを作った

概要

最近はKaplan Schweserというe-learningプラットフォームを使い、CFAの勉強をしている。

Kaplanの練習問題はCFAの本番試験と同じ3択式であるが、間違えた問題だけを解く機能がなかったり、外出先で手軽に問題を解こうと思ってもログインが必要だったりで何かと不便。

そこで、間違えた問題・まぐれで正解した問題をQuizletという暗記カード作成Webサイトに登録し、出先や、自宅で効率的に勉強をしている。

問題をそのままコピーすると以下のようになるが

Ashok Jain is assessing the [...] Lutina's currency would:

A)

excessively appreciate in the long-term.

Incorrect Answer

B)

excessively depreciate in the long-term.

Incorrect Answer

C)

excessively appreciate in the short-term.

Correct Answer

Explanation

Dornbusch overshooting model. This model assumes that prices are sticky (inflexible) in the short term and, hence, do not immediately reflect changes in monetary policy.

これを毎回手作業で以下のように問題文ブロックと答え&解説ブロックの2つに分ける必要があった

問題文ブロック

Ashok Jain is assessing the [...] Lutina's currency would:

A) excessively appreciate in the long-term.

B) excessively depreciate in the long-term.

C) excessively appreciate in the short-term.

答え&解説ブロック

C

Dornbusch overshooting model. This model assumes that prices are sticky (inflexible) in the short term and, hence, do not immediately reflect changes in monetary policy.

ただ、この分ける作業が面倒くさかったので、tkinterを使い以下のことをするアプリを作成した。

  1. クリップボードの内容を読み取り
  2. 読み取った内容を処理して、問題文ブロックをクリップボードに保存
  3. 次のボタンを押すと、答え&解説ブロックをクリップボードに保存

使用デモ

コード

import re
import pyperclip
import tkinter as tk
import tkinter.ttk as ttk
from tkinter.scrolledtext import ScrolledText

class Application(ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.master.title("Title")
        # self.master.geometry("300x400")
        self.create_widgets()

    def create_widgets(self):
        self.btn1 = tk.Button(self.master, 
                                   text='① Load Text and Copy Question',
                                   command=self.process_text(),
                                   height=2)
        self.btn1.pack(fill = 'x')
        
        self.text1 = ScrolledText(root,
                                  font=("Arial", 9), 
                                  height=10,
                                  width=40)
        self.text1.pack(fill = 'x')
        
        self.btn2 = tk.Button(root,
                                   text='② Copy Answer & Explanation',
                                   height=2, command=self.copy_ans())
        self.btn2.pack(fill = 'x')
        
        self.text2 = ScrolledText(root, font=("Arial", 9), height=15, width=40)
        self.text2.pack(fill = 'x')

    def process_text(self):
        def inner():
            try:
                self.text1.delete("1.0","end")
                self.text2.delete("1.0","end")
                t = pyperclip.paste()

                # find the answer
                splitted = re.split('A\)\r\n|B\)|C\)', t)
                if 'Correct Answer' in splitted[1]:
                    self.correct_ans = 'A'
                elif 'Correct Answer' in splitted[2]:
                    self.correct_ans = 'B'
                elif 'Correct Answer' in splitted[3]:
                    self.correct_ans = 'C'
                else:
                    raise Exception("Can't find the correct answer choice")
                out = t.replace('Incorrect Answer\r\n', '')
                out = out.replace('Correct Answer\r\n', '')
                for alph in ('A', 'B', 'C'):
                    out = out.replace(alph+')\r\n', alph+') ')
                out = re.sub(' \(Module .*\)', '', out)
                self.mondai_txt, self.ans_txt = out.split('\r\nExplanation\r\n')
                self.ans_txt = self.correct_ans + '\n\n' + self.ans_txt
                # print(self.mondai_txt, self.ans_txt)
                self.text1.insert('1.0', self.mondai_txt)
                self.text2.insert('1.0', self.ans_txt)
                pyperclip.copy(self.mondai_txt)
            except Exception:
                self.text1.insert('1.0', Exception)
        return inner
    
    def copy_ans(self):
        def inner():
            pyperclip.copy(self.ans_txt)
        return inner

if __name__ == '__main__':
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()

これをワンクリックで走らせるために、以下のbatファイルも作成している

D:\projects\venvd\Scripts\activate.bat && python D:\projects\tools\kaplan2quizlet.py

2022年5月に受けたCFA Level 1の結果、反省点、今後の勉強方針

TR;DR

試験結果:合格

点数は上位10%よりさらに好成績だった(自慢)。

↓科目別点数。何故か株の人間なのにFixed Incomeが最高得点で、Financial Statement Analysisが最低得点だった。

反省点:自分用まとめノートはどうせ見ないので作らなくてよかった。その分、もっと演習問題を解くことに時間を使えばよかった。Quizletは便利。

元々、記憶のために以下のようなまとめノートをメモアプリ上に作っていた

• Stated rate < Effective rate (= Effective annual rate)
• Annuityなどの最初のPaymentが4年後なら、3年間Discountする
• Annuity dueは年初にPMTがあるので、電卓をBGNモードにする

しかし、試験間際になってこれを見返そうとしても、実際の問題と結びつかないので、あとから振り返ってみると意味があまりなかった用に思える。

並行して、Schweserの練習問題で間違えたものをQuizletにまとめていったのだが、これは時間効率が良かった気がする。

様々な勉強法の本で言われていることだが、記憶の定着には覚えようとするのではなく、思い出そうとする行為が最も効果的なので、一旦テキストを読んでコンセプトを理解したら、練習問題をひたすら解いていき記憶をするのが資格試験には最適。ただ、通勤中などはわざわざScheswerでQuizを開くのはログインが必要だったり、途中で辞めるとリセットされてしまい面倒なので、Quizletに間違えた問題だけを移植してひたすら解いていくのが良い。さらに、Schweserには間違えた問題だけを解く機能がないが、Quizletではそれが可能。

Quizlet上でSchweserの問題をコピペしている

今後の勉強方針:2023/05にLevel 2の試験を受ける予定。

なぜセルサイドの人間はCFAを取得すべきではないか(デメリット) - babaye's notes

この記事でひたすらCFA試験をディスっていたが、心が変わりLevel 2を受けることにした。

なぜLevel 2を受けるかというと

  • CFA Level 1が終わったら、自分が好きな読書や統計の勉強をするぞ、とやる気に満ち溢れていたが、試験が終わると力が抜け、ゲームばっかりする生活になってしまったから
  • Level 1を勉強した時間が急に勿体なく、愛おしく思えてきたから
  • 職場の人に褒められて嬉しかったから
  • なんだかんだバイサイドに行きやすくなるらしいから

なぜセルサイドの人間はCFAを取得すべきではないか(デメリット)

2022/05に受験したCFAに対する恨み節をここに記す

理由1:そこまでキャリアアップに有効ではない

CFA証券アナリストの転職・求人情報|求人ボックス

CFAを持っていたからと言って外資系バイサイドで数千万円自動的に稼げるわけではない。1000万円前後の仕事が相場。

CFAは有用ですか?との質問への答え:

Is CFA really worth it, especially in India? Why or why not? - Quora

理由2:内容が面白くなく、非実用的なものが多い

Q:IFRSとUS GAAPで、LeaseはCash flow statementでそれぞれどのように分類されるか?

A:元本部分はIFRS、US GAAP両方Cash flow from financingだが、金利部分はIFRSではOperating Cash FlowかFinancing Cash Flowのどちらか、US GAAPではOperating Cash Flowに分類する必要がある

このような95%の日本の金融勤務の人間には関係ない知識を数千個くらい覚える必要があるのがこのCFAという資格。自分がアメリカ人なら良いが、日本で日本企業をメインに見ている私には勉強内容の半分に全く興味が持てなかった。

それゆえ、CFAホルダーの運用するポートフォリオは、そうでないポートフォリオをアンダーパフォームすることがわかっている

www.bloomberg.co.jp

理由3:受験費用が高いだけでなく、毎年維持費がかかる

受験費用は登録費などを合わせるとLevel 1だけでも14万円ほどかかり、晴れて合格しても毎年数万円会費を支払う必要がある。「会社が払ってくれるから大丈夫」と気軽な気持ちでいた私だが、合格しないと会社が費用を負担してくれないので、途中で嫌になっても泣きながらテスト勉強を続ける羽目になってしまった。名刺にCFA Holderと書くのは、私は資格ビジネスに数十万円を費やし、さらに毎年数万円カモられているアホですと宣伝しているようなもの

理由4:名刺にCFA Holderと書けてもあまり良いことがない

知名度の低さ、非実用的なコース内容から、「CFA持ってます」と言っても「ふ~ん、勉強熱心なんだね」以上の感想が出てこない。

理由5:他に勉強すべきことが沢山ある

「CFAあって損はないよ」と言われて始めたCFA。確かにCFAを取得しても「損」はしないが、この時間を他のことに充てていれば、という機会損失が大きい。統計学、経済学を勉強したければ大学の教科書を読めば良く、経済動向について知りたければFinancial Timesを読み、丸善で買った分厚い本を読むのが効率的で、データサイエンスを勉強したいならCourseraで無料の上質なコースが沢山ある。

理由6:体系的に学問を勉強できないので、「知ってる気」になって終わり

覚えることが多いので、結果暗記勉強になって終わり。なぜそうなっているのか?を深く考えている時間はなく、IFRSとUS GAAP会計基準の細かい違いについて丸暗記しなければいけないテスト。

理由7:興味のない分野についてひたすら勉強させられる

私は株サイドの人間だが、CFAではヘドが出るくらい債権の勉強をさせられた。「広い知識がついていいじゃん」と思う方は、"bond equivalent yield"と"annualized yield calculated based on a 360-day year"と"effective annual yield"の違いの知識をつけることでどれだけ自分にメリットがあるか考えてほしい。

理由8:問題文が運転免許試験並みに破綻している

例題:Balance-sheet-based accruals ratio が 以下のようであった。

2023 2022 2021
Balance-sheet-based accruals ratio (%) –7.9 –3.8 3.1

この指標はTrending Lower? Trending Higher?

答え:Trending Higher. なぜならAccruals ratioは0より離れていると悪化なので、絶対値で考えるべき。

!?!?!?!?!?

Q:交差点を曲がるときは歩行者に注意すべきである

A:✕。歩行者には常に注意すべきである。

並に理不尽な回答。これに数十万円払いますか?

理由8:必要勉強時間が日本で1/3程度過小評価されている

日本語でCFAの勉強時間を調べると300時間x3=900時間と出てきて、USCPAの必要勉強時間を調べると1,200〜1,500時間と出てくる。一見USCPAの方が大変な資格に見えるが、これは全くの逆である。

英語ではCFAの勉強時間はそのまま900時間必要となっているのに対し、USCPAの勉強時間は300-400時間と記載されてる。

USCPAに1200時間かかる日本人基準で計算し直すと、CFAレベル3まで取得するのは4000時間程度必要な計算になるが、CFAとUSCPAは同レベルの試験だと世間からは見られているので、CFAのコスパは悪い

ではどうすれば良いのか

提案1: CFAは科目を選択制にせよ

債権に興味のない人に債権の細かい定義を聞いても無駄であり、日本のマーケットを見ている日本人にUS GAAPIFRSの違いを勉強させても無駄なので、CFAは試験科目を選択制にするべき

提案2:自分で金融の勉強をしよう

CFAの試験内容は、当然ながらCFA以外のソースで勉強することが出来る。FitForBankingといったような学習サービスや、興味のある分野の金融関係の良書を読めば、資格こそ手に入らないものの、ずっと効率的に金融の知識を身に付けることが可能である

提案3:FRM(Financial Risk Manager)を代わりに受けよう

セルサイドの株トレーダーいわくFRMのほうがより実用的で、かつ踏み込んだ内容を勉強できるらしいCFAは広く浅くの知識で、実用性は低い)。数学や統計などの知識が必要になるが、データサイエンスが盛り上がっている昨今、FRMで金融数学、統計の基礎を勉強するのは、CFAに比べて実用的だと思われる。

[2022/7/10 追記]

テストの結果が出たので、新しく記事を書きました。

証券会社で働く上で知っておいて損はない基礎知識

  • ダウ指数とS&P500とNASDAQ100指数の違い
ダウ S&P500 NASDAQ100
銘柄数 30 500 100
計算方法 ダウ式平均株価 時価総額加重平均 時価総額加重平均
特徴 いわゆるblue-chip companiesの指数。つまりみんなが知っている大企業の株価を表している 色んな会社に平均的に投資 GAFAMなどのいわゆるBig-techに大きく影響される指数。金融業界の会社は入っていない

知らなくてもいい細かいこと * Fedの「1回の利上げ」とは、25bps利上げすることを指す。75bpsの利上げは、3回の利上げと言う。 * 株式分割があると、ダウ平均では株式分割があった会社のウエイトは下がるが、日経平均株価では下がらない。

以下あるある

  • Bloomberg指紋認証は、ゆっくりスワイプした方が良い
  • 受話器は机に直置き
  • 電話機は投げても壊れないように形がゴツい
  • 机の引っ越しは業者に頼むが、保険をかけるので1デスクあたり数十万円かかる
  • 古参社員は皆口を揃えて昔(=2008年より前)は良かったと言う

「ファイナンス機械学習」2章ETFトリックの具体例

(参考)ETFトリックとは(具体例はすこし下)

なぜETFトリックが必要になるか、ベーシストレーディングというものを使って説明する。

日経225の先物の値段の理論値は、日経225の価格と、利子率と、予想配当利回りと、レポ利率 (=株を借りるのにかかるコスト)から求められる。

先物価格理論値 = 今の日経225価格 + 予想金利収入 - 予想配当収入 - 予想レポ収入

先物と日経225の差、つまり(先物価格 ー 日経225価格)はベーシスと呼ばれる。

マーケットで観測されるベーシスは、理論値と一致するとは限らない。この理論値からのズレを使って収益を上げるトレーディング手法をベーシス・トレーディングという。

例えば、ベーシスが3日連続で上昇したら4日目は下落しやすい、のような法則を見つけることができたら、そのアイデアを使って儲けることができるかもしれない。

ただ、このベーシス自体の時系列を取ってきて、モデル化して予測するのは問題点がある:①ベーシスの値が正になったり負になったりするとモデル化しにくい②構成株のウエイトの変化によって価格が変動してアービトラージの機会がないのにベーシスの値が変わったりする事がある*1ので、正しくベーシスの変動を予測しても儲けられないことがある。

そこで、ベーシスに1ドル投資したら、投資した1ドルはどのくらい増減するか?という問題を考える。「ベーシスに投資する戦略をとるETFがあったら値動きはどうなるか?」という考え方と一緒なので、この手法をETFトリックという。

ベーシストレーディング以外にも、とうもろこしや金などの先物を商品使ったトレード戦略を考える際、とある満期の先物を使うと数ヶ月分のトレード履歴しか取得できないが、ETFのような先物をロールして価格の連続性を保つ方法なら、何十年分のデータが取得可能である。ETFが存在する商品ならそれを使ってしまえば楽だが、そうではない場合、またETF価格は管理手数料が引かれているので正確に計算したい場合は、先物などを自分でETFっぽく変換すると、価格の連続性が保たれた時系列データが手に入る。

時点tでの投資資金を K _ tドルとすると、最初は1ドルからスタートするので、 K_0 = 1 K_tは以下のように求められる。

\begin{align} \displaystyle K _ t &= K _ {t-1} + \text{t期の合計損益} \\ &= K _ {t-1} + \sum _ {全銘柄} \text{t-1期での各株の保} \text{有数} \times \text{各株からの利益率(ドル)} \\ &= K _ {t-1} + \sum _ {全銘柄} (\text{t-1期での各株の保} \text{有数} \times \text{為替レート}) \\ & \times ( \text{1株あたり株} \text{価変動額} + \text{1株の配} \text{当利} \text{回り} ) \\ &= K _ {t-1} + \sum _ {i=1} ^ {I} h _ {i, t-1} \varphi _ {i, t} (\delta _ {i, t} + d _ {i, t}) \end{align}

数あるタイムステップtのうち、株のリバランスのタイミング(ロールの日など)( B)で、株iの保有 h _ {i, t} を、以下のように変化させていく。

\begin{align} \displaystyle h _ {i, t} = \begin{cases} \text{所有資産合計} \times \text{株iへの割合} \div \text{株iの値段(ドル)} & (\text{if } t \in B) \cr h_{i, t-1} & (\text{otherwise}) \end{cases} \end{align}

この条件分岐は、リバランスを行う( B)の時期以外は、株数は前のタイムステップと一緒ということ。

また、ここで、

 \displaystyle \text{所有資産合計} \times \text{株iへの割合} \div \text{株iの値段(ドル)} = K _ {t} \times \frac{\omega _ {i,t} }{\sum _ {\text{全銘柄}} | \omega_{i,t} | } \div ( o _ {i, t+1} \varphi _ {i, t} )

と表せる。ここで、 \sum _ {全銘柄} | \omega _ {i,t} | に絶対値がついているのは、 \sum _ {\text{全銘柄}}  \omega _ {i,t}  = 0だったときに無限大になってしまうから。

具体例

以下のような金と銀の仮想の先物データでETFトリックを試してみる。

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
(参考) BASIS 1 1 5 6 8 -10 -11 5 2
  • tはタイムステップ
  • Rebalanceは t \in B, つまりtにリバランスがあるかどうかを示している
  • opnは始値(今後資産iの時点tの始値 o _ {i, t}と表す)
  • clsは終値
  • 配当dは単純化のため0とする
  • レート \varphi _ {i, t}は単純化のため1とする
  • 上で述べたように、BASIS自体をモデル化するのは難しそう

まず、アロケーションベクトルωを決定してく。金が上がると思うので今回は金-銀のスプレッドが大きくなる方にベッドしたい。シンプルに金のωを1、銀のωを-1とする↓

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1

次に、金銀それぞれの価格変化δを以下の式から求めていく↓

\begin{align} \displaystyle \delta _ {i, t} = \begin{cases} p _ {i, t} - o _ {i, t} & (\text{if } (t-1) \in B) \cr \Delta p _ {i, t} & (\text{otherwise}) \end{cases} \end{align}

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1

初期条件の K_0 = 1を表に書き入れる↓

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 ? ? ? ? ? ? ? ?

この K_0 = 1をもとに、金と銀それぞれの保有数hを計算する

 h _ {i, t} = K _ {t} \times \frac{\omega _ {i,t} }{\sum _ {\text{全銘柄}} | \omega_{i,t} | } \div ( o _ {i, t+1} \varphi _ {i, t} )を使うと、金の初期保有数は

\begin{align} \displaystyle h _ {金, 0} &= 1 \times \frac{1}{2} \div 10 \\ &= 0.05 \end{align}

であり、銀の初期保有数は

\begin{align} \displaystyle h _ {銀, 0} &= 1 \times \frac{-1}{2} \div 8 \\ &= -0.0625 \end{align}

ここで、使われている値段は翌日の始値であることに注意。これは、t=0の引け後の資産を使って翌日の朝、成行注文を出していると考えれば良い。

今求めた保有数は、リバランスが来るまで変わらない。

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 ? ? ? ? ? ? ? ?
gold h 0.05 0.05 0.05 0.05 ? ? ?? ?? ??
silv h -0.0625 -0.0625 -0.0625 -0.0625 ??? ??? ???? ???? ????

 K _ t  = K _ {t-1} + \sum _ {i=1} ^ {I} h _ {i, t-1} \varphi _ {i, t} (\delta _ {i, t} + d _ {i, t})より、 K _ {1}, K _ {2}, K _ {3}, K _ {4}を計算する。

\begin{align} \displaystyle K _ 1 &= K _ {0} + 0 \times 0.05 + 0 \times (-0.0625) \\ &= 1 \\ K _ 2 &= K _ {1} + 1 \times 0.05 + (-3) \times (-0.0625) \\ &= 1.2375 \\ \vdots \end{align}

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 1 1.2375 1.3 1.4375 ? ? ? ?
gold h 0.05 0.05 0.05 0.05 ? ? ?? ?? ??
silv h -0.0625 -0.0625 -0.0625 -0.0625 ??? ??? ???? ???? ????

t=4でリバランスをして、hを調整する。 h _ {i, t} = K _ {t} \times \frac{\omega _ {i,t} }{\sum _ {\text{全銘柄}} | \omega_{i,t} | } \div ( o _ {i, t+1} \varphi _ {i, t} )より、

金:

\begin{align} \displaystyle h _ {金, 4} = h _ {金, 5} &= 1.4375 \times \frac{1}{2} \div 8 \\ &= 0.089844 \end{align}

銀:

\begin{align} \displaystyle h _ {銀, 4} = h _ {銀, 5} &= 1.4375 \times \frac{-1}{2} \div 17 \\ &= -0.04228 \end{align}

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 1 1.2375 1.3  1.4375  ? ? ? ?
gold h 0.05 0.05 0.05 0.05 0.089844 0.089844 ?? ?? ??
silv h -0.0625 -0.0625 -0.0625 -0.0625 -0.04228 -0.04228 ???? ???? ????

求めたhをもとに、 K _ {5}, K _ {6}を求める(緑色の部分)

(式、表省略)

求めたKをもとに、t=6, 7, 8での株保有数を求める

(式、表省略)

求めた株保有数をもとに、 K _ {7}, K _ {8}を求める

(式、表省略)

以上の計算で、時系列データKtが生成された

t 0 1 2 3 4 5 6 7 8
Rebalance - - - - B - B - -
gold opn 7 10 9 8 7 8 2 18 16
gold cls 8 8 9 9 8 6 0 17 15
silv opn 6 8 6 2 2 17 15 11 15
silv cls 7 7 4 3 0 16 11 12 13
gold ω 1 1 1 1 1 1 1 1 1
silver ω -1 -1 -1 -1 -1 -1 -1 -1 -1
gold δ - 0 1 0 -1 -2 -6 -1 -2
silver δ - 0 -3 -1 -3 -1 -5 1 1
Kt 1 1 1.2375 1.3 1.4375 1.300092 0.972426 0.901213 0.802989
gold h 0.05 0.05 0.05 0.05 0.089844 0.089844 0.027012 0.027012 0.027012
silv h -0.0625 -0.0625 -0.0625 -0.0625 -0.04228 -0.04228 -0.0442 -0.0442 -0.0442
(参考) BASIS 1 1 5 6 8 -10 -11 5 2

間違っていたら教えて下さい。

[付録]その他の章

「ファイナンス機械学習」1章&2章メモ - babaye's notes

「ファイナンス機械学習」3章&4章メモ - babaye's notes

*1:具体例の最初の表のBASIS系列を参照すると、系列がロール時期に大きく動いてしまうことがわかる

Pythonで任意のタイミングで一時停止・再開をする

結論

except KeyboardInterrupt

と、「control + c」を使う

背景

ボットなどを走らせている時、sleepではなく任意の好きなタイミングでプログラムを一時停止したい。

この際、sleepを使うと任意のタイミングでできないし、ctrl + cではプログラムが終了してしまう。

サンプルコード

import time

n = 0
while True:
    try:
        time.sleep(1)
        n += 1
        print(n)
    except KeyboardInterrupt:
        input('Program paused. Hit ENTER to resume')