順張りと逆張りの是非 (2017/06/23)

順張りは正しいが、逆張りは間違っている、といった主張をよく見かける。私はこのような主張に同意しない。そこで、順張り、逆張りについての私なりの考えをまとめてみる。

理屈っぽいので、興味のない人はお帰り下さい。

順張りと逆張り

私は順張り、逆張りを以下のように解釈している。

  • 順張りとは価格が上昇すれば継続して上昇すると予測して買い、下落すれば継続して下落すると予測して売ることである。
  • 逆張りとは価格が下落すれば反転して上昇すると予測して買い、上昇すれば反転して下落すると予測して売ることである。

逆張りに対する批判と反論

順張り派は反転の保証がないと批判する。例えば、価格が下落したからといって、そこで買って反転しなかったら痛い目に遭う、というのである。

だが、保証がないのは継続の場合も同じである。例えば、価格が上昇したからといって、そこで買って継続しなかったら痛い目に遭うだろう

逆張りは自己矛盾であるという批判もある。例えば、価格が下落したので逆張りで買ったものの、さらに下落したので損切りをして売ったとする。この場合、価格は下落したのに売ったことになり、これは順張りになるから自己矛盾だ、というのである。

だが、自己矛盾は順張りにもある。例えば、価格が上昇したので順張りで買ったところ、さらに上昇したので利食いをして売ったとする。この場合、価格は上昇したのに売ったことになり、これは逆張りになるから、これも自己矛盾である。

相場には継続も反転もある

現実の相場では永遠に上昇したり、下落したりすることはない。上昇してもいずれは下落に転じ、下落してもいずれは上昇に転じるものである。

現実の相場では永遠に反転を繰り返すということはない。上昇した後もしばらく上昇を続けたり、下落した後もしばらく下落を続けることがあるものである。

継続か反転かの判断が重要

重要なのは継続か反転かの判断によって順張りと逆張りを使い分けることである。継続しかないと考えたら順張りで利食いはできないし、逆張りではポジションを取ることすらできない。また、反転しかないと考えたら逆張りで損切りはできないし、順張りではポジションを取ることすらできなくなる。

現実の相場には継続も反転もある。したがって、順張りもあれば、逆張りもあり、利食いもあれば、損切りもなければならない。

順張りの利食い

順張りで利食いするのは継続から反転に判断が変わった場合だ。順張りでポジションを取ったのは価格の方向が継続すると判断したからである。その後、利食いしたのは、もはや継続しない、反転すると判断したからである。

逆張りの損切り

逆張りで損切りするのは反転から継続に判断が変わった場合だ。逆張りでポジションを取ったのは価格の方向が反転すると判断したからである。その後、損切りしたのは、もはや反転しない、継続すると判断したからである。

利食い・損切りと損益の大きさ

利益がある程度に達したら利食いし、損失がある程度に達したら損切りするという手法はよく行われていると思う。だが、私はこのような手法には疑問を感じている。

利益が出ていて、しかも相場が継続すると考えるなら利食いすべきではない。損失が出ていて、しかも相場が反転すると考えるなら損切りすべきではない。ポジションの損益にはとらわれず、現時点でどのように行動すれば利益を最大化できるかということが重要ではないかと私は考えている。

願望・恐怖と判断を履き違えない

ただし、以上の議論はあくまでも判断は概ね正しく、決して願望や恐怖と履き違えたりしないというのが前提である。

利益が出ている→利益が増えてほしい→相場が継続してほしい→継続するだろう→利食わない、というのはよくない。損失が出ている→損失が減ってほしい→相場が反転してほしい→反転するだろう→損切らない、というのもよくないのである。

また、利益が出ている→利益が縮小しそうで怖い→相場が反転する気がする→反転するだろう→利食う、というのはよくない。損失が出ている→損失が拡大しそうで怖い→相場が継続する気がする→継続するだろう→損切る、というのもよくないのである。

願望や恐怖といった感情にとらわれては正しく判断することはできなくなる。もちろん、冷静に判断したとしても、それが正しいという保証はないし、難しいことだ。だが、感情にとらわれてはなおさら正しい判断から遠ざかるだろう。

Pandas入門 (2017/05/30)

Pandasで私自身がよく使うものに限って簡単に説明する。

この記事は内容を随時追加する。

Pandasのインポート

import pandas as pd

DataFrame

a = pd.DataFrame([[1, 2], [3, 4], [5, 6]])
b = pd.DataFrame([[1, 2], [3, 4], [5, 6]], index=['row1', 'row2', 'row3'], columns=['col1', 'col2'])
print(a)
print(b)

   0  1
0  1  2
1  3  4
2  5  6
      col1  col2
row1     1     2
row2     3     4
row3     5     6

DataFrameの要素へのアクセス

a = pd.DataFrame([[1, 2], [3, 4], [5, 6]])
print(a)
print(a.iloc[1, 1])

   0  1
0  1  2
1  3  4
2  5  6
4

Python標準ライブラリ入門 (2017/05/30)

Pythonの標準ライブラリで私自身がよく使うものに限って簡単に説明する。

この記事は内容を随時追加する。

datetime

datetimeのインポート

from datetime import datetime
from datetime import timedelta

str型をdatetime型に変換

a = '2017.01.01 00:00'
print(a)
print(datetime.strptime(a, '%Y.%m.%d %H:%M'))

2017.01.01 00:00
2017-01-01 00:00:00

datetime型をstr型に変換

a = datetime.strptime('2017.01.01 00:00', '%Y.%m.%d %H:%M')
print(a)
print(a.strftime('%Y.%m.%d %H:%M'))

2017-01-01 00:00:00
2017.01.01 00:00

日付の加算・減算

a = datetime.strptime('2017.01.01 00:00', '%Y.%m.%d %H:%M')
b = timedelta(minutes=5)
print(a)
print(b)
print(a + b)
print(a - b)

2017-01-01 00:00:00
0:05:00
2017-01-01 00:05:00
2016-12-31 23:55:00

NumPy入門 (2017/05/30)

NumPyで私自身がよく使うものに限って簡単に説明する。

この記事は内容を随時追加する。

NumPyのインポート

import numpy as np

配列

a = np.array([1, 2, 3])
print(a)

[1 2 3]

連続した整数の生成

a = np.arange(-5, 5)
b = np.arange(-5, 5, 2)
print(a)
print(b)

[-5 -4 -3 -2 -1  0  1  2  3  4]
[-5 -3 -1  1  3]

非数値

a = np.nan
print(a)

nan

非数値の確認

a = np.array([np.nan, 1])
print(a)
print(np.isnan(a))

[ nan   1.]
[ True False]

切り上げ

a = 1.2
print(a)
print(np.ceil(a))

1.2
2.0

切り捨て

a = 1.8
print(a)
print(np.floor(a))

1.8
1.0

四捨五入

a = 1.234
b = 9.876
print(a)
print(b)
print(np.round(a))
print(np.round(b))
print(np.round(a, 2))
print(np.round(b, 2))

1.234
9.876
1.0
10.0
1.23
9.88

要素へのアクセス

a = np.arange(-5, 5)
print(a)
print(a[2])

[-5 -4 -3 -2 -1  0  1  2  3  4]
-3

要素の検索

a = np.arange(1, 10)
print(a)
print(a[a==5])
print(a[a>5])
print(a[(a>3) & (a<8)])
print(a[(a<3) | (a>8)])

[1 2 3 4 5 6 7 8 9]
[5]
[6 7 8 9]
[4 5 6 7]
[1 2 9]

配列の型変換

a = np.array([1, 2, 3])
print(a)
print(a.astype(float))

[1 2 3]
[ 1.  2.  3.]

FXシステムの使い方(シグナル配信) (2017/05/27)

FXシステムを用いたシグナル配信のやり方について簡単に説明する。シグナル配信といっても、多くの人に一斉にシグナルを配信するというのではなく、単に自分に配信するだけである。配信はメールで行う。

例として「~/py/sample_strategy.py」というファイルに戦略(トレードルール)が書かれているとする。通貨ペアはUSDJPY、足の種類は5分足とする。

シグナル配信

$ python ~/py/sample_strategy.py --mode signal --symbol USDJPY --timeframe 5

シグナル配信はトレードと同様で端末を使う。

シグナル配信の場合、「--mode signal」と設定する。

端末への出力は「年.月.日 時:分:秒 戦略 通貨ペア 足の種類 ユニット数」となっている。

シグナル配信は保有ポジションに変動があったタイミングで指定したメールアドレスにメールが送信される。メールの件名は戦略名となっており、本文は「[通貨ペア] [ユニット数(通貨数)][レート]」となっている。

ユニット数は買いポジションの場合はプラス、売りポジションの場合はマイナスである。レートは売値である。

シグナル配信を終了する場合は単に端末を閉じればいい。