ビットフライヤーで新規口座(ビットコイン2500円分貰えるキャンペーンだった)を作って、pythonでビットコインの自動売買をやってみた!
ビットコイン2500円分貰えるのは2月以降らしい…。
現在のビットコインの価格は500万円弱。
bitflyer lightningの最低取引単位は、0.001BTC(5千円弱)なのか。
1. 販売所(ブックオフ。買うと高い、売ると安い)
2. 取引所(メルカリ。客同士が売買、手数料ビジネス)
3. bitflyer lightning(プロ向け取引所。0.001BTCから取引できる)
取引所だと、0.01BTC(5万円弱)からだから、bitflyer lightning以外は無理やな。
お金ってどうやって入金するんだ?と思ったら、普通に銀行振込らしい(三井住友銀行のネット振込だと無料)
とりあえず、1万円入金してAPIキー取得して、pythonから買い注文!
指値は1BTCの価格を指定するので、デカい金額になる。その瞬間の金額でいいや!
BUY 4840975円
サクッと買えたのは良いけど、手数料0.15%がビットコインで差し引かれるので
0.00099850BTC
と保有するビットコインが、最低取引単位を下回って売れない!!
しょうがない。割高の取引所で100円分だけビットコインを購入して、最低取引単位の0.001BTC強にした。
都合よく、ちょっとだけ値上がりしたので、その場の時価で指値売り!
SELL 4844623円
損益は1万円+1円と微妙な感じになったけど、まあマイナスにならなかっただけ良しとするか?
現金: 9,904 円
ビットコイン 0.00001703 BTC
これだと単純に手数料・スプレッドの分だけ損するので、どういう条件で売買するかを指定しないと…。
単純なプログラムだと無理っぽいので、機械学習の勉強しないと駄目っぽいな、こりゃ
参考URL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import hashlib import hmac import requests import datetime import json api_key = "" api_secret = "" base_url = "https://api.bitflyer.jp" path_url = "/v1/me/sendchildorder" method = "POST" timestamp = str(datetime.datetime.today()) param = { "product_code" : "BTC_JPY", "child_order_type" : "LIMIT", "side" : "BUY", # BUY / SELL "price" : 4840975, # 指値(1BTCの金額) "size" : 0.001, # 取引単位 } body = json.dumps(param) message = timestamp + method + path_url + body signature = hmac.new(bytearray(api_secret.encode('utf-8')), message.encode('utf-8') , digestmod = hashlib.sha256 ).hexdigest() headers = { 'ACCESS-KEY' : api_key, 'ACCESS-TIMESTAMP' : timestamp, 'ACCESS-SIGN' : signature, 'Content-Type' : 'application/json' } response = requests.post( base_url + path_url , data = body , headers = headers) print( response.status_code ) print( response.json() ) |
CCXTというライブラリを使うと、もっと簡単に記述できる
( pip install ccxt でインストールできる)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import ccxt from pprint import pprint bitflyer = ccxt.bitflyer() bitflyer.apiKey = '' bitflyer.secret = '' order = bitflyer.create_order( symbol = 'BTC/JPY', # 売買する仮想通貨 type='limit', # 指値 side='buy', # BUY / SELL price='4533119', # 指値(1BTCの金額) 成立しないように低めにしてみた amount='0.001', # 取引単位 params = { "product_code" : "BTC_JPY" }) pprint( order ) |
買い注文が入ったら、注文番号を返してくれるので、試しにccxtからキャンセルしてみる
b”という謎の戻り値が返ってきたけど、ブラウザの管理画面では、ちゃんとキャンセルされてた(買い注文が消えた)
1 2 3 4 5 6 7 8 |
# ここから上は同じ order =bitflyer.cancel_order( symbol = "BTC/JPY", id = '', #キャンセルする注文番号 params = { "product_code" : "BTC_JPY" }) pprint( order ) |
ぜんぜん管理画面からは操作せずに、pythonからのAPI操作しかしてないな…。