【コピペ可】PythonでFX自動売買botを自作する方法!ボリンジャーバンド編

この記事では、
・為替取引を自動で行うための Pythonプログラムを動かす方法
・ボリンジャーバンドを使ったコードの例
を解説します。
具体的に説明すると、
①プログラム開始からしばらくは売買せず価格データを収集
②その後、ボリンジャーバンドを下抜ければロングポジションを、上抜ければショートポジションを取る
③②を一定時間ごとに無限に繰り返す
といったプログラムを作成してみます。

なお、現状だと Python をターミナルから動かすタイプのFXbotはOANDA Japan の口座を持っていないと動かすことが出来ません(詳しくは後述します)。
今回のプログラムもOANDAの口座を持っていることを前提として作成しています。
ボリンジャーバンドとは
ボリンジャーバンドは移動平均線に対して現在の価格がどれくらい乖離しているかを判断する指標です。
例えば2シグマ区間のボリンジャーバンドを用いた場合、 現在の価格が過去の価格データ水準に対して偏差値30以下なら低すぎる(ので買い注文を入れる)、逆に偏差値70以上なら高すぎる(ので売り注文を入れる)といったふうに使います。

ボリンジャーバンドについて詳しく知りたい方は、下のサイトの説明がわかりやすいです。
https://www.fxbroadnet.com/tech/technicalchart/tech04.jsp

Pythonコード本体

まず先に Python コード本体を公開しておきます。
import pandas as pd
from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments
from oandapyV20.endpoints.orders import OrderCreate
import time
import json

#ボリンジャーバンドの幅
sigma = 2

#何秒ごとにデータ観測&売買判断を行うか
interval_sec = 5

#移動平均の計測期間
duration = 26

#API認証
accountID = input("口座IDを入力してください")
access_token = input("アクセストークンを入力してください")

oanda = API(access_token=access_token, environment="live")

#5秒足の終値を現在価格として使用する
params = {
    "count":1,
    "granularity":"S5"
}

#始めに価格データをただ観測する時の動き
def price_data_collecting(samples=100):
    print("これから約"+str(samples*interval_sec)+"秒間価格データ収集を行います。")

    price_list=[]

    for _ in range(samples):

        #価格データ取得
        r = instruments.InstrumentsCandles(instrument="USD_JPY", params=params)
        price = float(r.response['candles'][1]['mid']["c"])

        price_list.append(price)
        print("現在価格:"+str(price))

        time.sleep(interval_sec)

    print("価格データ収集が完了しました。")
    return price_list

price_list = price_data_collecting()

#ボリンジャーバンド関連の計算はpandasデータフレームを使う
#これを元にオリジナルの自動売買プログラムを作る時は、この辺をいじることになる

df = pd.DataFrame()
df["price"]=price_list

while True:

    #過去為替データを取得
    r = instruments.InstrumentsCandles(instrument="USD_JPY", params=params)
    #現在価格
    price_now = float(r.response['candles'][1]['mid']["c"])

    df=df.append({'price': price_now,}, ignore_index=True)

    #移動平均と標準偏差を計算
    df["MSE"]=df["price"].rolling(window=duration).mean()
    df["std"]=df["price"].rolling(window=duration).std()

    #注目している σ区間の境界線(今回は下にsigma分と上にsigma分、つまりデフォルトで偏差値30以下と70以上)
    df["lower_limit"]=df["MSE"]-sigma*df["std"]
    df["upper_limit"]=df["MSE"]+sigma*df["std"]

    #最新の値段がσ区間を超えているか判定
    #今回はボリンジャーバンドより下なら安すぎる(=ロングすべき)、上なら高すぎる(=ショートすべき)という考え方

    if df.iloc[-1]["price"]<df.iloc[-1]["lower_limit"]:

        print("買い注文(ロングポジション)を実行します。")
        data = {
            "order": {
                "instrument": "USD_JPY",
                "units": 10000,
                "type": "MARKET",
                "positionFill": "DEFAULT"
            }
        }

        ep = OrderCreate(accountID=accountID, data=data)
        rsp = oanda.request(ep)
        print(json.dumps(rsp, indent=2))

    elif df.iloc[-1]["price"]>df.iloc[-1]["upper_limit"]:

        print("売り注文(ショートポジション)を実行します。")

        data = {
        "order": {
        "instrument": "USD_JPY",
        "units": -10000,
        "type": "MARKET",
        "positionFill": "DEFAULT"
        }
        }

        ep = OrderCreate(accountID=accountID, data=data)
        rsp = oanda.request(ep)
        print(json.dumps(rsp, indent=2))


    else:
        print("売買はありません。")

    #先頭行を削除してdfの長さを一定に保つ(長時間の運用時のメモリ対策)
    df=df.drop(df.index[0])
    time.sleep(interval_sec)
見てわかるとおり、ボリンジャーバンド周りの計算はpandasを使って行なっています。
これに関しては、ここでは紹介していませんがtalibというモジュールを使う手もあります。
talibはこの手のテクニカル指標を計算することに特化したライブラリですが、インストールが多少面倒なので僕はpandasを使って書くことが多いですね。

ボリンジャーバンドの幅(コードで言う変数sigma)などのパラメーターを変えてみて、結果がどう変わるか色々実験してみるのも面白いでしょう。

FX自動売買botを動かすまでの下準備

ここからは上記のコードを動かすための下準備について解説しておきます。
これらの手順を踏むことで上記以外の Python 自動取引プログラムも動かせるようになります。

Python3をインストール

まずは、Pythonを初めて使う方はPython自体をインストールする必要があります。
(「もう既に入っているよ」という方はスルーしてもらってオッケーです。)

下記サイトの手順に従ってPython3をインストールしてください。

Python3のインストール方法

インストールは完全無料で、だいたい10分もあれば完了します。

OANDAで口座開設

先述した通り、基本的に日本在住の人が Python プログラムを動かす時は OANDA の口座か必須になります。
これは、プログラムからFX業者のサーバーに命令を出す時にREST APIが公開されている必要があるためです。
現状、日本在住の方が使える業者でこの条件を満たしているのはOANDAのみです(2021年3月現在)。

ということで、まだOANDA口座を開設していない方は、下記リンクから開設しておいてください。

>>無料でOANDAの口座を開設する

ちなみにデモ口座単体ではAPI利用が不可になったので、本番口座の開設が必須になっています(2021/3)。

APIキー発行

次にAPIキーを発行します。
OANDAではアクセストークンなどと呼ばれることもあるようですが、要するに業者のサーバーに命令を出すためのパスワードのようなものが必要になるということです。

OANDAの API キーは次の手順を満たすと発行可能です。
API使用の条件(2021/3)
・プロコース選択
・ゴールド会員(前月の取引額が50万USD相当以上)
・口座残高25万円以上
※プロコースはスプレッドが少し大きいのと引き換えに、最大取引ロットが300万通貨に拡張されているコースです。
月額課金などはありません。
前月の取引額の最低条件を満たす為に、開設後しばらくは裁量でFX取引をこなす必要もあります。
OANDAに慣れる意味もこめて、取引をこなしましょう。

これらの条件を達成したら、ログイン後のマイページの中央下の「APIアクセスの管理」からAPIキーを発行できます。

発行されたAPIキーはセキュリティ的に重要なものなので他人に教えないようにしてください。
上記プログラム内にも直接書かず、実行時にinput()関数で入力する仕様にしているのは、セキュリティ的な理由からです。

必要ライブラリをインストール

最後にプログラムを動かすためのライブラリをインストールします。
といってもこれはpipでインストールできるので非常に簡単です。
ターミナルに以下のように入力するだけです。
pip3 install pandas
pip3 install oandapyV20
oandapyV20はOANDAのAPIをPython から操作しやすくするためのいわゆるラッパーです。

さて、ここまでの手順を完了することで上記プログラムを動かすことができるようになりました。
今後は自分で考えたアルゴリズムやロジックを元に為替の自動売買をすることも可能です。

ちなみにこのブログでも、深層学習AIを利用したコードなどを紹介しているので良かったら参考にしてみてください。

【2時間で完成】為替(FX)を予想する深層学習AIをPythonで無料作成

24時間稼働にはVPSサーバーも必要

なお注意点として、プログラムを長期間にわたって走らせる場合はVPSサーバーが必要です。
自分のパソコンで動作させていると、
・他の作業を同時にやるとPCが重くなる
・自動売買プログラムが動いている間は電源を落とせない
といったデメリットがあるので、外部のコンピューターをレンタルして、自動売買botを動かしておくということです。

これであれば、VPSサーバーのレンタル料金がかかりますが、bot停止のリスクを低減できる他、電気代も負担する必要がなくなります。
おすすめのVPSサーバーは以下の記事で紹介しているので、本格運用を考えている人はぜひ見てみてください。

【初心者向け】FX・仮想通貨の自動売買用のVPSサーバーのオススメはコレ!

2021年3月20日
スポンサーリンク

SNSシェアお願いします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA