turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

Firefox(Quantum) タブバーを消す設定メモ

以前書いた記事でタブバーを消していたが、Firefox 68.2.0esr(64-bit) になって効かなくなっていた。

turtlechan.hatenablog.com

 


どうやら userChrome.css の書き方が良くなかったようなので新たに書こうと思う。

userChrome.css を編集

Firefox のメニューバー → ヘルプ → トラブルシューティング情報」を開いて「プロファイルディレクトリー」に書かれているのがプロファイルディレクトリの場所。
[プロファイルディレクトリー]/chrome/userChrome.css がレイアウトの設定を担っている。
はじめは chrome ディレクトリがないと思うので自分で作る。userChrome.css も同様。

 

以下、前回の userChrome.css を一部変更したもの。

userChrome.css
/* タブバーを非表示にする */
#tabbrowser-tabs {
    visibility: collapse !important;
}

/* サイドバーのヘッダーを消す */
#sidebar-header {
    display: none;
}

/* サイドバー幅の制限をなくす */
#sidebar-box {
    overflow-x: hidden !important;
}
#sidebar {
    min-width: 0px !important;
    max-width: none !important;
    overflow-x: hidden !important;
}

FirefoxCSS 読み込み設定をオンにする

以前のバージョンから userChrome.css を使っていた場合には、アップデート後にもデフォで有効になっている。
確認も兼ねて設定方法を書いておく。

  1. Firefox のアドレスバーに「about:config」
  2. 検索ボックスに「toolkit.legacyUserProfileCustomizations.stylesheet」
  3. 値を「true」に変更
  4. Firefox を再起動

Firefox のアドレスバーに「about:config」と入力してEnterを押すと以下の警告画面が出るので「I accept the risk!」をクリック。

about:config 警告画面

検索ボックスに「toolkit.legacyUserProfileCustomizations.stylesheet」と入力すると絞り込まれるので値が「false」の場合はダブルクリックして「true」に変更する。

toolkit.legacyUserProfileCustomizations.stylesheet を検索した画面

以上で CSS の読み込みの有効化は完了。

おわりに

タブバーを標準で隠せる機能を付けてほしいですね。サイドタブ機能も然り。

何かの参考になれば幸いです。

Linux に Google SketchUp をインストール

LinuxGoogle SketchUp をインストールしたので書き残しておきます。
若干つまづいたところもあるので備忘録として。

はじめに

Google SketchUpLinux版はないので、wine を使って Windows版を動かします。

環境

一応インストールした環境を載せておきます。

  • OS: Linux Debian 9.9
  • wine: wine-1.8.7 (Debian 1.8.7-2)
  • GoogleSketchUp: Version 8.0.16846 (フリー版)

Google SketchUp 8 のダウンロード

SketchUp 8 は 2012年にリリースされたものなので公式ダウンロードリンクはなくなっている模様。SketchUp 8 は無料版でも商用利用可能なのでこだわりたい。

Trimble社さんにファイルは残っているので以下の直リンクからダウンロード。
Google SketchUp 8(無料版): https://dl.trimble.com/sketchup/gsu8/FW-3-0-16950-JA.exe

インストール

Google SketchUp 8 のインストールをしていきたいと思います。
インストーラー(FW-3-0-16950-JA.exe) をホームディレクトリに保存したと想定しています。

 

wine で インストーラーを実行します。

~$ wine FW-3-0-16950-JA.exe

以下のように問題なくインストーラーが起動すると思いますので、特に変更せずインストールします。

インストーラーのウィンドウ01

インストーラーのウィンドウ02

インストーラーのウィンドウ03

インストーラーのウィンドウ04

インストーラーのウィンドウ05

Linux のアプリケーションメニューに SketchUp が追加されているので、起動します。
以下、起動後のウィンドウ。

SketchUp起動画面01

とりあえずは、問題なくインストールできたことが確認できたかと思います。
この段階で実際に使おうとするとエラーして強制終了します。次の見出しでそれらのエラーの解決策を書いておきます。

エラーの解決策

ここでは私が遭遇したエラーとその解決策について書いていきます。

OpenGL の初期化エラー

SketchUp起動画面02

適当にテンプレートを選択して、右下の「SketchUpを使い始める」をクリックするとエラーする。
「送信しない」をクリック。

エラーウィンドウ01

もう一度やると

エラーウィンドウ02

レジストリエディタを起動して値を変更します。

~$ regedit

'HKEY_CURRENT_USER\Software\Google\SketchUp8\GLConfig\Display' の中の 'HW_OK'の値を「1」に変更します。

regeditウィンドウ

もう一度 SketchUp を起動してみると問題なく起動します。

SketchUp起動画面03

Disk full によるエラー

図形を描こうとすると以下のエラー。
「Disk full while accessing C:\users\username\Temp\SketchUpUndo0.log.」

エラーウィンドウ03

「SketchUpUndo0.logへのアクセス中にディスクがいっぱいになっちゃった。」とかいうエラー文。
もちろんそんなはずはない。

理由は分からないが、'~/.wine/drive_c/Program Files/Google/Google SketchUp 8/resources/ja/Localizable.strings' を削除することによって回避できる。
日本語翻訳のためのファイルなので一部が英語になるが、致し方ない。

 

以下のコマンドで Localizable.strings を削除。

~$ rm ~/.wine/drive_c/Program\ Files/Google/Google\ SketchUp\ 8/resources/ja/Localizable.strings

SketchUp を起動しなおすと問題なく図形を描けるようになっています。

SketchUp起動画面04

ちなみに、Disk full のエラーは英語版では起きないので初めから英語版を選択するのもいいと思います。

おわりに

無料2D CADで有名な Jw_cad もwineを使えば問題なく動作するので、WindowsJw_cadSketchUpモデリングしていた人でも問題ないかと思います。
Jw_cad の外部変形 RSJww も正常に動作しました。製作者様、ありがとうございます。

何かの参考になれば幸いです。

【Python】株価をランダムウォークでシミュレートしてみる

前回はPythonを使ってランダムウォークを再現してみたので、今回は私にとっては本題である株価を再現してみたいと思います。

※python2で書いています。

はじめに

(単純)ランダムウォークだとダメ?

前回使ったランダムウォークを使えばできそうな気がしますが、無作為な数字を加えて行くため途中でマイナスの値になることがある。株価がマイナスってありえないので不都合ですよね。

例として画像で示します。以下。

単純ランダムウォークした画像01

最初 40 からスタートして単純ランダムウォーク(1000歩)をした結果です。-1 か +1 の確率 1/2 なのにこんなにも下がります。

上記程度の偏りだったら「-1 か +1」 を 「-1% か +1%」 と考えて計算すればマイナスの値にはなりません。

単純ランダムウォークした画像02

しかし、-100% を超えるとこれも駄目です。他にも当然ですが価格が大きいと変動が凄まじいことになります。

単純ランダムウォークした画像03

最初 22000 からスタートして -1% か +1% でランダムウォークした結果です。ありえなくはないですが、求めているものとはちょっと違いますよね。

そこで、金融市場などのモデルでよく利用されているらしい「幾何ブラウン運動」というものを使います。

幾何ブラウン運動

期待収益率やボラティリティを指定でき、ある程度望みの株価変動を再現してくれる数式。
詳しいことは ウィキペディア などで調べてください。

幾何ブラウン運動の数式

dS_t = μS_t dt + σS_t dB_t

dSt: 価格の変化量
dBt: ブラウン運動の変化量
μ: 期待収益率
σ: ボラティリティ

上記の数式を 伊藤の公式 を使ったりしていくと St(価格) が求まるらしい。

S_t = S_0 e^{(μ - {σ^2} over {2})t + σB_t}

St: 価格
S0: 最初の価格
e: 自然対数の底(ネイピア数)
μ: 期待収益率
σ: ボラティリティ
Bt: ブラウン運動の値

今回はこちらの式を使用して株価をシミュレートしてみます。

株価をシミュレートする

ここから上記の幾何ブラウン運動Pythonを使って株価をシミュレートしてみたいと思います。
サードパーティライブラリは numpy と pandas を使います。

ブラウン運動

幾何ブラウン運動をする前に、ブラウン運動が使用されているので「ブラウン運動(Btの部分)」をPythonで書いてみます。

bmotion.py
#! /usr/bin/env python
# coding: utf-8

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


def bm(T, n, seed=0):
    ''' ブラウン運動をする関数 Brownian Motion '''
    np.random.seed(seed)
    dt = T / n
    brownian = np.random.standard_normal(n) * np.sqrt(dt)
    return brownian.cumsum()


if __name__ == '__main__':
    T = 1.0  # 期間
    n = 250  # 期間を分割する数
    plt.show(pd.Series(bm(T, n)).plot())

実行結果

実行結果のグラフ

実行結果を見た感じ問題なくブラウン運動ができていそうです。

ざっくり解説。

def bm(T, n, seed=0):

ブラウン運動をするために定義した関数。
引数T が期間、引数n が期間を分割する数、引数seed は疑似乱数を作るための元。

np.random.seed(seed)

引数seed で受け取った値を numpy.random.seed() に渡して疑似乱数を設定しています。
記事を書く都合上、実行ごとに結果が異なると不都合なため書いた。

dt = T / n

変数dt に T / n を代入。
やっていることは期間(T)を細かく分けているだけ。
今回は株価をシミュレートすることを想定しているため、期間(T) = 1.0年間 に 営業日が約250日あるので、分割する数(n) = 250 とした。なので、変数dt の中身は 0.004 になっている。

ちなみに ⊿t(変化量(差)) と dt(微小差) は厳密には違う用途で使われますが、私はあまり区別していません。

brownian = np.random.standard_normal(n) * np.sqrt(dt)

変数brownian にブラウン運動の増分(⊿B)を配列で代入してます。
numpy.random.standard_normal(n) で標準正規分布(平均0, 分散1)に従う無作為な数字を n個 生成しています。
numpy.sqrt(dt) を掛けているのは dt換算 しています。ヒストリカルボラティリティのときに年換算したのと同じ流れですね。
分散を n等分 していると考えると分かりやすい?かもしれない。

return brownian.cumsum()

ブラウン運動の増分(⊿B) を一つずつ足してブラウン運動にして返しています。

幾何ブラウン運動

ブラウン運動の関数ができたので、次に幾何ブラウン運動を作ります。
別ファイルを作って先程のスクリプトをインポートして利用する形で作ります。

gbmotion.py
#! /usr/bin/env python
# coding: utf-8

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import bmotion  # 上記で書いた bmotion.py スクリプト


def gbm(S0, mu, sigma, B, T, n):
    ''' 幾何ブラウン運動をする関数 Geometric Brownian Motion '''
    t = np.linspace(0, T, n)
    trend = (mu - 0.5 * sigma**2) * t
    nonsense = sigma * B
    S = S0 * np.exp(trend + nonsense)
    return S


if __name__ == '__main__':
    S0 = 100
    mu = 0.05
    sigma = 0.16
    T = 1.0
    n = 250
    B = bmotion.bm(T, n)
    result = gbm(S0, mu, sigma, B, T, n)
    plt.show(pd.Series(result).plot())

実行結果

実行結果のグラフ

多分問題なく幾何ブラウン運動になっていると思われます。価格の変動具合も株価のそれと似たような感じになっていますね。
ブラウン運動と折れ線の具合がほぼ同じ形状になっているが、mu や sigma の値を変えれば形状も若干変化します。

ざっくり解説。

def gbm(S0, mu, sigma, B, T, n):

幾何ブラウン運動をするために定義した関数。
引数S0 が最初の価格、mu が期待収益率、sigmaボラティリティ、B がブラウン運動、T が期間、n が分割数。

t = np.linspace(0, T, n)

変数t に 0~T を n 等分した等差数列を配列で代入。今回は 0.0~1.0 を 250 等分した等差数列なので [0.0, 0.00401606, 0.00803213, ... , 1.0] となる。

trend = (mu - 0.5 * sigma**2) * t
nonsense = sigma * B
return S0 * np.exp(trend + nonsense)

幾何ブラウン運動の解の式に当てはめて返している。
変数trend がトレンドを表すドリフト項 (μ-σ2/2)t
変数nonsense が予測不可能な部分 σBt

 

if __name__ == '__main__':
    S0 = 100
    mu = 0.05
    sigma = 0.16
    T = 1.0
    n = 250
    B = bmotion.bm(T, n)
    result = gbm(S0, mu, sigma, B, T, n)
    plt.show(pd.Series(result).plot())

最初の価格、期待収益率など幾何ブラウン運動の計算に必要な値を用意している。
そして、変数result に gbm()関数 の結果を代入し、matplotlib でグラフ表示している。

おわりに

株価をシミュレートとはいったが、μ や σ を算出して過去の相場をシミュレートしても同じグラフが出てくることはまずないです。あくまで相場のでっち上げなので、自分のトレードルールで損小利大になるかの検証に使うくらいが懸命なのかなと思います。
最近はPCもハイスペックになってきているので、多量にシミュレートして過去の相場に近似しているものから乱数をある程度絞り込めるかもしれませんが、個人でやるには現実的ではなさそうです。もちろん趣味なら全然ありです。

何かの参考になれば幸いです。