見出し画像

仮想通貨で億り人への道 AIで自動売買【連載】第6回 「Pythonで自動売買プログラムを作成する(基本編)」

前回は、「自動売買するために必要なAPIの概要とAPIキーの取得 」でした。

連載第6回は、「Pythonで自動売買プログラムを作成する(基本編)」です。

連載記事は以下の内容を予定しております。

1. 仮想通貨(暗号資産)には何がある?  ・・・・・・・第1回
2. 暗号資産交換業者の選定  ・・・・・・・・・・・・・第2回
3. 口座開設  ・・・・・・・・・・・・・・・・・・・・第3回
4. デモトレードが出来ないので実際にトレードしてみる ・第4回
5. 自動売買するために必要なAPIの概要とAPIキーの取得 ・第5回
6. Pythonで自動売買プログラムを作成する(基本編)・・・今回
7. Pythonで自動売買プログラムを作成する(ストラテジー作成編
パート1)
8. Pythonで自動売買プログラムを作成する(ストラテジー作成編
パート2)
9. ストラテジーのバックテスト
10. 自動売買プログラムにAI(機械学習)を導入する
11. VPSサーバーで自動売買プログラムを運用する

「Pythonで自動売買プログラムを作成する」の記事はボリュームが大きいため、3回に分けて書かせていただきます。

第6回 Pythonで自動売買プログラムを作成する(基本編)
自動売買プログラムは、Pythonというプログラム言語で作成します。
Pythonについての説明は割愛しますが、ご存じない方はネットで調べてみてください。また、Pythonでこんなことが出来ますという記事を投稿しておりますので、参考にしてください。


6.1 プログラム動作環境のセットアップ
作成したプログラムを動作させるために、Python本体とライブラリをインストールします。

(1) Pythonのインストール

画像5

Pythonのインストールについては、 Python Japanの以下のページを参考にしてください。 https://www.python.jp/install/windows/install.html


(2) Pythonライブラリのインストール

① pybitflyer

pybitflyerは、bitFlyerが提供しているAPIをPythonから簡単に使えるようにしたRESTful APIラッパーです。コマンドプロンプトから以下のコマンドを実行し、インストールしてください。
>pip install pybitflyer

画像1


② TA-Lib

TA-Libは、移動平均線、ボリンジャーバンド、MACDなどのテクニカル分析をするためのライブラリです。

■インストールは、以下のコマンドではうまく行かないようです。
>pip install TA-Lib

■以下のサイトよりTA-Libパッケージファイルをダウンロードしてください。 https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib

画像3

Pythonのバージョンによって対応するファイルが異なります。Pythonのバージョンが3.9の場合は、TA_Lib-0.4.19-cp39-cp39-win_amd64.whlをダウロードします。

コマンドプロンプトから以下のコマンドを実行し、インストールしてください。
>pip install TA_Lib-0.4.19-cp39-cp39-win_amd64.whl

画像2


6.2 Pythonでプログラムを作成
まず、pybitflyerライブラリを使用して簡単なプログラムを作成してみます。テキストエディター(サクラエディタNotepad++など)または、Visual Studio Codeをインストールしておいてください。

画像6


①板情報を取得する
ソースコード

import pybitflyer
import json

api = pybitflyer.API()
board = api.board(product_code="BTC_JPY")
print(json.dumps(board, indent=2))


実行結果
asks(買値)、bids(売値)、mid_price(中間価格)を取得することができます。

{
 "mid_price": 3267487.0,
 "bids": [
  {"price": 3266510.0,"size": 0.1776},
  {"price": 3266509.0,"size": 0.85}, 
  ・・・
 ]
 "asks": [
   { "price": 3268465.0,"size": 0.008},
   {"price": 3268467.0,"size": 0.03},
  ・・・
  ]
}


②Tickerを取得する
ソースコード

import pybitflyer

api = pybitflyer.API()
ticker = api.ticker(product_code="BTC_JPY")
print(ticker)


実行結果
state: 板の状態
timestamp: UTC(協定世界時)時刻
ltp: 最終取引価格
volume: 24 時間の取引量
market_bid_size: 板寄せ時の売りの成行注文量
market_ask_size: 板寄せ時の買いの成行注文量

{
 "product_code": "BTC_JPY",
 "state": "RUNNING",
 "timestamp": "2021-01-28T03:07:08.663",
 "tick_id": 14603328,
 "best_bid": 3259103.0,
 "best_ask": 3261034.0,
 "best_bid_size": 0.15983332,
 "best_ask_size": 0.9,
 "total_bid_depth": 1078.30832943,
 "total_ask_depth": 1390.96050997,
 "market_bid_size": 0.0,
 "market_ask_size": 0.0,
 "ltp": 3259868.0,
 "volume": 120045.86331337,
 "volume_by_product": 7682.85145682
}


③過去データを取得する
Cryptowatchから24時間分の1分足データを取得するプログラムです。取得したOHLCV データをPandas DataFrame(二次元の表形式のデータ)にて格納します。pipコマンドでPandasをインストールしておいてください。

ソースコード

import datetime
import json
import pandas as pd
import requests
import time

######################################
# CryptowatchからOHLCVデータを取得する 
######################################
def get_btc_cryptowatch(period_min):
   url = "https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc"

   # パラメータセット
   before = round(time.time())
   after = before - (period_min * 60)
   query = {"periods": 60, "before": before, "after": after}

   # データ取得
   res_json = json.loads(requests.get(url, params=query).text)
   result = res_json["result"]
   data = []
   for i in result:
       row = result[i]
       for column in row:
           if column[4] != 0:
               column = column[0:6]
               data.append(column)
   
   date   = [ price[0] for price in data ]
   open   = [ int(price[1]) for price in data ]
   high   = [ int(price[2]) for price in data ]
   low    = [ int(price[3]) for price in data ]
   close  = [ int(price[4]) for price in data ]
   volume = [ int(price[5]) for price in data ]
   date_time = map(datetime.datetime.fromtimestamp, date)
   dti = pd.DatetimeIndex(date_time)
   df = pd.DataFrame({"open" : open, "high" : high, "low": low,
                    "close" : close, "volume" : volume}, index=dti)
   return df


######################################
# 1分足データを24時間分(1440分)取得する
######################################
pd.set_option('display.max_rows', 1440)
df = get_btc_cryptowatch(1440)
print(df)

実行結果

画像4

次回は、「Pythonで自動売買プログラムを作成する(ストラテジー)」を予定しております。今回使用しなかったTA-Libライブラリを使用します。

この記事が気に入りましたら、サポートしていただると嬉しいです!

この記事が気に入ったらサポートをしてみませんか?