![見出し画像](https://assets.st-note.com/production/uploads/images/44211017/rectangle_large_type_2_c0d614220c9bdb034e7169641cf3245f.png?width=1200)
仮想通貨で億り人への道 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のインストール
Pythonのインストールについては、 Python Japanの以下のページを参考にしてください。 https://www.python.jp/install/windows/install.html
(2) Pythonライブラリのインストール
① pybitflyer
pybitflyerは、bitFlyerが提供しているAPIをPythonから簡単に使えるようにしたRESTful APIラッパーです。コマンドプロンプトから以下のコマンドを実行し、インストールしてください。
>pip install pybitflyer
② TA-Lib
TA-Libは、移動平均線、ボリンジャーバンド、MACDなどのテクニカル分析をするためのライブラリです。
■インストールは、以下のコマンドではうまく行かないようです。
>pip install TA-Lib
■以下のサイトよりTA-Libパッケージファイルをダウンロードしてください。 https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
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
6.2 Pythonでプログラムを作成
まず、pybitflyerライブラリを使用して簡単なプログラムを作成してみます。テキストエディター(サクラエディタ、Notepad++など)または、Visual Studio Codeをインストールしておいてください。
①板情報を取得する
■ ソースコード
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)
■ 実行結果
次回は、「Pythonで自動売買プログラムを作成する(ストラテジー)」を予定しております。今回使用しなかったTA-Libライブラリを使用します。
この記事が気に入りましたら、サポートしていただると嬉しいです!
この記事が気に入ったらサポートをしてみませんか?