fillは shallow copy (浅いコピー)作るので危険
めちゃハマったのでメモ。
julia> mutable struct Hoge x::Int end julia> xs = fill(Hoge(10), 2) 2-element Array{Hoge,1}: Hoge(10) Hoge(10) julia> xs[1].x = 333 333 julia> xs[2].x 333
内包表現(でいいのか?)使うならおk。
julia> xs = [Hoge(10) for _ in 1:2] 2-element Array{Hoge,1}: Hoge(10) Hoge(10) julia> xs[1].x = 333 333 julia> xs[2].x 10
Sys.getenv()の結果をdata.frameとして扱いたい
Dlistというクラスのオブジェクトになっていて使いにくい。
> x <- Sys.getenv() > class(x) [1] "Dlist"
しょうがないんで、これをdata.frameとして返却する関数を書いた。
get_env <- function(x=NULL) { env <- Sys.getenv(x) class(env) <- NULL env <- as.data.frame(env, stringsAsFactors=FALSE) env <- cbind(rownames(env), env) rownames(env) <- NULL names(env) <- c("key", "value") env }
これを使うと、環境変数をdata.frameとして取得でき、更にdplyr & stringrと組み合わせることで楽にフィルタリングできる。
> x <- get_env() > class(x) [1] "data.frame" > dplyr::filter(x, stringr::str_detect(key, "(COMPUTERNAME|DISPLAY)")) key value 1 COMPUTERNAME LAPTOP-S5NHVV53 2 DISPLAY :0
このあたりの”tidy Sys"系関数はパッケージングされてるのかな?なければ作ってもよい気がしてきた。
おしまい。
R MarkdownでTwo Column(2列)なレポートを作りたい
将来的にオレオレJulia v.s. Rチートシートを作るための礎。
主にこちらのStackoverflowを見て適当にCSSコピペった。
以下のMarkdownが
のような形でHTMLになる。
この左右どちらかをJuliaのengineに帰ればHTML版のチートシートは作れるぞと。
--- title: "Two column R markdown" author: "Nagi Teramo" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` <style> .column-left{ float: left; width: 47.5%; text-align: left; } .column-right{ float: right; width: 47.5%; text-align: left; } </style> <div class="column-left"> ## Left hand side ```{r} print("Hello, left side") ``` </div> <div class="column-right"> ## Right hand side ```{r} print("Hello, right side") ``` </div>
Windows Subsystem for LinuxにJuliaを入れる
諸事情により手を出す&マシン新調予定なのでメモ。
今はWSLっていって、もうBash on Windowsって名前じゃなくなってたんだな。
WindowsのBashからhttps://julialang.org/downloads/のGeneric Linux Binaries for x86をwgetして、解凍して、名前変えておしまい。
こんなかんじ
$ wget https://julialang-s3.julialang.org/bin/linux/x64/0.6/julia-0.6.2-linux-x86_64.tar.gz $ tar zxvf julia-0.6.2-linux-x86_64.tar.gz $ mv julia-d386e40c17/ julia $ rm julia-0.6.2-linux-x86_64.tar.gz $ julia/bin/julia _ _ _ _(_)_ | A fresh approach to technical computing (_) | (_) (_) | Documentation: https://docs.julialang.org _ _ _| |_ __ _ | Type "?help" for help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 0.6.2 (2017-12-13 18:08 UTC) _/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release |__/ | x86_64-pc-linux-gnu julia>
0.6.2系が入った。
IJuliaのインストール
これも素直にJuliaのコンソールから
julia> Pkg.add("IJulia")
でおしまい。
途中動いてんのかフリーズしてんのかわからんくらい待たされた気がする。
Notebookは↓で起動&Jupyter同様デフォルトだと8888ポートで起動している。
julia> notebook(detached=true) Process(setenv(`/home/teramonagi/.julia/v0.6/Conda/deps/usr/bin/jupyter notebook --NotebookApp.iopub_data_rate_limit=2147483647`; dir="/home/teramonagi"), ProcessRunning)
外国債券(為替ヘッジなし)のリスクは、ほとんど為替から来るという話
掲題の件、ちゃんと数式にしておく。
以下、使うものの定義
- (お持ちになられている)外国債券の時点tでの現地通貨建て価格(面倒なのでUSD仮定):
- (お持ちになられており、日々一喜一憂しているであろう)外国債券の時点tでの円建て価格:
- 時点tでのUSDJPYレート:
- 日次リターン(P(t)はある価格、tは日付を仮定):
- 日次リスク(リスク=標準偏差で定義、stdevは標準偏差):
まず、外国債券価格(円・ドル建て)の間には以下の関係が成立する。
これは「証券価格を表示する通貨を変更しますよ〜」というだけなので、自明である。
従って、外国債券(円建て)のリターンは
となる。正しここで、
- : 外国債券(ドル建て)
- : USDJPYレートのリターン
である。更に上式は
と整理できる。
さて、通常、 は に比べて小さい(日次のリターンは%のオーダーなので、100分の1程度小さくなると期待できる)ので、無視できるとすると、
となり、”外国債券(円建て)のリターンは外国債券(ドル建て)と為替(USDJPY)リターンの和になる”という綺麗な関係式が得られる。
従って、外国債券(円建て)のリスクは
となる。ただしは”外国債券(USD建て)のリターンと為替(USDJPY)リターンの相関”である。
上式の√の中で何が(通常)支配的にふるまうかというと、為替(USDJPY)のリスクなんでまぁそういうことなんです。
paste0()を捨てたい
文字列を結合するときに使う paste0()を捨てたくて、
`%+%` <- function(x, y){paste0(x, y)}
を定義してみた。
こんな感じで使う。
> "hoge" %+% "moge" [1] "hogemoge"
うれしい・・・かな?
tidyverseあたりに出てきてもよさそうな機能なんだが、出てきたという話を聞いたことがないな。
bitFlyer LightningのAPIをRから使う
"何でもRでやるおじさん日本代表(タヒチ在住)"として、いい加減書いておかねばならないと思った。
まずは、APIキーを頑張って以下から取得してください。
そして、その情報とbitFlyerのURLをなんでもいいんだけど適当な変数に入れておく。
BITFLYER_KEY <- "<your key>" BITFLYER_SECRET <- "<your secret>" BITFLYER_URL <- "https://api.bitflyer.jp"
で、早速データを取得する。
まず、PublicのAPIの場合だが、この場合、APIキーの情報はいらない。
例えばBitcoinの板情報はこんな感じで取得+Rっぽく処理しておくといいだろう。
必要になるhttr, dplyr, purrrパッケージは適当にインストールしておいてください。
> content <- httr::content(httr::GET(paste0(BITFLYER_URL, "/v1/board"))) > dfl <- purrr::map(content[-1], ~ dplyr::bind_rows(.x)) > dfl $bids # A tibble: 3,387 x 2 price size <dbl> <dbl> 1 1974375 0.0060 2 1974370 1.0013 3 1974020 0.3000 4 1974000 0.1090 5 1973982 0.0010 6 1973981 0.0010 7 1973825 1.5000 8 1973557 0.0020 9 1973100 0.0100 10 1973010 0.2000 # ... with 3,377 more rows $asks # A tibble: 1,686 x 2 price size <dbl> <dbl> 1 1975486 0.0090000 2 1975490 0.2390648 3 1975491 1.4850191 4 1976989 0.0010000 5 1977000 1.0549186 6 1977003 0.3000000 7 1977781 2.0000000 8 1978000 0.1999200 9 1978100 0.6500000 10 1978117 1.1134800 # ... with 1,676 more rows
ちょっと面倒なのはPrivate APIで、これは公式ドキュメントに以下のようにせにゃならんと書いてある。
公式サンプルがNode.jsだったので、これをRで書き直した。
以下の例だと自分の口座情報が取得できます。
digestパッケージはまた別途入れておいてください。
# APIのパス path <- "/v1/me/getbalance" # unix time stamp timestamp <- as.numeric(Sys.time()) # 作れと言われてるSign sign <- digest::hmac(paste0(timestamp, "GET", path), key=BITFLYER_SECRET, algo="sha256", serialize=FALSE) # ヘッダーに突っ込んでおくる header <- httr::add_headers( `ACCESS-KEY`=BITFLYER_KEY, `ACCESS-TIMESTAMP`=timestamp, `ACCESS-SIGN`=sign, `Content-Type`="application/json" ) httr::content(httr::GET(paste0(BITFLYER_URL, path), header))
次は発注すっか。