Lotは固定した方が良い理由その2

今回もトレード結果に対してLot数を変化させる事の無意味さを検証していきたいと思います。前回記事ではLot変化①(負けたら次ロットは2倍)とLot変化②(勝ったら次ロットは2倍)の2パターンを検証しました。
Lotは固定した方が良い理由
今回は以下の2パターンを検証していきます。
  • Lot変化③:負ける度に次トレードのLotを初期Lot分増やす
  • Lot変化④:勝つ度に次トレードのLotを初期Lot分増やす

Lot固定(勝率50%、PF1のシステム)の期待値分布

まず今回のベンチマークとなる固定Lot(16万通貨)の期待値分布を確認してみたいと思います。
※試行回数10回を1000セット実施した時の1セット当たりの期待値分布

Lot固定(16万通貨)の期待値分布 ※勝率50%、PF1、スプレッド0

※縦軸=該当システム数 横軸=金額(円)
期待値0円付近(+672円)を頂点とした正規分布になっている事が確認できます。このLot固定の分布をベンチマークとして、Lotを変化させた場合の分布と比較し、Lotを変化させる事に優位性があるのか検証していきたいと思います。

Lot変化③の場合の期待値分布(負ける度にロットを増やす)

Lot変化③ = トレード結果が負けだった場合、次トレードのLotを初期Lot分増やす
※初期Lotを5万通貨として、負ける度に5万通貨ずつ増やす。
※縦軸=該当システム数 横軸=金額(円)
紫の線がLot変化③の分布となっています。Lot固定の分布(青色)と比べると、山がつぶされて平たくなり、分布の幅が広くなっていることが分かります。
Lot固定の場合よりも偶然(運)による振れ幅が大きい=リスクが大きくなってしまっているという事を表しています。期待値平均も0付近(450円)でLot固定の場合と比べても特に優位性があるとはいえない事が確認できます。

Lot変化④の場合の期待値分布(勝つ度にロットを増やす)

Lot変化④ = トレード結果が勝ちだった場合、次トレードのLotを初期Lot分増やす
※初期Lotを5万通貨として、勝つ度に5万通貨ずつ増やす。
※縦軸=該当システム数 横軸=金額(円)
オレンジの線がLot変化④の分布となっています。Lot固定の分布(青色)と比べると、こちらも山がつぶれて平たくなり、分布の幅が広くなっている事が分かります。
先ほどと同じく、Lot固定の場合よりもリスクが大きくなってしまっており、期待値平均も0付近(-440円)でLot固定の場合と比べても特に優位性があるとはいえない事が確認できます。
それでは最後に乱数を変えて分布がどう変化するか確認してみましょう。
期待値分布(Lot固定 vs Lot変化) その2
何度乱数を変えても、トレード結果に応じてLotを変化させる事に優位性があるとはいえない事が分かります。

まとめ

今回の2パターンも、トレード結果に応じてLotを変化させてもLotを固定させた場合よりも優位性があるとはいえない結果となりました。次回はもっと細かくLotを上下に可変させた場合どうなるか検証したいと思います。

Lotは固定した方が良い理由

今回はLotを固定させた方が良い理由について解説させて頂きます。偶然起こったトレード結果に対してLot数を変化させる事の無意味さを検証してみたいと思います。まず今回の記事ではは以下の2点について検証してみたいと思います。

  • Lot変化① = トレード結果が負けだった場合、次トレードはLotを2倍にする。
  • Lot変化② = トレード結果が勝ちだった場合、次トレードはLotを2倍にする。
Lot変化①となる心理状態としては、負けを取り戻そうと焦る心理あるいは、負けた後は勝つ可能性が高いのではないかと期待する心理状態です。
Lot変化②となる心理状態としては、ついてる時はついてるから勝てると期待する心理あるいは、勝った分を直ぐに複利で運用したいという心理状態です。
もちろんLot変化①も②も全て感情論で何の統計的根拠もありません。そのことをこれから証明していきたいと思います。

Lot固定(勝率50%、PF(プロフィットファクター)1のシステム)の期待値分布

まずベンチマークとなるLot固定(15万通貨)の期待値分布がこちらになります。
※試行回数10回を1000セット実施した時の1セット当たりの期待値分布

Lot固定(15万通貨)の期待値分布 ※勝率50%、PF(プロフィットファクター)1、スプレッド0

※縦軸=該当システム数 横軸=金額(円)
このシステムの理論期待値は0円です。分布をみても期待値0円付近(-570円)を頂点とした正規分布になっている事が確認できます。0円未満の成績は運が悪かったと言えますし、0円超えの成績は運が良かったと言えます。
この様に運(偶然)は避けることの出来ない普遍的な事だということを理解する必要があります。
ではこの分布をベンチマークとしてLotを変化させた場合と比較していきたいと思います。

Lot変化①の場合の期待値分布(負けたら次ロットは2倍)

Lot変化① = トレード結果が負けだった場合、次トレードはLotを2倍にする。
※初期Lotを10万通貨として、負けた場合20万通貨にLotを変化させる。
※縦軸=該当システム数 横軸=金額(円)
赤い線がLot変化①の分布となっています。先ほどのLot固定の分布(青色)と比べると、山がつぶされて平たくなり、分布の幅が広くなっていることが分かります。
Lot固定の場合よりも偶然(運)による振れ幅が大きい=リスクが大きくなってしまっているという事を表しています。期待値平均も0付近(-1390円)でLot固定の場合と比べても特に優位性があるとはいえない事が確認できます。

Lot変化②の場合の期待値分布(勝ったら次ロットは2倍)

Lot変化② = トレード結果が勝ちだった場合、次トレードはLotを2倍にする。
※初期Lotを10万通貨として、勝った場合20万通貨にLotを変化させる。
※縦軸=該当システム数 横軸=金額(円)
緑の線がLot変化②の分布となっています。Lot固定の分布(青色)と比べると、こちらも山がつぶれて平たくなり、分布の幅が広くなっている事が分かります。
先ほどと同じく、Lot固定の場合よりもリスクが大きくなってしまっており、期待値平均も0付近(-730円)でLot固定の場合と比べても特に優位性があるとはいえない事が確認できます。

Lot固定とLot変化①・②の比較

この様にLotをトレード結果に応じて変化させたところで統計的優位性があるとは言えない事が分かりました。優位性が無いだけではなく、Lot変化させた場合は分布の形が左右非対称の山型となってしまっています。
私が統計分析する時はリスクの発生を標準正規分布で仮定して全て計算しています。標準正規分布とは平均0、標準偏差1となる下記の様な左右対称の山型グラフです。
という事でLot変化させたシステムを分析する場合、計算にズレが生じます。特に最大DDの予測などの分析結果にズレが生じてしまっては致命傷となる恐れもあります。
以上の事から、トレード結果に応じてLot数を変化させるメリットは無いと現在のところ私は思っています。
もし”勝率50%+リスクリワード1:1で利益が出せる資金管理方法”なんてタイトルがあったら、まず試行回数を確認してみて下さい。試行回数が数十回程度であればそれはただの資金管理によるカーブフィッティングである可能性が非常に高いです。
勝率50%に収束するには少なくとも400回程度の試行回数が必要です。
それでは最後に乱数を変えて分布がどのように変化するか確認してみましょう。
期待値分布(Lot固定 vs Lot変化)
何度乱数を変えても、トレード結果に応じてLotを変化させる事に優位性があるとはいえない事が分かります。

まとめ

口座を複利で運用する場合は、最低でも数月単位でLotを調整する必要があります。間違えてもトレードで利益が出たからといって直ぐに複利計算してLotを増やしてはいけません。
日々のトレードは単利で考えて、半年に一回複利になるようLot調整する位で丁度いいという事になります。
関連記事
Lotは固定した方が良い理由その2
Lotは固定した方が良い理由その3(ラスト)

勝率とレシオの関係(±0に必要な勝率とレシオ)

1. リスクリワードレシオの基本

リスクリワードレシオ(以下、レシオ)とは 平均利益 ÷ 平均損失 で求められる数字です。例えば平均利益100pipsで平均損失100pipsのシステムであればレシオは1.0となります。

同様に平均利益200pipsで平均損失100pipsのシステムであればレシオは2.0となります。つまりレシオの数値が大きいと損小利大のシステム(手法)であり、レシオの数値が小さいと損大利小のシステム(手法)であるといえます。

2. ±0に必要な勝率を求める

±0に必要な勝率は以下の計算式で求めることが出来ます:

±0に必要な勝率 = 1 ÷ (1 + レシオ)

例えば、レシオが0.5の場合:

±0に必要な勝率 = 1 ÷ (1 + 0.5) ≒ 67%

以下に±0に必要な勝率の一覧を示します:

リスクリワードレシオ ±0に必要な勝率
2.0 33%
1.0 50%
0.5 67%

3. ±0に必要なレシオを求める

±0に必要なレシオは以下の計算式で求めることができます:

±0に必要なレシオ = (1 – 勝率) ÷ 勝率

例えば、勝率が60%の場合:

±0に必要なレシオ = (1 – 60%) ÷ 60% ≒ 0.7

以下に±0に必要なレシオの一覧を示します:

勝率 ±0に必要なリスクリワードレシオ
30% 2.3
40% 1.5
50% 1.0
60% 0.7
70% 0.4

4. レシオと勝率のどちらを軸にするべきか

システムの優位性あるいは、手法の優位性を検証する際にレシオと勝率のどちらを軸にするべきかという問題が発生します。

私は勝率を軸にして確認した方が良いと思います。理由は以下の2つです:

  • 勝率は取引回数が増えれば収束するから
  • 相場のボラティリティーは日々変化しているから

1つ目の理由は、勝率は取引回数が増えれば増えるほど収束していきますので基準にしやすいという点です。大ざっぱに確認する場合でも取引回数が1000回程度あれば勝率はあらかた収束したと想定する事ができます。

2つ目の理由は、相場のボラティリティーは日々変化している為、一律に損切りを100pips、利確を100pipsと固定しても結局は±0の理論確率を超えることはできないと思うからです。相場のボラティリティーに合わせて損切りや利確の値幅を変化させる必要があります。

以上の2点の理由から私は勝率を軸にして±0に必要となるレシオを確認した方が良いと判断しています。

5. まとめ

レシオと勝率どちらを軸にするにしても、利益を出すには『レシオに対する±0に必要な勝率』あるいは『勝率に対する±0に必要なレシオ』を超えなければいけません。

ランダムトレードでは期待値はスプレッド分のマイナスに収束しますので、利益を出すにはランダムトレードでは出来ない何かをする必要があります。それは待つ事です。

  • 統計的優位性のあるエントリーポイントまで待つ
  • 統計的優位性のあるクローズポイント(決済)まで待つ

結局のところ、この2つが利益を出す為の全てです。統計的優位性があるかどうかはシステムあるいは手法を検証する際、取引回数が1000回以上あり勝率に対する±0に必要なレシオを超えていれば優位性があると判断する事が出来るでしょう。

EA名 取引回数 勝率 レシオ ±0レシオ 差異
リバ取り君 1432回 67% 0.7 0.5 +0.2 (133%)
伸ばす君 2556回 28% 3.2 2.6 +0.7 (125%)

※Lot0.1で2005.2.1~2015.2.1をバックテストした結果
リバ取り君の勝率67%で±0に必要なレシオは0.5です。バックテストの結果0.7という数値を出していますので、エントリーとクローズポイントに優位性があると判断できます。
同様に伸ばす君の勝率28%で±0に必要なレシオは2.6です。バックテストの結果3.2という数値を出していますのでこちらも優位性があると判断できます。

運がいい人の期待値分布

期待値0円ゲームの期待値分布検証

1. ゲームのルール

期待値0円のゲームを1000人で実施し、勝った人(0円以上)のみ次のゲームに参加します。このゲームを4回繰り返し、運がいい人の期待値分布がどのようになるのかを確認します。

ルール概要:勝率50%、PF1(SL=100pips、TP=100pips)、Lot=15万通貨、スプレッド:0

ゲーム名 参加条件
テスト1 1000人でゲームスタート
テスト2 テスト1で0円以上の利益を出した人のみ参加
テスト3 テスト2で0円以上の利益を出した人のみ参加
テスト4 テスト3で0円以上の利益を出した人のみ参加
テスト5 テスト4で0円以上の利益を出した人のみ参加

2. テスト1の期待値分布

テスト1の期待値分布は以下の通りです。試行回数10回を1000人が実施した際の1人当たりの期待値分布です。

条件:勝率50%、PF1(SL=100pips、TP=100pips)、Lot=15万通貨、スプレッド:0

Lot=15万通貨(固定)、期待値max=+15万、期待値min=-15万、期待値平均=-960円

3. テスト2の期待値分布

テスト1で運が良かった人(624人)のみを集めて再度ゲームを行った結果の期待値分布です。

条件:勝率50%、PF1(SL=100pips、TP=100pips)、Lot=15万通貨、スプレッド:0

Lot=15万通貨(固定)、期待値max=+15万、期待値min=-15万、期待値平均=-1797円

4. テスト3の期待値分布

テスト2で運が良かった人(396人)のみを集めて再度ゲームを行った結果の期待値分布です。

条件:勝率50%、PF1(SL=100pips、TP=100pips)、Lot=15万通貨、スプレッド:0

Lot=15万通貨(固定)、期待値max=+12万、期待値min=-12万、期待値平均=-606円

5. テスト1~5の期待値分布比較

テスト1からテスト5まで、運が良かった人だけを集めてゲームを続けた結果、期待値分布に変化は見られませんでした。運の要素からは逃れることができないという事実が確認できました。

6. まとめ

今回の検証で以下のことが分かりました:

  • 過去運が良かったからといって将来も運が良いとは限らない。
  • 運は人間にコントロールできない。

「人事を尽くして天命を待つ」という言葉が示すように、運という要素が人間にコントロールできないからこそ、投資は難しくもあり、また面白いのです。

分散とヘッジ

分散とヘッジ: 相場の世界で信じられる数少ない用語

1. 分散とヘッジとは

相場の世界では、多くの専門用語が飛び交っていますが、その中には学んでも実践的な意味を持たないものもあります。例えば、ボリバン、MACD、RSIなどです。しかし、数少ない信じるに足る用語として「分散」と「ヘッジ」が挙げられます。

2. 分散 (リスク分散)

分散とはリスク分散を指します。リスク分散効果は、相関のないシステムを組み合わせてポートフォリオを構築することで得られる「フリーランチ」のようなものです。同じリスク額でも、リターンが異なるウェイト(組み込み比率)が存在することがこの理論を裏付けています。

例えば、複数の業者で取引を分散させることで、約定能力やスプレッドの違いから生じるリスクを軽減することが可能です。

3. ヘッジ (リスクヘッジ)

ヘッジとは、価格変動リスクを抑えるための手法を指します。例えば、FX取引における両建てがこれに該当します。同じタイミングで同じ枚数を両建てすれば、価格変動リスクはゼロになりますが、期待値はスプレッド分だけマイナスとなります。

金融機関のプロトレーダーであれば、リスクヘッジをせずにポジションを持つことは通常あり得ません。市場は概ね効率的であり、将来の価格変動を正確に予測することは不可能だからです。

4. システム相関の簡易分析

ポートフォリオを組む際、本来は相関係数を使った詳細な分析が求められますが、これは手間がかかります。そのため、より簡単な方法として「システムの勝率」と「取引回数」に着目する方法があります。

取引回数が多くなればなるほど、システム本来の勝率に収束していきます。この特性を利用することで、異なるロジックを持つシステムを大まかに判断することが可能です。例えば、取引回数が1000回以上あり、勝率に大きな差がある場合、それぞれのシステムは異なるロジックに基づいていると推測できます。

5. まとめ

分散とヘッジは、相場の世界で信頼できる数少ない用語です。これらを活用することで、リスクを軽減し、より安定した取引を目指すことが可能となります。特に、リスクを分散させることで、複数のシステムや業者を活用する意義が強調されます。

分散することには意義があります。複数の要素を組み合わせてリスクを軽減し、より効果的なトレードを目指しましょう。

evernote

bashデバック

参照:http://shellscript.sunone.me/debug.html

JSP*タグリファレンス

http://tag.main.jp/index.html

システムモニタリングコマンド一覧

Linux
常識的なものからマイナーなものまで、Linuxでマシンの状態を調べるコマンドの一覧。
sar 一定間隔でCPU、コンテキストスイッチ、割り込み、ページング、デバイス、メモリ、スワップ、ネットワークなどあらゆる情報を表示
vmstat 一定間隔でプロセス、メモリ、スワップ、ディスクI/O、システム(割り込み、コンテキストスイッチ)、CPUの情報を表示
mpstat 一定間隔でCPUの詳細情報を表示
iostat 一定間隔で各種デバイス・ディスクの詳細なI/Oを表示
uptime 稼働時間、ユーザ数、ロードアベレージの表示
free メモリの使用状況表示
procinfo メモリ、CPU時間、ページ、スワップ、ディスク、割りこみ数などの統計を表示
/proc/* 任意のタイミングや間隔で任意の情報を取得したい場合は、無理にコマンドを組み合わせるより直接/proc以下の情報を取得するスクリプトを書く方が楽。
/proc/stat CPU時間の合計値など
/proc/loadavg ロードアベレージ
/proc/meminfo メモリの状態
/proc/diskstats ディスクI/Oの合計値
/proc/net/dev ネットワーク送受信の合計値
top 稼働時間、ユーザ数、ロードアベレージ、CPU、メモリの情報とプロセス毎の情報を継続的に表示
iotop システム全体のディスクI/Oとプロセス毎の詳細なディスクI/Oを継続的に表示
nethogs プロセス毎のネットワークI/Oの統計を継続的に表示
lsof 個々のプロセスが掴んでいるファイル・デバイス・ポートを表示
pmap プロセスが掴んでいるファイルとその詳細なメモリマップを表示
fuser ファイルやポート、ファイルシステムを利用しているプロセスやユーザの表示
ps aux プロセスを一覧表示
pstree プロセスをツリー表示

ディスク/ファイル

df 各ファイルシステムの容量やiノードの使用状況を表示
du ファイル・ディレクトリの使用状況を表示
stat ファイルの各種情報を任意のフォーマットで表示

ネットワーク

netstat ネットワークコネクションの情報を表示
nmap 開いているポートの調査
ifstat 一定間隔でデバイス毎のネットワークI/Oを表示
iftop 接続先毎のネットワークI/Oを継続的に表示

アプリケーション依存

smbstatus Sambaの利用状況表示
showmount NFSのマウント状況の表示
ftpwho FTPにアクセスしているユーザの表示
ftpcount FTPにアクセスしているユーザ数の表示
hostname カーネルの情報
uname -a カーネルの情報
lsmod ロードされているモジュールの情報
ifconfig 各ネットワークインターフェースのIPアドレス・MACアドレス・MTU等の表示
who 接続しているユーザの表示
id ユーザのUID,GID,グループなどの表示
ac ユーザの接続時間を表示する
   ネットワーク設定(vi /etc/sysconfig/network-scripts/ifcfg-eth0)

ハードウェア

lspci PCIデバイスの一覧を表示
lsusb USBデバイスの一覧を表示
lsscsi SCSIデバイスの一覧を表示
lshw 全ハードウェアの一覧を表示
ethtool ネットワークインターフェースのデバイス情報を表示
fdisk/sfdisk/cfdisk -l パーティション情報の表示
sensors (lm_sensors) 温度・ファン回転数等
cardctl PCカードの情報

X Window System

xev 入力デバイスからの入力情報の表示
xload 簡単なロードアベレージのGUI表示
glxinfo GLX拡張や、OpenGLレンダラの確認
xdpyinfo ディスプレイの情報表示
fc-list 利用可能なフォントの一覧
xfd フォントの確認
$ xfd -fa ‘VL ゴシック’
rc-update (Gentoo) ランレベル毎のデーモンの設定・確認
update-rc.d (Debian) ランレベル毎のデーモンの設定・確認
chkconfig (RedHat) ランレベル毎のデーモンの設定・確認
ldd 依存しているライブラリの表示
printenv 環境変数の表示
help シェルの組み込みコマンド
ブラウザショートカット
全画面表示 F11
ホームページに移動 Alt+Home
次のページに移動 Alt+→  Shift+Backspace
前のページに移動 Alt+←  Backspace
右のタブに移動 Ctrl+Tab   Ctrl+PageDown
左のタブに移動 Ctrl+Shift+Tab  Ctrl+PageUp
ページの先頭に移動する Home  Ctrl+Home
ページの末尾に移動する End  Ctrl+End
Webページの更新 F5  Ctrl+R
スーパーリロード Ctrl+F5  Ctrl+Shift+R Shift+F5
ページのダウンロードを中止 Esc
プライベート(シークレット)モード Ctrl+Shift+P Ctrl+Shift+N
履歴の消去 Ctrl+Shift+Delete
アドレスバーの文字列選択 Alt+D  Ctrl+L
直前に閉じたタブを開く Ctrl+Shift+T
現在のタブを閉じる Ctrl+W Ctrl+F4
お気に入りを開く Ctrl+I  Ctrl+Shift+B Alt+C
お気に入りの整理 Ctrl+B  Ctrl+Shift+O
履歴を開く Ctrl+H
ダウンロード履歴を開く Ctrl+J
新規ウィンドウ Ctrl+N
新しいタブを開く Ctrl+T
特定のタブを開く Ctrl+数字キー(1~8)
(アドレスバー選択時)新しいタブでウェブアドレスを開く Alt+Enter
タブ複製 Ctrl+K  Alt+D+Enter
一番右のタブに切り替える Ctrl+9
拡大する Ctrl+正符号(+)キー
縮小する Ctrl+負符号(-)キー
元の大きさにする Ctrl+0
検索窓にフォーカス Ctrl+E
検索後、F3で次へ Ctrl+K
お気に入りに追加 Ctrl+D
開発者ツールを開く F12(FireFoxはFirebugを入れてる場合)
Ctrl+Shift+I
ページのコード表示 Ctrl+U
カーソルブラウズ F7
タブとウィンドウのショートカット
新しいウィンドウを開く Ctrl+n
新しいウィンドウをシークレットモードで開く Ctrl+Shift+n
新しいタブを開いてそのタブに移動する Ctrl+t
最後に閉じたタブを開いてそのタブに移動する Ctrl+Shift+t
開いている次のタブに移動する Ctrl+Tab
開いている前のタブに移動する Ctrl+Shift+Tab  Ctrl+PgUp
特定のタブに移動する Ctrl+1~Ctrl+8
最後のタブに移動する Ctrl+9
ホームページを現在のタブで開く Alt+Home
現在のタブの閲覧履歴の中で前にあるページを開く Alt+左矢印
現在のタブの閲覧履歴の中で次にあるページを開く Alt+右矢印
現在のタブを閉じる Ctrl+w  Ctrl+F4
開いているすべてのタブとブラウザを閉じる Ctrl+Shift+w
現在のウィンドウを最小化する Alt+スペース+n
現在のウィンドウを最大化する Alt+スペース+x
GoogleChromeを終了する Ctrl+Shift+q  Alt+F4

便利ツール A5:SQL Mk-2の便利なショートカットをまとめてみた – 思考停止するな

最近SQL・データベースを扱うことが多いのですが、その際に手放すことができないレベルの超便利ツールのSQL実行ツールであるA5:SQL Mk-2というのがあります。 そのA5:SQL Mk-2の便利なショートカットをまとめてみました。 Ctrl + q SQL整形 Ctrl + g 条件を指定してテーブルを開く Ctr…

情報源: 便利ツール A5:SQL Mk-2の便利なショートカットをまとめてみた – 思考停止するな

ダミーデータ作成

https://a5m2.mmatsubara.com/help/TableEditor/dummy.html

Apache JMeter

・基本情報
http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/index/

・統計レポートの見方
https://e-algorithm.xyz/jmeter/#jump4

・apache-jmeter-3.3\bin\jmeter-server.bat
に以下の設定を入れる

:port
call jmeter -Dserver_port=%SERVER_PORT% -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS% 【-Dsun.net.inetaddr.ttl=0 -Dsun.net.inetaddr.negative.ttl=0】

詳細は
https://qiita.com/arai-wa/items/492d91d85a7473007e37

・実行bat sample
set time2=%time: =0%
set PREFIX=%date:~-10,4%%date:~-5,2%%date:~-2,2%%time2:~0,2%%time2:~3,2%%time2:~6,2%
cmd /k jmeter.bat -n -t .\FINAL\LJ53.jmx -j .\FINAL\result\%PREFIX%_jmeter.log -l .\FINAL\result\%PREFIX%_result.jtl

詳細は
https://qiita.com/tatesuke/items/827e6190753964e46814

windowsパフォーマンスモニター
http://www.atmarkit.co.jp/ait/articles/0910/30/news114.html