Octaveのインストール (2017/04/26)

Octaveの最新版をインストールする。最新版でなくてよい場合は以下の手順の④だけでよい。

①以下のコマンドを入力して「Enter」キーを押す。

$ sudo apt-add-repository ppa:octave/stable

②「[sudo] **** のパスワード:」でパスワードを入力して「Enter」キーを押す。

③「[ENTER] を押すと続行します。ctrl-c で追加をキャンセルできます」で「Enter」キーを押す。

④以下のコマンドを入力して「Enter」キーを押す。

$ sudo apt-get update;sudo apt-get install -y octave

Ubuntuの再インストール (2017/04/25)

UbuntuのLTS版は2年ごとに新しいバージョンが出るので、そのときにはUbuntuを再インストールする。「Ubuntu 16.04.2 LTS」(2017年4月25日時点での最新のLTS版)を64bitマシン(ハードディスク500GB、メモリ4GB)にインストールする場合を例として手順を説明する。

新規インストールとは若干、手順が異なる。

Ubuntuのダウンロード

①以下のアドレスをクリックする。

https://www.ubuntu.com/download/desktop

②「Download Ubuntu Desktop」で「Download」ボタンをクリックする。

③「Help shape the future of Ubuntu」で「Not now, take me to the download ›」をクリックする。

④「ubuntu-16.04.2-desktop-amd64.iso を開く」で「ファイルを保存する」を選択する。

⑤「OK」ボタンをクリックする。

イメージファイルのDVDへの書き込み

ダウンロードした「ubuntu-16.04.2-desktop-amd64.iso」ファイルをDVDにディスクイメージとして書き込む。

起動デバイスの優先順位の変更

DVDドライブが起動デバイスの優先順位で1位ではない場合、BIOSで1位に変更する。そうしないと、PCに別のOSがインストールされている場合、そのOSが起動してUbuntuをインストールすることができない。

Ubuntuの再インストール

準備が整ったら、Ubuntuの再インストールを始める。

①ディスクイメージを書き込んだDVDをUbuntuをインストールするPCのドライブに挿入し、再起動する。

②「Welcome」で「日本語」を選択する。

③「Ubuntu をインストール」ボタンをクリックする。

④「Ubuntu のインストール準備」で「Ubuntu のインストール中にアップデートをダウンロードする」にチェックを入れる。

⑤「グラフィックス、Wi-Fi 機器、Flash、MP3 やその他のメディアに必要なサードパーティーソフトウェアをインストールする」にチェックを入れる。

⑥「続ける」ボタンをクリックする。

⑦「インストールの種類」で「それ以外」を選択する。

⑧「続ける」ボタンをクリックする。

⑨古いUbuntuをインストールしていたパーティションをダブルクリックする。

⑩「パーティションを編集」の「利用方法」で「ext4 ジャーナリングファイルシステム」を選択する。

⑪「パーティションの初期化」にチェックを入れる。

パーティションを選び間違えていないか確認する(選択したパーティションは初期化される)。

⑬「マウントポイント」で「/」を選択する。

⑭「OK」ボタンをクリックする。

⑮「ディスクへの変更を書き込み、継続しますか?」で「続ける」ボタンをクリックする。

⑯編集したパーティションの「フォーマット」にチェックが入ったことを確認する。

⑰データを保存していたパーティションをダブルクリックする。

⑱「パーティションを編集」の「利用方法」で「ext4 ジャーナリングファイルシステム」を選択する。

⑲「パーティションの初期化」にチェックが入っていないことを確認する。

⑳「マウントポイント」で「/home」を選択する。

㉑「OK」ボタンをクリックする。

㉒編集したパーティションの「フォーマット」にチェックが入っていないことを確認する。

㉓「インストール」ボタンをクリックする。

㉔「どこに住んでいますか?」で「Tokyo」と入力されているのを確認する。

㉕「続ける」ボタンをクリックする。

㉖「キーボードレイアウト」で両方とも「日本語」が選択されているのを確認する。

㉗「続ける」ボタンをクリックする。

㉘「あなたの情報を入力して下さい」で「あなたの名前」に名前を入力する。

㉙「パスワードの入力」にパスワードを入力する。

㉚「パスワードの確認」にもう一度同じパスワードを入力する。

㉛「ログイン時にパスワードを要求する」が選択されているのを確認する。

㉜「続ける」ボタンをクリックする。

㉝「インストールが完了しました」で「今すぐ再起動する」ボタンをクリックする。

㉞トレイが開いたらDVDを取り出してトレイを閉め、「Enter」キーを押す。

㉟ログイン画面でパスワードを入力して「Enter」キーを押す。

Ubuntuの使い方 (2017/04/25)

「Ubuntuのインストール」から続けて、Ubuntuの使い方を簡単に説明する。

デスクトップ画面

Ubuntuのデスクトップ画面では上部に「メニューバー」、左側に「Launcher」がある。デスクトップ画面については、とりあえずこの2つの名前を覚えておけば十分である。

シャットダウン

Ubuntuをインストールした後、そのまま起動してログインしたので、もう一度、起動するところから説明したい。だが、その前にシャットダウンする必要があるので、先ずシャットダウンから説明する。

①メニューバー右端のアイコンをクリックする。

②「シャットダウン...」をクリックする。

③「シャットダウン」ボタンをクリックする。

ログイン

「Ubuntuのインストール」の最後でログインしているが、やり方はそれと同じである。

①PCの電源ボタンを押す。

②ログイン画面でパスワードを入力して「Enter」キーを押す。

端末のLauncherへの登録

このブログではUbuntuの端末を使った手順が多い。そこで、端末をLauncherに登録しておく。

①デスクトップの適当な場所を右クリックする。

②「端末を開く」をクリックする。

端末が起動する。

③Launcher上の「端末」を右クリックする。

④「Launcherに登録」をクリックする。

端末の終了

端末をLauncherから起動する手順(手順というほどのものでもないが)を説明したい。だが、その前に起動した端末を終了させる必要があるので、先ず端末の終了から説明する。

○「端末」の「×」ボタンをクリックする。

端末が終了する。

端末の起動

では、端末を起動する。

○Launcher上の「端末」をクリックする。

端末が起動する。

破産レバレッジ (2017/04/15)

破産させるレバレッジを考えてみる。ここではそれを破産レバレッジと呼ぶことにする。

破産レバレッジの計算式

計算式は

破産レバレッジ >= 1 / 最小リターン * (-1)

とする。

もし最小リターンが-1%だったとする。すると破産レバレッジは1 / (-0.01) * (-1) = 100.0となる。最悪で1%の負けでもレバレッジ100倍なら100%の負け、つまり破産となるわけである。

最悪の負けはすべてのトレードの中で少なくとも1つはある。それがトレードの最初であろうと、最後であろうと、それ以外であろうと関係ない。破産レバレッジでそのトレードが行われた瞬間、たちまち破産する。

もちろん、最小リターンがマイナスでない場合、つまりすべてのトレードで1度も負けがない場合、破産レバレッジは意味をなさない。あくまでも勝つこともあれば負けることもあるトレードというのが前提である。

シミュレーション

さて、破産レバレッジをシミュレーションで確認してみる。ここに1トレード当たりの期待利益が0.1%、リスクが0.5%の戦略があるとする。トレードを100回行うとして実行してみる。

以下のコマンドを実行してシミュレーションを行う。

import matplotlib.pyplot as plt
import numpy as np

trades = 100
ret = np.random.normal(0.001, 0.005, trades)
x = np.array(range(1, 101))
y = np.zeros(trades)
for i in range(trades):
    if i == 0:
        y[i] = 1.0 * (1.0 + ret[i])
    else:
        y[i] = y[i-1] * (1.0 + ret[i])
    if y[i] < 0.0:
        y[i] = 0.0
mean = np.mean(ret)
std = np.std(ret)
worst_kelly = 1.0 / np.min(ret) * (-1)
ax=plt.subplot()
plt.plot(x, y)
plt.xlabel('Trades')
plt.ylabel('Equity curve')
plt.text(0.05, 0.9, 'Worst Kelly = ' + str(worst_kelly),
         transform=ax.transAxes)
plt.savefig('bankruptcy_leverage1.png', dpi=150)
plt.show()
plt.close()

n = 10000
equity_curve = np.empty(trades)
x = np.array(range(n)) / 100
y = np.empty(n)
for j in range(n):
    leverage = j / 100
    for i in range(trades):
        if i == 0:
            equity_curve[i] = 1.0 * (1.0 + ret[i] * leverage)
        else:
            equity_curve[i] = equity_curve[i-1] * (1.0 + ret[i] * leverage)
        if equity_curve[i] < 0.0:
            equity_curve[i] = 0.0
    y[j] = equity_curve[trades-1]
argmin = np.argmin(y)
ax=plt.subplot()
plt.plot(x, y)
plt.axvline(x=worst_kelly, color='green')
plt.axvline(x=x[argmin], color='green')
plt.axhline(y=1.0, color='red')
plt.xlabel('Leverage')
plt.ylabel('Balance')
plt.text(0.05, 0.9, 'Worst Kelly(actual value) = ' + str(x[argmin]),
         transform=ax.transAxes)
plt.text(0.05, 0.85, 'Worst Kelly = ' + str(worst_kelly),
         transform=ax.transAxes)
plt.savefig('bankruptcy_leverage2.png', dpi=150)
plt.show()
plt.close()

シミュレーション結果によると、破産レバレッジは63.7157243783で、実測値は63.72となっている。実測値は0.01のインターバルで測っているので、もっと細かくやれば理論値と一致するだろう。最適レバレッジの計算に比べれば非常に単純明快であり、近似式も必要ない。

永遠にトレードすれば破産?

ところで、最適レバレッジではトレード数が増えれば、リターンの平均、標準偏差は理論値に収束していく。だが、最小リターンというのは曲者で、わずか1回の発生でも最小リターンとなりうる。つまり、トレード数を1万回、100万回と増やしていけば最小リターンはより小さくなりうるのである。

最小リターンがより小さくなるなら、破産レバレッジもより小さくなるだろう。言い換えると、トレードを永遠に続ければ、いずれは破産するだろう。

ただ、上のコマンドの「trades」の数を変更してトレードを50万回やっても破産レバレッジは45倍前後である。日本国内の規制である25倍よりはまだ大きい。

トレーダーは果たして一生のうちに50万回もトレードできるのだろうか。人にもよるだろうが、それほど多くはないだろう。だとすれば、トレードしていればいずれ破産するというのは杞憂だ。

もちろん、1トレード当たりの期待利益が0.1%、リスクが0.5%の戦略であればの話である。期待利益がマイナスの戦略ならレバレッジなどは関係ない。遅かれ早かれ破産するので、トレードはやめたほうがいい。

最適レバレッジの近似式の誤差 (2017/04/14)

ケリー基準によって最適レバレッジを計算する近似式にはわずかな誤差がある。その誤差は無視できるのかどうかを考えてみる。

最適レバレッジの近似式

近似式は

最適レバレッジ = リターンの平均 / (リターンの標準偏差 * リターンの標準偏差)

となっている。

本来の式はレバレッジについて級数展開して求める。レバレッジが小さい場合、第3項以降は無視できるほど小さくなる。そこで、近似式では初めの2項のみを用いて求めているのである。

逆に、レバレッジが小さくない場合、近似式はかなり大きな誤差を生じることになる。細かい点については以下のページがとても参考になる。

http://www.geocities.jp/y_infty/management/criterion_3.html

シミュレーション

では、どのくらいの誤差が生じうるかということを調べてみることとする。

ここに1トレード当たりの期待利益が0.1%、リスクが0.5%の戦略があるとする。近似式を用いると、

最適レバレッジ = 0.001 / (0.005 * 0.005) = 40.0

となる。この戦略に基づき、乱数を用いて100回トレードを行うシミュレーションを行ってみる。

以下のコマンドを実行してシミュレーションを行う。

import matplotlib.pyplot as plt
import numpy as np

trades = 100
ret = np.random.normal(0.001, 0.005, trades)
x = np.array(range(1, 101))
y = np.zeros(trades)
for i in range(trades):
    if i == 0:
        y[i] = 1.0 * (1.0 + ret[i])
    else:
        y[i] = y[i-1] * (1.0 + ret[i])
    if y[i] < 0.0:
        y[i] = 0.0
mean = np.mean(ret)
std = np.std(ret)
kelly = mean / (std * std)
ax=plt.subplot()
plt.plot(x, y)
plt.xlabel('Trades')
plt.ylabel('Equity curve')
plt.text(0.05, 0.9, 'Kelly Approximation = ' + str(kelly),
         transform=ax.transAxes)
plt.savefig('optimal_leverage1.png', dpi=150)
plt.show()
plt.close()

n = 10000
equity_curve = np.empty(trades)
x = np.array(range(n)) / 100
y = np.empty(n)
for j in range(n):
    leverage = j / 100
    for i in range(trades):
        if i == 0:
            equity_curve[i] = 1.0 * (1.0 + ret[i] * leverage)
        else:
            equity_curve[i] = equity_curve[i-1] * (1.0 + ret[i] * leverage)
        if equity_curve[i] < 0.0:
            equity_curve[i] = 0.0
    y[j] = equity_curve[trades-1]
argmax = np.argmax(y)
ax=plt.subplot()
plt.plot(x, y)
plt.axvline(x=kelly, color='green')
plt.axvline(x=x[argmax], color='green')
plt.axhline(y=1.0, color='red')
plt.xlabel('Leverage')
plt.ylabel('Balance')
plt.text(0.05, 0.9, 'Kelly = ' + str(x[argmax]), transform=ax.transAxes)
plt.text(0.05, 0.85, 'Kelly Approximation = ' + str(kelly),
         transform=ax.transAxes)
plt.savefig('optimal_leverage2.png', dpi=150)
plt.show()
plt.close()

乱数を使っているので結果は毎回違う。このシミュレーションを繰り返して誤差の小さいケースと大きいケースとを選んでみた。

誤差の小さいケース

先ずは誤差が小さいケースの例を見てみよう。

誤差は0.01以下である。この程度の誤差であれば無視してもよさそうだ。

誤差の大きいケース

次に誤差が大きいケースを見てみる。

誤差は15以上で小さくない。より問題なのは近似式での最適レバレッジが本来の最適レバレッジでは破産レベルになっていることだ。これはさすがに無視できない。

近似式は使わないべきか

誤差の大きいケースを見ると、近似式は使うべきではないようにも思える。だが、このような誤差は何十回もシミュレーションをして、ようやく1回見かけるくらいのレアなものである。

また、誤差の大きいケースでは本来の最適レバレッジは38.11倍となっている。これが近似式では過大評価されて53.47倍となっている。だが、現在の日本の規制ではレバレッジは25倍までである。

日本の規制にしたがってトレードしている限り、近似式を用いても問題はないように思える。もちろん、最適レバレッジそのものはあくまでも目安である。取りうるリスクの上限と考えるべきだ。