Jupyter notebookをWordPressに転載する

概要

・Jupyter notebookを手っ取り早くwordpressに転載する方法。

HTML

div#ipynb_test -> iframe#iframe_test
という構造を想定しています。Jupyterからnotebookをhtmlとして出力。それをwordpressと同一ドメイン上にアップロードしております。

JavaScript

というかJSをどうやって書くかを忘れてたので備忘録。notebookファイル自体には手を加えずにその外側で対応するようにしています。

最初はload関数を使って読み込もうと思ったのですが、レイアウトとCSSが大幅に崩れるようなのでiframeを使っています。
iframeのheightはnotebookのheightと同様になるようにsetIntervalで毎秒判定しています。
(もう少し良い方法があるような気がする)
また転載に伴い必要のないCSSの一部をオフにしています。

描画テスト

Pickleメモ

概要

  • Python標準モジュールのPickleを用いることで任意のPythonオブジェクトをPickle/Unpickle (保存/読み込み)することができる

サンプル

拡張子は.pがコンベンションの模様。

追記(4-Jul-2016)

どうやらpickledファイルを読み込むのはpandasですでにread_pickleで実装されていたっぽい。
またpickleする際はpickleモジュールではなくcPickleモジュールを使ったほうが効率が良い模様。したがってコードは

参考

What is Pickle in python ? | Python Tips
https://pythontips.com/2013/08/02/what-is-pickle-in-python/

11.1. pickle — Python object serialization — Python 2.7.11 documentation
https://docs.python.org/2.7/library/pickle.html

UsingPickle – Python Wiki
https://wiki.python.org/moin/UsingPickle

2015年の各資産パフォーマンスのまとめ(株・債券・FX・コモディティ)

概要

  • 今年ももう終わりなので、株式、債券、FX、コモディティの2015年の1年間のパフォーマンスをまとめておきます。
  • パフォーマンスが特に良かったのは日本株・欧州株。

対象資産

  • 株式:主要株式(米・日・欧州・英)、その他株式(独・仏・加・スイス)、米国ファクター(サイズ、バリュー、グロース)
  • 債券:主要債券(米・日・独・英)
  • FX:先進国通貨(G8)、新興国通貨(メキシコ・ロシア・ブラジル・南アフリカ・トルコ・中国)
  • コモディティ:エネルギー(WTI・天然ガス・ブレント)、金属(金・銀・銅)

主要株式

Equity Developed Markets 2015 Part 1

  • 日経平均がトップ(約+10% p.a.)、次いで欧州(Euro stoxx)、米英はフラット。
  • 8月はボラティリティ急上昇に伴い株式は大幅下落。

その他株式

Equity Developed Markets 2015 Part 2

  • 仏(CAC 40)、独(DAX)が堅調。スイス(SMI)は1月にCHFのペグが外れた際の影響で大幅下落。年初来ではフラット。

米国株式ファクター

Equity US Factors 2015

  • 今年はバリュー(Price to Book)が機能しない一年。Valueがアンダーパフォームする一方、グロースがマーケットをアウトパフォーム。

債券

Rates Developed Markets 2015

  • 総じて僅かながらキャッシュをアウトパフォーム。独(Bunds)は4-6月に金利が急上昇、一時はネガティブリターンとなったが、その後は金利も落ち着き大体+2% p.a.
  • JGBは全然動かない

先進国通貨

FX Developed Markets 2015

  • 少し見辛いかもしれませんが、XXXUSDのパフォーマンスを掲載しています。グラフ上で、上に行けば行くほどその通貨は米ドル対比で強くなっていたことを表しています。
  • AUD, NZD, CADはマイナスリターン。コモディティ関連と思われます。
  • EURもUSD対比で弱かった。
  • JPY, CHF, GBPはほぼフラット。

新興国通貨

FX Emerging Markets 2015

  • 基本的に新興国通貨は弱かった。一時的にはコモディティ価格上昇に伴いRUBは上昇したが、年後半では下落。
  • CNHは8月に大きく下げたが、相対的な下げ幅は小さかった。

コモディティ(エネルギー)

Commodities Energy 2015

  • エネルギー安、今年一年で40%下落。

コモディティ(金属)

Commodities Metals 2015

  • 金属も弱かった。コモディティは基本的にキャッシュをアンダーパフォームする一年だった。

計算方法補足

  • パフォーマンスはキャッシュに対する超過リターンベースで評価。為替ヘッジ後のリターンを掲載しています。
  • 株式は配当、債券はクーポン、通貨は金利差に該当する部分も再投資しています。
  • データは全てQuandlから。

対円為替レートに対するモメンタム戦略

概要

  • 簡単な自己相関を利用したモメンタム戦略の適用
  • 特にUSD, EUR, GBPに対しては良好
  • NZD, CHFに対しては微妙
  • 将来データは使ってない(はず)のだがトレードタイミングがシビアなのでもう少し検証が必要

設定

以下のスリッページを想定。トレードする際に以下の値がリターンからマイナスされるように処理。
個人がやる場合どのくらいが実勢なのか知りませんがとりあえずの仮置き

  • USDJPY: 1銭
  • EURJPY: 3銭
  • GBPJPY: 5銭
  • AUDJPY: 3銭
  • NZDJPY: 6銭
  • CADJPY: 6銭
  • CHFJPY: 9銭

為替レートはQuandlから拝借しています。

結果

各通貨に関して全期間と、2014年以降の結果を掲載

・USDJPY

直近は円安に進んでましたのでロングオンリーとそこまで違いはないですね。
USDJPY_whole

USDJPY_2014

・EURJPY

ユーロ円で見ると緩やかな円高となっているようですね。
あまりトレンドが無いときは戦略のPLもほぼ平らですが、為替が大きく動くときは戦略もそれに追従していることが分かります。結果的に累積PLは階段上になっていますね。
EURJPY_whole

EURJPY_2014

・GBPJPY

GBPJPY_whole

GBPJPY_2014

・AUDJPY

AUDJPY_whole

AUDJPY_2014

・NZDJPY

2006年あたりまでは戦略が効いてないですね。
NZDJPY_whole

NZDJPY_2014

・CADJPY

こちらも全体としてはワークしているように見えますが、2000年から2006年辺りは負け続けていますね。
CADJPY_whole

CADJPY_2014

・CHFJPY

スイスフラン円は全然効いてないですね。2009年辺りまでずっと負け越しています。
取引コストを高く設定している点もありますが、無駄なトレードが多そうですね。

ちなみに2015年始めのフランショックは運良く捉えています笑
CHFJPY_whole

CHFJPY_2014

今後の課題(備忘録)

・NZD, CHFはもう少し改良する余地がありそう
→自己相関が弱い or 負値の場合はトレードしない or トレードシグナルを反転させる

・トレードタイミング
ティックデータなりを使ってもう少し実勢に近いトレードラグを考慮させる。

・他の資産
ちなみに同じロジックを日経平均に適用してみましたが全然ダメでした。

ExcelとPython(とR)を連携させる – ExcelPython編

概要

  • ExcelPythonを使うとエクセルのビルドイン関数のようにpythonの関数を呼び出すことができる
  • 当然numpyにも対応。ただしpythonのクラスには対応していない(?)
  • VBAを1行も書く必要がない。xlwingsではVBAに、呼び出したいpython関数を書かなければならなかった。
  • VBAを駆逐可能という代物

ExcelPythonのインストール

まずは下記サイトダウンロードし、インストールします。今回はv2.0.8を使用しています。

ExcelPython – Write Excel UDFs in Python!
http://ericremoreynolds.github.io/excelpython/

その後エクセルを起動させるとExcelPythonのリボンが追加されています。
150516_1

Pythonコード

ここでは前回の記事で使用した関数を流用します。
ポイントとしてはハイライトしていますが、xlpythonをロードするのと、エクセルから呼び出し可能にしたい関数の前に@xlfuncを書くことです。
あとはこれを使用したいエクセルシートと同階層に保存します。

簡単に説明するとgetDataFromQuandlは指定したティッカーのデータをQuandl経由でロードします。
garchはGARCH(1,1)のボラティリティを返します。

Excelでpythonコードをリンクさせる

といってもそこまで難しいことはなく

150516_2

  1. エクセルシートをマクロ使用可な形式(xlsm)で保存する。その際に先ほど保存した.pyファイルと同じ名前にする必要があります。
  2. ExcelPythonリボンにある「Setup ExcelPython」をクリック
  3. 「Import Python UDFs」をクリック

通常何も手を加えていないエクセルの場合以下の様なエラーが出ると思います。

150516_3

その際は
「Excelのオプション」→「セキュリティセンター」→「セキュリティセンターの設定」→「マクロの設定」→「VBAプロジェクト オブジェクト モデルへのアクセスを信頼する」のチェックをオンにします。

「Import Python UDFs」のクリックが完了すると、先ほど@xlfuncを指定した関数がエクセルから呼び出すことが可能です。

ExcelPythonを使ってみる

まずはaddNumを使ってみましょう。関数を使用しようとするとちゃんとサジェストにも表示されるようになります。
150516_4

Ctrl+Shift+Aの引数表示も対応しています。
150516_5

ということでめでたく計算することが出来ました。
150516_6

ExcelPythonを使ってみる – 返り値が行列編

どうやらExcelPythonはPandasのDataFrameには対応していないので行列に変換する必要があります。
その変換はto_records()で行っています。こうすることでPandasのindexも含めて返すことが可能になります。

先ほど定義したgetDataFromQuandlを使うと以下。1列目の日付は見やすいようにエクセル上でフォーマットを変更しています。

150516_7

ExcelPythonを使ってみる – インプットが行列編

エクセルからの入力が行列の場合、@xlargを使ってその引数のサイズを指定する必要があります。

縦ベクトルで返したいのでPython上で返すときにサイズを変換しています。

150516_8

ということでGARCHボラティリティの計算もすることができました。

感想

xlwingsとの比較という点ですと、
長所

  • マクロを書かなくて良い
  • ビルドイン関数のように呼び出すことができる

短所

  • Pandasに対応していない
  • 行列を返す場合の処理が面倒(予めエクセル上の範囲を指定する必要がある)

という感じでしょうか。

参考

ExcelPython – Write Excel UDFs in Python!
http://ericremoreynolds.github.io/excelpython/

excelpython/docs at master · ericremoreynolds/excelpython · GitHub
https://github.com/ericremoreynolds/excelpython/tree/master/docs