Contents
Pythonで自動売買botの作り方
こんにちは、ミナピピン(@python_mllover)です。今回はプログラミング言語「Python」を使ってシステムトレード、つまり自動売買を行うための流れを説明していきます。
株式やビットコインなどの自動売買を行うプログラムの仕組み自体は簡単なif文とfor文の組み合わせですが、作成するにあたっては「テクニカル指標の知識」、「取引所の注文方式についての知識」、「プログラミングについての知識」の3つが必要となります。
なので、仕組み自体は単純なもののなかなか理解するのが難しいという人が多く見受けられるので1つ1つ丁寧に解説していきます。このシリーズの記事を読むと以下のような技術が身に付きます。
/・・・このシリーズを読んで学べること・・・/
・ビットコインの価格データ・板情報の取得方法
・APIを使って取引所にプログラムから注文を出す方法
・Pythonでのテクニカル指標の計算方法
・Pythonによる自動売買プログラムの作り方
/・・・シリーズ記事一覧・・・/
Pythonで自動売買Botを作る①~システムトレードの流れを把握する
Pythonで自動売買Botを作る②~仮想通貨取引所からビットコインの価格を取得する
Pythonで自動売買Botを作る③~プライベートAPIを使って仮想通貨を売買する
Pythonで自動売買Botを作る④~テクニカル指標を用いた自動売買botを作って動かしてみる(コピペで実行できるコード付き)
Pythonによる自動売買Botを作る⑤~レンタルサーバーでbotを定期実行させる
システムトレードとは何か?
まずシステムトレード:通称シストレというのは、ざっくりいうと株式・FXやビットコイン・仮想通貨などで「自分で決めた取引ルールをプログラムとして、その取引ルールに則ってコンピューターに自動でトレードさせる」もので、システムトレード(自動取引)の利点としては以下のようなものがあります。
①感情を挟むことなく機械的に損切・利確ができる。
②建てた戦略についてバックテストを行うことで、確実に儲からない戦略をあらかじめ排除できる。
③バックテストを行うことで、実稼働では不可能に近い回数と少ない時間でロジックの検証をできる。
④コンピューターが勝手に取引してくれるので、画面に張り付かなくても24時間トレードを行ってくれる。
(引用元:https://dmjtmj-stock.com/entry/2017/01/12/002729)
例えば人間が手動でポチポチと取引する場合であれば、チャートを見て上がりそうか下がりそうでなんとなく売買しますが、プログラムに自動で売買取引をさせる場合は、なにを売買の判断基準にするのかちゃんとルールを設定しておく必要があります。
勿論自分ルールに従って取引している人もいますが、人間とは不規則な生き物で特にお金が掛かってくると正常な判断を下せないことが往々にしてあります。
一方プログラムが取引する場合はルールを曖昧ではなく、厳格に持つことで、ルールに従ってきっちりと取引することが可能です。そして、このような、プログラムに買うか売るかのトレードの判断指標になる取引ルールを「シグナル」と言います。
この(トレード)シグナルに使われるものとしては「(指数)移動平均線」・「MACD」・「RSI」・「ボリンジャーバンド」などの有名なテクニカル指標が一般的です。例えばRSIというテクニカル指標を使うとするならば、「RSI が30以下になったときに買い、RSIが80以上になったら売るといった」などのルールをプログラムで設定すれば、それの通りにコンピューターが忠実にトレードをおこなってくれます。
このように、「システムトレードは、分足・日足などをから算出したテクニカル指標をトレードシグナルに使用することが一般的」です。そして、その発展系としては機械学習による分類やニューラルネットワーク・ディープラーニングによる深層学習、強化学習を使うパターンも存在します。
株式の自動取引は難しい
自動取引を行うためには、まずプログラムからネット上にある取引所のサイトなりにアクセスする必要があります。ですが、昨今は金融系サイトのセキュリティはかなり高くログインするのにもかなり手間が掛かります。なので、自動売買を行うにはアクセスをお手軽にしてくれるAPI(アプリケーションプログラミングインターフェイス)というものを経由してアクセスすることが一般的です。
最近はメモリの指数関数的な性能向上と、このAPIの登場で誰でも手軽にシステムトレードができるようになり昨今の流行りではありますが、残念ながら日本の証券会社では一般個人向けの株式売買のAPIは公開されておらず、APIを通しての株式の自動売買は基本的にできません。
一応Pythonであれば「Selenium」というライブラリを使って直接ウェブブラウザを操作して、証券の会社のサイトにアクセスしてそこから銘柄を売買すれば、自動取引ができないこともありませんが、機関投資家のような高頻度取引は到底できません。
まあUIを操作して取引を行うのは、サイトのHTMLの仕様を知っておく必要があったりとハードルがちょっと高いですが、頑張ればできないことはないと思います。↓の記事ではSBI証券で自動ログインする方法と「Selenium」の使い方を解説しているので、どうしても株式の自動取引がしたいという人は読んでみてください。
参照記事:【Python】「Selenium」でWebブラウザを自動操作して証券会社のサイトにログインする
参照記事:【Python】「Selenium」を使ってブラウザを自動操作する
ただブラウザを自動で操作しての自動取引すると、サイトの仕様が変わるたびにプログラムを組みなおさなければいけなかったり、そもそも株式取引自体が平日の9時~15時までの短い時間しかできないと不便なので、株式はシステムトレードに向いていないと思います。
ちなみになぜ機関投資家が高頻度取引ができるのかというと、恐らく法人向けにはAPIが公開されているからだと思います。なので、個人が株式取引において自動取引を行うbotを作るのは、ちょっとハードルが高く、手っ取り速く自動取引botを作りたいとなるとAPIが用意されている取引所で実行するのが簡単です。
取引所側からAPIが用意されていれば、売買の指示や残高の確認のようなURL処理が簡単に実行できるので、プログラムによる自動取引は基本的にAPIが公開されている取引所で実行するのが簡単でオススメです。
というわけで、現在個人投資家向けにAPIが公開されている取引所はどこなのかという話な訳ですが、個人向けにAPIが公開されているのは仮想通貨・ビットコイン(FX)を扱う仮想通貨取引所が多いです。
なので、仮想通貨やビットコインをアルゴリズムで自動売買を行っている人はツイッターなどのSNSで検索するとそこそこ居てますし、当サイトのように自動取引のノウハウを書いているブログもあります。なので、『とりあえず自分でプログラムを組んで自動売買がしてみたいという人は仮想通貨・ビットコインがオススメ』です。
参照記事:【Web技術】APIについて実用例を踏まえて分かりやすく解説してみる
シストレに使うプログラミング言語
当たり前ですが、システムトレードを自動取引を行うBot(アルゴリズム)を作るには丁寧に設計を行う必要があります。まあプログラミングは全部そうなのですが、基本的にエラーがあるとプログラムは動きません。
自動取引Botを作るために使用するプログラミング言語は、基本的に何でもできますが、Pythonだと自動取引プログラム作りのノウハウを書いたブログがいっぱいあるので、独学でシステムトレード(自動取引)を始めたいという人は「Python(パイソン)」を勉強するのがオススメです。
ちなみにPython(パイソン)はGoogleなどでも採用されており、ディープラーニングでAIを作る際にも重宝されるプログラミング言語であり、今後のIT業界で潰しがきくプログラミング言語だと思うので、特に前途多望な学生の方などであれば、Python(パイソン)を勉強する方がオススメです。
参照記事:Pythonとは?言語の特徴やシェア、習得するメリットを徹底解説!!
自動取引Botを作るのに必要なもの
自動取引Botを作るために必要なものは以下です。
・Pythonのプログラミング環境(環境構築)
・ビットコインの価格データ
・ビットコインを自動取引する仮想通貨取引所の口座(Bitbank)
・プログラミングスキル(レベルはpaizaでCランクくらい取れれば十分)
・レンタルサーバー(24時間常時実行する場合)
・エラーが出ても頑張れる根気と情熱
用意の方法については後々解説していきます。まずはPythonのプログラミングがPCで出来るようにソフトウェアをインストールする必要があります。これを「環境構築」と言います。
まあ御大層な名称ですが、やることは「Anaconda」というソフトウェアをインストールするだけです。「Anaconda」のインストール方法については以下の記事で解説しているので参考にしていただけると幸いです。
参照記事:【Python】Anacondaのインストールと初期設定から便利な使い方までを徹底解説!
自動取引Botの仕組み
まずはプログラムがビットコインを売るか買うかのトレード判断を下すためには価格データが必要です。例えばビットコインを移動平均でゴールデンクロス・デッドクロスを売り買いのシグナルにして売買するためには、まず日足であれば最低でも5日分・25日分のビットコインの価格データが必要になります。
なので、システムトレード(自動売買)の最初の第一歩は価格データを集めて記録・保存しておくこと必要にあると言えます。そのために仮想通貨取引所から、Ticker(価格データ)を一定時間ごとに取得してそのデータをデータベースに蓄積している人もいます。
Pythonの場合ならば、SQL(データベースを操作する言語)と使ってデータベースの作成したり、「Pandas」というライブラリを使用してDataframe(データフレーム)→csvとして保管するのがオススメです。
参照記事:Pythonでデータベース(DB)を作成・操作できる「sqlite3」の使い方を分かりやすく解説する
個人的にはPythonが好きなのはこういうウェブマシーンとして、インターネット上の情報収集が他のプログラミング言語よりも簡単にできるという点にあります。
一応、SQLとかよくわからんという人は単純に価格データサイトから価格データを取得してプログラム内の変数に数値を格納しておくだけでもBot自体は作成できます。Pythonであればビットコインだけではなく日経平均株価の日足なども、この「Pandas」というライブラリの関数で1行で取得する事もできます。
そして、ビットコインを始めとする仮想通貨の価格ならば価格サイトがあるので、そこから過去のデータを取得するということも可能です。ビットコインの価格データの取得方法はいろいろとあります。
参照記事:【Python】CoinGeckoのAPIでビットコイン・アルトコインの価格データを取得する
そして、集めたビットコインの価格データから移動平均線やボリンジャーバンド・RSIなどの各テクニカル指標を計算し、トレードの判断材料(トレードシグナル)とします。
例えば、移動平均線ならば短期移動平均線(5分足)が長期移動平均線(25分足)を抜ければ「ゴールデンクロス」ということで買い、逆に長期を短期が突き抜ければ「デッドクロス」ということで売りというような戦略が立てられます。今回のサンプルとして作成する自動取引Botは、「ゴールデンクロスとデッドクロスをシグナルとする自動取引bot」ということになります。
※自動取引のシグナルはテクニカル指標だけではなく、アービトラージ(裁定取引)などの手法もありますし、どういう戦略にするかは個人の好みで今回は一番オーソドックスな例を挙げています。
自動売買Botが行っていること
自動売買というと漠然としたイメージで、いきなり自動取引アルゴリズムBotを作ろうと思っても、まず何から手を付けたらいいのか分からなくなりがちです。しかし、自動取引を行うBotも中身を細かく分けると単純な条件分岐とループを実行しているだけです。
なので、自動売買Botは大まかな流れを理解し、1つ1つの処理を組み合わせれば簡単に作ることができます。シストレBotの大まかな流れは以下のようになります。
①価格を取得する→②テクニカル指標(シグナル)を計算→③設定条件を満たした場合買い(売り)注文を作成→④買い(売り)注文を送信する→⑤注文の実行の確認と残高の確認→⑥シグナル再びが出たら売り(買り)注文を送信する→⑦注文内容・残高の確認→⑧最初に戻る
基本的な自動取引処理の流れはこんな感じです。FXとか指値注文を混ぜる場合はこれよりも処理が少し複雑になりますが、とりあえず以下の3つの大まかな流れは基本です。
自動売買プログラムの基本的な処理
①「価格データを取得」
②「それに基づいたテクニカル指標(シグナル)の計算」
③「テクニカルの合図に従ってAPIから売買注文を出す」
④「注文を決済する」
ただこれをいっぺんにやろうとすると頭が混乱して、自動売買Botを作るのは難しいと断念してしまいがちです。なので、ここではこの工程の1つ1つをじっくりやっていこうと思います。そうすれば脱落する人も少なるなるのではないかな?と考えています。
まとめ
以上がシステムトレードbotを作るにあたっての基本的な流れです。今回は移動平均線のゴールデンクロス・デッドクロスに従って取引する自動取引botの作り方を分かりやすく解説していきます。
というわけここからは「GMOコイン」というGMOグループが経営している国内大手の仮想通貨取引所が提供しているAPIを使って、ビットコインの価格データ(ticker)や板情報を取得していき、移動平均線をシグナルとした自動売買Botの作り方を解説していきます。
→(続き)PythonでシストレBotを作る②~仮想通貨取引所からビットコインの価格を取得する
:追記 2021/01/04
ビットコインについて、ビットコインの自動取引プログラムの作成について、分からない点つまずいている点がありましたら、MENTAにて対応いたします。お気軽にお声がけください!
/・・・自動取引bot作成シリーズ記事一覧・・・/
Pythonで自動売買Botを作る①~システムトレードの流れを把握する
Pythonで自動売買Botを作る②~仮想通貨取引所からビットコインの価格を取得する
Pythonで自動売買Botを作る③~プライベートAPIを使って仮想通貨を売買する
Pythonで自動売買Botを作る④~テクニカル指標を用いた自動売買botを作って動かしてみる
Pythonによる自動売買Botを作る⑤~レンタルサーバーでbotを定期実行させる
関連記事:【Python】AUカブコム証券のKabuステーションAPIのサンプルコードと使い方①(口座残高・注文一覧)
関連記事:【Python】KabuステーションAPIのサンプルコードと使い方②(板情報・価格情報の取得)
関連記事:【Python】KabuステーションAPIのサンプルコードと使い方③(現物取引・信用取引の注文発注)
コメント
[…] ミナピピンの研究室 3 users 8 pocketsPythonで自動売買Botを作る①~システムトレードの流れを把握するhttps://tkstock.site/2018/03/04/2018-03-04-211747/ Pythonで自動売買botの作り方&nbs […]
[…] ミナピピンの研究室 3 users 8 pocketsPythonで自動売買Botを作る①~システムトレードの流れを把握するhttps://tkstock.site/2018/03/04/2018-03-04-211747/ Pythonで自動売買botの作り方&nbs […]
[…] 最初の記事の「Pythonで自動売買Botを作る①~システムトレードの流れを把握する」でも説明したように、自動売買botを作る上においてはプログラムから売買注文を出す処理の他に自動で […]
[…] https://tkstock.site/2018/03/04/2018-03-04-211747/ […]