億り人のぶせなさんの「FXのエンベロープで1億円以上稼いだ」を検証して、よければシストレを構築しようと考えています。
前提
投資の考え方
以前、ぶせなさんの手法を分析した以下の記事を前提にしています。
ぶせなさんの「FXのエンベロープで1億円以上稼いだ」手法を再分析する
上記の記事を参考にしたぶせなさんの手法を紹介しているサイトは以下になります。
目標
年利10%以上のパフォーマンスを出せること。
(特に意味はないのですが、これは個人の感覚かと思います。10%くらいはなんとかしたいと)
シストレの投資手法
金融商品 | USD/JPN(他の通貨ペアでもいいと思うのですが | ||
金融機関 | OANDA JAPAN(IB証券でもいいのですが、税金を考えてこっちにしました | ||
資金 | 500万円(これらはバックテスト用という意味です。 | ||
売買 | 買いと売りの両方 | ||
売買数量 | 複利効果を使う。レバレッジは3倍とする。 | ||
スプレッド | 0.008の固定とする。(OANDA JAPANを参考にしています。 | ||
投資判断 | 買い | 発注 |
|
利確 | 高値と発注価格を比較して以下のゾーンによるPIPSで利確する。 発注時と同一の足でも利確する。なお、スプレッドは含まない。 実際の利益はゾーン1の場合は、2pips-0.8pips=1.6pipsとなります。
ゾーン6に関してはぶせなさんの記事では触れていませんでした。 | ||
損切 | 安値と発注価格を比較して以下のゾーンによるPIPSで利確する。 発注時と同一の足でも利確する。なお、スプレッドは含まない。 実際の利益はゾーン1の場合は、-2pips-0.8pips=-2.8pipsとなります。
ゾーン6に関してはぶせなさんの記事では触れていませんでした。 | ||
売り | 発注 | 買いと基本的に同じ。 高値と安値の違いとサポートラインとレジスタンスラインの違いのみ。 | |
利確 | 買いと基本的に同じ。高値と安値の違いのみ。 | ||
損切 | 買いと基本的に同じ。高値と安値の違いのみ。 |
システム環境
開発ツール
- バックテスト用システム:Jupyter Notebook 1.0.0
- 本番用システム:Visual Studio Code 1.45.1
開発環境
- OS:macOS Carolina 10.15.5
- 言語:Python 3.7.2
本番環境
- OS:Windows Server 2012 R2(AWS
- 言語:Python 3.7.4
Pythonのバージョンがあっていませんね。。。気にしない気にしない。。。
バックテスト
データ
今回は、2019年のUSD_JPYの1分足を使用しました。
過去データはOANDA japanからダウンロードしたものを私が時系列の抜けを補正したデータを利用しているのですが、それは再配布禁止と規約になっていたと思いますので、手間ですが、ご自身でダウンロードしてください。
ファイル名は投資対象のシンボル名+足になっています。
- シンボル名:USD_JPY
- 足:M1
例)USD_JPY_M1.csv
システム
以下はGithubにアップしていますので、ダウンロードして利用してください。
(左下のファイル名をクリックするとGithubのサイトに遷移します。「Download ZIP」をクリックするとダウンロードできます。)
「結果」の欄のソースも入っています。
ソースにゴミがあったりしますが、すいません。
結果
投資回数 | 期間日数 | 回数/日数 | 損益PIPS | 資金残 | 上昇率 | 利益回数 | 損失回数 | 勝率 |
246 | 313 | 78.6% | -87.8 | 4,960,068 | 99.2% | 141 | 105 | 57% |
勝率は57%とまぁまぁなのですが、微妙に負け越していますね。
もちろん、ぶせなさんの「スキャルピング禁止の4つのタイミング」を考慮していませんから仕方ないのかも知れません。
ということで、可能なものを考慮していきます。
4. 参加者が少なく流動性を保てない時
12月24日以降と8月をまるまる対象外にしてみました。
df_log_array = pd.DataFrame.from_dict(log_array) df_log_array.columns = df_log_array.iloc[0] df_log_array = df_log_array.drop(0) df_log_array.index = pd.DatetimeIndex(pd.to_datetime(df_log_array['date']), name='date') df_log_array = df_log_array.tz_convert('America/New_York') df_log_array = df_log_array[:"2019/12/14"] df_log_array['m'] = df_log_array.index.month df_log_array = df_log_array[df_log_array['m'] != 8] print(df_log_array.pips.sum())
結果:-84.5PIPS
微妙ですが、少し損失が減りました。
1. 経済指標発表時
4に追加して検証します。
「例えば、欧州時間は17時、ニューヨーク時間は21時30分などといった具合です。」と記載がありましたが、今回は、USD/JPYですので、アメリカの発表時間を考慮しようと思います。
アメリカの発表は8時30分(ニューヨーク時間)になりますが、何時頃まで影響しているか確認してみます。
df_log_array['h'] = df_log_array.index.hour df_log_array = df_log_array.set_index([df_log_array.index, df_log_array.index.hour]) df_log_array.index.names = ['date', 'hour'] print(df_log_array.groupby('hour').pips.sum())
hour 2 -0.084 3 0.036 4 -0.056 5 -0.028 8 -0.078 9 -0.060 10 -0.024 11 0.068 12 -0.056 13 -0.066 14 -0.174 15 -0.116 17 -0.122 18 -0.056 19 -0.040 20 -0.036 21 0.048 Name: pips, dtype: float64
上記のように、8時台、9時台のマイナスが大きいので、これを除いてみます。
print(df_log_array[(df_log_array['h'] !=8) & (df_log_array['h'] !=8)].pips.sum())
結果:-76.6PIPS
かなり良くなりましたが、これでは駄目ですね。
残りの禁止タイミングについては、以下のとおりです。
- 3. 高値安値などの節目をブレイクする時:これは既にサポートラインとレジスタンスラインで考慮済み。
- 2. 要人発言やイベント時:いつ発生するか不明なため、対応困難。
ゾーンを見直す
ゾーン6については、ぶせなさんは触れておらず、私の独自の見解で追加しました。
ということで、すべてのゾーンでの損益を見てみます。
print(df_log_array.groupby('zone').pips.sum())
zone 0 -1.092 1 -0.040 2 0.096 3 0.068 4 0.156 5 -0.032 Name: pips, dtype: float64
ぶせなさんの話では、ゾーンのレベルが上がるごとに、勝率が高くなるということでしたが、私の検証では、その傾向はあまり見られないようです。
損益がプラスになっている、ゾーン2・3・4のみでトレードするということも考えられますね。
ただし、32PIPSになります。
バックテストのまとめたもので検証する
以下をバックテストのシステムに組み込みました。
- 12月24日以降と8月をまるまる新規トレードの対象外に。
- ニューヨーク時間の8時台、9時台は新規トレードの対象外に。
- ゾーンは、2・3・4のみ。
投資回数 | 期間日数 | 回数/日数 | 損益PIPS | 資金残 | 上昇率 | 利益回数 | 損失回数 | 勝率 |
19 | 313 | 6.10% | 28.8 | 5,013,174 | 100.30% | 14 | 5 | 74% |
通算損益でプラスに転じ、勝率も約74%と高くなりましたが、投資回数がたったの19回になりました。
まとめ
残念ながら、ぶせなさんのスキャルピングを再現できないようで、シストレとしては、年利10%の利益を出すことが難しそうです。
やはり、全てを再現できないことと、ぶせなさんの感覚のところをつかめないのが、根本的な原因かと思います。
ただし、サポートラインとレジスタンスを見直したりすれば、もう少し、よくなるかも知れません。
あと、スプレッドの問題もあるかと思ったのですが、意味はなかったです。
今回のはじめのバックテストでは、246回のトレードで、-87.8PIPSの損失になっていましたが、スプレッドは0.8PIPSです。
0.8PIPS×246回= 1.968PIPSとなり、スプレッドがなくても大損失です。
ということで、今回の案は、ボツにします。
シストレの本番の構築はしません。
コメント