こんな「シストレ」は嫌だ

架空の「シストレ」

ちょっとふざけたタイトルにしてみたが、内容もちょっとふざげている。この記事では「シストレ」を「業者が提供するストラテジーを選択し、自動で売買させること」という意味で使うことにする。

ここに5000のストラテジーを持つ架空のシストレ業者があるとしよう。ストラテジーには0から4999までのナンバーが付いている。そして、各ストラテジーを収益率でランキング付けたところ、ある年の上位10位のパフォーマンスは以下のようであった。

     Rank  Profit(%)
821     1     287.63
1641    2     266.44
44      3     254.50
412     4     254.12
4838    5     240.87
39      6     239.94
4353    7     238.15
1010    8     234.44
3915    9     232.49
4991   10     228.95

収益率が100%であれば資金を倍にしたことになる。ランキング1位の収益率は287.63%であるから4倍近くにまで増やしたことになる。10位でも228.95%であるから3倍以上である。

さて、翌年の上位10位のパフォーマンスは以下のようであった。

     Rank  Profit(%)
4087    1     299.07
4272    2     279.69
2574    3     270.01
1       4     267.88
3086    5     265.18
4394    6     261.54
964     7     252.25
2713    8     249.55
304     9     249.28
3662   10     246.18

さらに翌々年の上位10位のパフォーマンスは以下のようであった。

     Rank  Profit(%)
1734    1     317.56
2894    2     277.21
3771    3     265.88
1104    4     255.95
3438    5     253.59
2925    6     250.31
2800    7     232.86
1377    8     231.03
3779    9     229.89
961    10     229.67

やはり1位なら4倍前後、10位でも3倍以上となっている。だがストラテジーのナンバーを見ると分かるように3年間を通して上位に入ったストラテジーはない。

実はすべて乱数

察しのいい人は気付いているだろうが、いや、すでに見出しでバレている。これは期待収益率が0%になるように乱数を発生させ、5000回シミュレーションを繰り返して、収益率の上位10位をピックアップしたものである。期待収益率が0%でも5000回のうちの上位10位となると200%を超えるのである。ちなみに各年の平均収益率はそれぞれ-1.61%、0.44%、-1.30%であった。

どこそこのシストレ業者もこれと同じ、などというつもりはない。だが乱数でもこれくらいのことはできると知っておけば、誇大広告に踊らされることもなくなるだろう。

サンプルプログラム

1年を260営業日、毎日1回トレードするという設定でシミュレーションした。1日のボラティリティを1%とし、レバレッジ5倍でトレードしている。

○以下のコマンドを「IPython console」にコピー&ペーストして「Enter」キーを2回押す。

import numpy as np
import pandas as pd

strategy = np.empty([5000, 2])
strategy = pd.DataFrame(strategy,
                        columns=['Rank', 'Profit(%)'])
n_strategies = 5000
n_trades = 260
n_year = 3
volatility = 0.01
leverage = 5
for i in range(n_year):
    for j in range(n_strategies):
        ret = np.random.randn(n_trades) * volatility * leverage
        ret = pd.Series(ret)
        cumret = ret.cumsum()
        strategy.iloc[j, 1] = cumret.iloc[n_trades-1] * 100
    strategy = np.round(strategy.sort_values(by='Profit(%)',
                                             ascending=False), 2)
    for j in range(n_strategies):
        strategy.iloc[j, 0] = str(int(j + 1))
    print(strategy.head(10))
    print('mean = ', np.round(strategy['Profit(%)'].mean(), 2))
    print('\n')
(2017/01/28更新)

ヒストリカルデータのダウンロード (2017/06/06)

ヒストリカルデータを保存するフォルダーの作成

以下のコマンドを実行して「ホーム」フォルダーに「historical_data」フォルダーを作成する。

$ mkdir ~/historical_data

これをヒストリカルデータを保存するフォルダーとする。

古いヒストリカルデータの削除

初めてヒストリカルデータをダウンロードする場合、この手順はいらない。すでにヒストリカルデータをダウンロードしていて、新しいデータをダウンロードする場合に実行する。

以下のコマンドを実行して「~/historical_data」フォルダー内のファイルを削除する。

import forex_system as fs
fs.clean_historical_data_folder()

ヒストリカルデータのダウンロード

①JForexのツールバーで「ツール」をクリックする。

②「ヒストリカルデータ取得」をクリックし、下の方に「ヒストリカルデータ取得」タブを表示する。

③「ヒストリカルデータ取得」タブの「Undock this tab」ボタンをクリックし、「ヒストリカルデータ取得」タブを別ウィンドウにして見やすい大きさにする。

④「ヒストリカルデータ取得」の「開始日時」で2007年1月1日を選択する(なぜか日付が1日前後して表示されることがあるが気にしない)。

⑤「終了日時」で2017年1月1日を選択する(やはり日付が1日前後して表示されることがあるが気にしない)。

⑥「形式」で「CSV」を選択する。

⑦「日付形式」で「YYYY.MM.DD HH:MM:SS」を選択する。

⑧「区切り」で「,」(カンマ)を選択する。

⑨「ビッド/アスク」で「Bid」を選択する。

⑩「データ種類」で「分」を選択する。

⑪「値」で「1分」を選択する。

⑫「フィルター」で「フラット期間を非表示」を選択する。

⑬「データ出力先」で「参照」ボタンをクリックする。

⑭「ディレクトリを選択」で「/home/****/historical_data」を選択する。

⑮「選択」ボタンをクリックする。

⑯「ヒストリカルデータ取得」に戻って「銘柄」で、FXシステムに対応している下記の通貨ペアからダウンロードしたい通貨ペアにチェックを入れる。

AUDCAD AUDCHF AUDJPY AUDNZD
AUDUSD CADCHF CADJPY CHFJPY
EURAUD EURCAD EURCHF EURGBP
EURJPY EURNZD EURUSD GBPAUD
GBPCAD GBPCHF GBPJPY GBPNZD
GBPUSD NZDCAD NZDCHF NZDJPY
NZDUSD USDCAD USDCHF USDJPY

⑰「開始」ボタンをクリックする。

⑱「ヒストリカル・テスターに関する免責事項」で一番下までスクロールする。

⑲「次回から表示しない」にチェックを入れる。

⑳「同意する」ボタンをクリックし、ダウンロードが「100%」になるのを待つ。

㉑「ヒストリカルデータ取得」タブの「×」ボタンをクリックして閉じる。

ファイル名に日付が入っているが、なぜかダウンロードした日付と1日前後することがある。よく分からないが気にしない。

ファイル名の変更

ファイル名には日付などが入っているが邪魔なので通貨ペア名以外の部分は削除する。

import forex_system as fs
fs.rename_historical_data_filename()

JForexのインストール

ヒストリカルデータはデューカスコピー社のものを使う。そのためには先ずデューカスコピー社のデモ口座を解説し、JForexというツールをインストールする必要がある。以下にその手順などを説明する。なお、デモ口座は期限が1ヶ月だが、デューカスコピー社に連絡すれば無期限にしてもらうこともできる。

デモ口座の開設

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

https://www.dukascopy.jp/japan/japanese/home/

②「デモ口座開設」ボタンをクリックする。

③「デモ口座開設」の「デモ口座の申し込み」で必要事項にチェックを入れる、または入力する。

④「デモ口座を開設する」ボタンをクリックする。

⑤登録したメールアドレスに「デューカスコピー・ジャパン株式会社」からメールが来るので「ログイン」と「パスワード」を確認する。

JForexのダウンロード

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

https://www.dukascopy.jp/japan/japanese/home/

②「ログイン」をクリックする。

③「インストール版 JForex(推奨)」で「JForexをインストール」をクリックする(使用しているOSに合ったバージョンのファイルが自動的に選択される)。

④「JForex_unix_64_JRE_bundled.sh を開く」で「ファイルを保存する」を選択する。

⑤「OK」ボタンをクリックし、「JForex_unix_64_JRE_bundled.sh」ファイルを「~/ダウンロード」フォルダーに保存する。

JForexのインストール

①端末に以下のコマンドをコピー&ペーストして「Enter」キーを押す。

bash ~/ダウンロード/JForex_unix_64_JRE_bundled.sh

②「言語の選択」で「日本語」が選択されているのを確認する。

③「OK」をクリックする。

④「セットアップ - JForex Platform 1.3」の「ようこそ JForex Platform セットアッププログラムへ。」で「次へ」をクリックする。

⑤「ユーザー設定」で「このユーザー(****)のみにインストールする」が選択されているのを確認する。

⑥「次へ」をクリックする。

⑦「インストール先の選択」の「インストール先のディレクトリ」で「/home/****/JForex」が選択されているのを確認する。

⑧「次へ」をクリックする。

⑨「シンボリックリンクのためのディレクトリを選択」で「シンボリックリンクの作成」にチェックが入っているのを確認する。

⑩「インストール先のディレクトリ」で「/home/****/bin」が選択されているのを確認する。

⑪「次へ」をクリックする。

⑫「ショートカット作成オプションの選択」で「デスクトップアイコンを作成する」にテェックが入っているのを確認する。

⑬「次へ」をクリックする。

⑭「JForex Platformのセットアップ完了」で「JForex Platform を実行する」にチェックが入っているのを確認する。

⑮「終了」をクリックする。

JForexの起動

○デスクトップの「JForex Platform」をダブルクリックする。

JForexへのログイン

①JForexのログイン画面で「ログイン」にデューカスコピー社から送られた「ログイン」を入力する。

②「パスワード」に同じくデューカスコピー社から送られた「パスワード」を入力する。

③「環境」で「DEMO」を選択する。

④「言語」で「日本語」が選択されているのを確認する。

⑤「ログイン」ボタンをクリックする。

JForexからのログアウト

①JForexのメニューバーの「ファイル」をクリックする。

②「ログアウト」をクリックする。

(2017/01/26更新)

「シストレ」って儲かるの?

「シストレ」とは?

「システムトレード」、または「シストレ」という言葉があるが、その意味するところは使う人によってかなり異なる。広義には作成された売買ルールに従ったトレードをすること、という意味のようである。そして、狭義では広義のシステムトレードのうち、売買を自動で執行するもの、という意味のようである。

このため、自分で作成した売買ルールに従って手動で売買するのも(売買ルールに従うという意味で)システムトレードである。また、他人の作った売買ルールに乗っかって自動売買するなら、それも(売買ルールを作ったのが誰であるかは問わないから)システムトレードだということになる。

システムトレードの研究をするという場合、前者であれば市場分析によって利益をもたらす売買ルールを発見することが中心となるだろう。そして、後者であれば、選択肢として提供された売買ルール群の良し悪しを見抜き、どう活用するかということが中心となるだろう。同じシステムトレードでもベクトルがかなり違い、これをひとくくりにするのには違和感がある。

私は自分で作成した売買ルールに従ってトレードすることをシステムトレードだと考えていた。ところが、ネットで「システムトレード」、あるいは「シストレ」で検索すると別の意味で使われていることが多い。「業者が提供するストラテジー(売買ルール)を選択し、自動で売買させること」という意味で使われているのだ。それはさて、今回取り上げる「シストレ」は、「業者が提供するストラテジーを選択し、自動で売買させること」という意味で使う。

私の失敗経験

ではシストレは儲かるのかというと、正直よく分からないし、興味がないので一々検証する気も起きない。実を言うと、FXを始めたばかりのころ、このようなサービスを恥ずかしながら一度だけ利用したことがある。

当時、FXを始めたものの、まるで勝てず、どうすればよいか悩んでいた。そんなとき、とあるシストレ業者のストラテジーの中で勝ち続けているものがあるのを見つけた。それは日々勝ち続け、しかもランキング上位に数カ月続けて留まっていた。

これは本物だと思った私はそのストラテジーがいつも同じ時間に注文を出していたので、その時間にチェックし、同じ注文を出した。それで勝てるに違いないと思い、そして実際に勝ったのである。

気を良くした私は取引サイズを倍にしたが、よくあることで、その日を境にそのストラテジーは負け始めた。そんなはずはない、そのうち持ち直すはずだと思って売買を続けたが、負けは続く。これ以上の負けは授業料とするには高すぎると考えた私はついにあきらめた。

本物と信じたストラテジーのその後

それから半年か1年かくらい立った後、あのストラテジーはどうなったろうかと思って業者のサイトを見てみた。すでにランク外に消えていて、検索してようやく見つけた。取引履歴を見ると、その後も負け続け、一時やや持ち直したが、さらに負け続け、そのままとなっていた。

業者のサイトには上位ストラテジーの直近のパフォーマンスが紹介されていて、いかにも儲かっているかのように宣伝していた。だが、儲かっているストラテジーが上位になっているのだから、当たり前のことで、問題は儲かり続けるかである。

たくさんのストラテジーがあれば、例えまぐれでも、ある程度の期間は勝ち続けるストラテジーがいくつもあるはずだ。ならば、その上位は必ず儲かっているに違いない。だが、大抵は1年もすれば消えてしまい、また別のストラテジーが上位を占めるということを繰り返している。こうして私はこのようなサービスに対する興味を全く失い、むしろ不信感を抱くようになったのである。

ストラテジーの良し悪しの判断は困難

シストレで儲けるためにはストラテジーの研究が必要だ。しかし、ストラテジーの良し悪しの判断は相場が上がるか下がるか予想するくらい難しいのである。

業者にもよるし、今と昔では違うかもしれないが、ストラテジーの判断材料といったらパフォーマンスと取引履歴くらいしかない。せいぜい方針程度で具体的な売買ルールは公開されておらず、中身はブラックボックスである。限られた材料でストラテジーの良し悪しを判断するのは非常に困難だと言わざるを得ない。

そもそもの話をすると、このようなストラテジーに乗っかろうとするのは自力で勝てないからだ。自分で売買ルールも作れないのに他人の売買ルールの良し悪しを見抜くことなどできるのか、はなはだ疑問だ。同じようなことは市販EAを評価する場合にも言えることである。

そういえば当時、某掲示板でこの業者についてのスレッドが立っていて、利用者がストラテジーについてあれこれ批評していた。中にはテクニカル指標で分析してみせて「上昇トレンドなのに売るとか馬鹿じゃねーの」みたいなことを言っている人もいた。自力で勝てない人間がうんちくを垂れて批評するなど噴飯物だ。

ストラテジーの研究より相場の研究

ストラテジーの研究をするよりも先ず自力で勝てるように相場の研究をしたほうがはるかによいと私は考えている。経験的に本物が少ないと分かっているものの研究は虚しい。むしろ相場の研究をしたほうが有意義であるし、ストラテジーの良し悪しを見抜く目も持てるようになるだろう。

(2017/01/28更新)

「FXで月○○万円稼ぐ」は本当か (2017/05/30)

FX商材には要注意

「FXで月○○万円稼ぐ」と称した本やサイトをよく見かける。しかし、果たして本当だろうか。

嘘である場合、これは宣伝文句で読者を呼び込んで

  • 広告収入を得る
  • 本、DVDを販売する
  • 有料のメルマガ、セミナーなどをやったりして利益を得る

といった魂胆であろう。

もちろん、こんなことにお金を使っても無駄にするだけだ。しかも、そこで得た情報でFXをやっても負けるばかりだから、二重の損失になる。

もし本当であったとしても、それは運による場合と実力による場合との両方が考えられる。運による場合はさらにそれを自覚している場合とそうでない場合との両方が考えられる。

たまたま運がよくて稼げただけなのに実力と思い込んでいる著者もいるだろう。当然ながら、そのような著者の書くものを読んでも役には立たない。

一方、たまたま運がよくて稼げただけということを自覚している者もいるだろう。稼いだこと自体は嘘ではないということで、その事実を資本に勝ち組だのカリスマだのと自称して商売の種にするのである。

信用する前に先ず検証

言っていることが本当で、しかも、それが実力に基づいている著者の書くことだけが役に立つ可能性がある。では、どうやってそれを見抜けばいいのだろうか。それはその著者の手法を実際のデータを用いて検証することである。

私がFXを始めたばかりのころ、Amazonの書評を見て評判の高かったFXのトレード本を読んでみた。私は一々自分で確認しないと信用しない性格なので、著者の言うことが本当か調べた。

当時、プログラミングは知らないし、Excelすら使えなかった。ノートにデータを書き込み、電卓で計算したのである。日足でわずか半年程度のデータを1週間もかけて検証した。

すると、著者が本に書いてある資産曲線とは全く形状が違い、まるで勝てていないことが分かった。他人の言うことを真に受けてはいけないのだということを学べたのは幸いであった。

検証不可能なものは信用しない

一方、検証不可能なものは信用しないことだ。裁量トレーダーの手法にはデータとして入手しにくい情報や臨機応変の判断などがあって検証できない場合がある。嘘と決めつけるのは酷とはいえ、役に立つかどうか分からないものを信用するわけにはいかない。

裁量トレーダーの手法には検証できる部分もないわけではない。裁量トレーダーといえども、むしろテクニカル分析などをやりつつ、それに裁量を加えている場合が多いだろう。テクニカル分析の部分は比較的検証しやすい。

そのように検証できる部分があれば実際に検証してみるといい。もし検証してまったく勝てないようであれば著者の言うことは嘘と考えても構わない。

検証できる部分だけでもそれなりに勝っている。それに裁量を加えて勝ちをより確実に、より大きくした、というのなら理解できる。ところが、検証できる部分では逆に負けていて、それに裁量を加えて勝ちに変えたというのであればおかしな話だ。

わざわざハンデを抱えるようなことをせず、初めから裁量だけでやればいいのである。裁量という検証不可能な理由を隠れ蓑にしてホラを吹いているとしか思えない。

数学、英語、プログラミングを学ぼう

だが、実を言うと、他人が本物かどうか調べる暇があるなら、もっと有意義なことをやるべきだ。数学、英語、プログラミングなどを勉強したほうがトレードの役に立つと私は考えている。

断定はできないものの、経験的に言えば、本物はほとんどいない。本物でない者の書くことを一々調べるなんて時間の無駄ではないか。そんな暇があるなら勉強するに越したことはない。

ネットでFXについて検索してみると、うさん臭い、しかも有料の情報が少なくない。無料と称してもいても、何か裏がありそうだ。

だが、数学やプログラミングについて検索すると、多くは真面目であり、かつ無料である。怪しげな宣伝はない。英語も読めれば、より多くの情報を得られる。

安定して勝つことが大事

そもそも月にいくら稼ぐということは重要ではない。重要なのは安定して勝つということだ。安定して勝つということと、そうでないこととの間には埋めることのできない大きな差がある。

それに比べれば月に1万円稼ぐのと100万円稼ぐのとでは大した違いではない。この程度の差は資金量やリスクのとり方で埋められる。いくら稼ぐかよりも先ず安定して勝つにはどうするかを考えるべきなのだ。

コインを投げて、その裏表を当てさせ、当てたら資金を倍、外したら没収というゲームに参加したとしよう。2人に1人は資金を2倍、4人に1人は資金を4倍、8人に1人は資金を8倍、16人に1人は資金を16倍にできる。だが資金を16倍にできたところで、ただの運である。

トレーダーも同じだ。でたらめにトレードしたとしても、一定の割合で大成功を収める者が出てくる。例え億トレーダーなどど自称していても、そんな連中は相手にしなくていい。