Pythonを使ってFxの自動売買システムを作ろう!

2019年8月11日

スポンサードリンク
スポンサードリンク

システムトレード:ボリンジャーバンドを導入したモデル

前回記事(OANDA APIを使って自動売買プログラムを作ろう!)では、移動平均線を用いてポジションを持って為替取引を行うモデルをご紹介しました。

それでは、今回は、ボリンジャーバンドを使って、2σ線に触れたら逆張りでポジションを持ち平均線に触れたらポジションを手放すモデルを作りましょう。

\(\)

ボリンジャーバンドって何?

まず、テクニカル指標の一つであるボリンジャーバンドの紹介をします。

 

ボリンジャーバンドとは、指定した期間において、現在価格の存在範囲を統計的に推定するテクニカル指標です。

具体的には、表示しているローソク足に関して、大体のFx会社が提供しているテクニカル指標のボリンジャーバンドは、デフォルトでローソク足20本分に設定してあるので、

それを基準にして話を進めて行きます。

 

このローソク足20本分にはそれぞれ、始値・終値・最安値・最高値の情報が入っていますが、通常ボリンジャーは終値のみの値を使います。

また、便宜上、現在値、一本前のローソク足の終値、n本前のローソク足の終値をそれぞれ

$$f_0, f_1, f_n$$

と表すことにします。

 

ボリンジャーバンドは、合計5本(または7本)の線で構成されています。

5本線の内訳はそれぞれ

・平均線

$$MEAN = \frac{1}{20}\sum^{19}_{n=0}f_{n}$$

・±1σ線

$$\pm1\sigma = MEAN \pm \sqrt{\frac{1}{20}\sum^{19}_{n=0}\left(f_{n}-MEAN\right)^2}$$

・±2σ線

$$\pm2\sigma = MEAN \pm 2\times\sqrt{\frac{1}{20}\sum^{19}_{n=0}\left(f_{n}-MEAN\right)^2}$$

 

となっています。

σ線の計算式での右辺第2項は、標準偏差と呼ばれていて、データのバラツキ度合いを表しています。

つまり、標準偏差の値が大きければ、値が平均値から大きくバラついていて、小さければバラツキ度合いは小さいということです。

 

また、投資家の嗜好によっては、±3σ線も考慮する場合もありますが、その場合は±2σ線の式で2を3に変えればオッケーです。

 

また、このボリンジャーバンドについてですが、統計学の話を少しすることになるので、詳しい内容はググっていただければいいですが

初学者用に、本当にざっっっっっっっっっっっっっっっっっっっっっっっっっっっっくり説明しますと、

現在価格は、±1σ線の範囲にいる確率が68%であり、±2σ線の範囲にいる確率が95%であり、±3σ線の範囲にいる確率が99%であることを表しています。

 

つまり、逆に言えば、現在価格が、±2σ線に触れた場合、95%ほどの確率で反発するということがわかります。(厳密にいうと現在値も含めた時点で指定のσ線に触れたとしても、そのまま突き抜ける可能性は往々にしてあるので、一つの基準として考慮する程度に捉えるべきだと後々わかります。)

これが、ボリンジャーバンドの最大の肝になる部分ですので、ここさえ押さえていれば、とりあえずは大丈夫です。

 

スポンサードリンク

ボリンジャーバンドを意識したシステムトレードを作成

それでは、本題のボリンジャーバンドを使ってトレードをする自動売買システムを構築しましょう。

 

その前に、どのタイミングでポジションをもち、どのタイミングで利確または損切りを行うかをまとめましょう。

このような条件で、ポジションを持ち、利確損切りの判断を行うようにしました。

 

いよいよ、モデルを組みましょう。

途中までは、前回記事と同じことを書いているので、内容を詳しく知りたい人は、そちらを参照してください。

【参照記事】

OANDA APIを使って自動売買プログラムを作ろう!

PythonでOANDA APIを使って、過去レートを5000件以上取得する方法

 

では、上記の表を参考に、以下のようなコードを作成しました。

 

こんな感じになります。

 

基本は前回記事と同じで、6時間だけ動くようにしてあり、各々の条件でポジションを持ち、指定した条件で、

利確損切りをするようになっています。

 

コードが汚いのは、初心者ということでご愛嬌を・・・笑

 

総括

実は、このコード自分が一番最初に思いついたモデルで、実際にこれをレンタルサーバーにこのファイルをアップロードし、

ssh接続経由で、バックグラウンドで1週間運転させてみました。

参照記事:SSH接続の仕方とXサーバー上でPythonを動かそう!

 

結果としては

勝利数:20回ほど

敗北数:40回ほど

獲得pips:約80pips

損失pips:約75pips

という結果でした。

一応プラス収益で終えられていますが、相場の環境に大きく作用されることと、勝利回数よりも敗北回数の方が2倍と多く、

資産運用としてはまだまだ課題の多いモデルとなっていくことがわかり、

上記で、95%の確率で反発するというボリンジャーバンドの性質からも大きく外れる結果となっています。

 

今後は、他のテクニカル指標と組み合わせて、コードを組む必要性があることがよくわかり、メジャーな指標ほどそれ単体では何ら有効ではないということがわかった良い機会となりました。

 

ではでは、以上マスオカでした。

報告!!実際に利益の出たプログラムをnoteにて販売中!!

自分が長いこと研究して実際に1週間に3%ほどの利益を上げれている自動取引BOTを下記のリンク先にて公開中です!気になるかたはぜひご覧ください!

FxトレーダーでOANDA使ってる方、Pythonで作ったこの自動売買BOTを試して欲しいです。

また、新しく人工知能の知識を用いた線形回帰をベースとした特殊な強化学習のモデルを作成しました。かなりのパフォーマンスを上げることができたいますので、是非お試しください。

【論文実装編】線形回帰モデルのFx自動売買ー学習パート+取引モデルのパート統合

 

スポンサードリンク