こんにちわ、Heywaです。
前回ビットコインの自動積立をするスクリプトを作成し、うまく動いているので、今度はイーサを積立するスクリプトにチャレンジしてみました。
ちょうどCoincheckで積立サービスがアナウンスされたところでタイムリーですが、ビットコインのみが対象のようなので、他の通貨も積み立てたい方は参考にしていただければ嬉しいです。
コード
前回のビットコイン積立のスクリプトのペアを変更しただけです。手抜きですいません。。。
import ccxt import time from pprint import pprint import csv import configparser import datetime import calendar import pandas as pd import numpy import os import json import requests import sys from pysnooper import snoop @snoop() def ccxtAPIobj(): #CCXT を呼び出す関数 ccxtAPIobj = ccxt.bitflyer({ #APIキーをご自分のものに差し替えてください 'apiKey': 'apikey', 'secret': 'secret', }) return ccxtAPIobj def LINENotifysend(message): #LINENotifyで通知を送る関数 url = "https://notify-api.line.me/api/notify" access_token = 'access_token' #発行したAccess Token headers = {'Authorization': 'Bearer ' + access_token} message = message payload = {'message': message} r = requests.post(url, headers=headers, params=payload,) if __name__ == '__main__': #変数定義 ##通貨ペア # pair = "BTC/JPY" # product_code = "BTC_JPY" pair = "ETH/JPY" product_code = "ETH_JPY" ##積立金額 AccumulationJPY = 300 ##口座情報 myaccount = {} #Ticker情報 price = {} print('処理開始') #時間計測 start = time.time() #口座情報を取得 # bitflyerのAPIを実行 balance = ccxtAPIobj().fetch_balance() pprint(balance) #JPY保有量格納 # JPY総額 myaccount['JPYtotal'] = round(balance['JPY']['total'], 0) print("# JPY総額:" + str(myaccount['JPYtotal'])) # JPY拘束中(必要証拠金) myaccount['JPYused'] = round(balance['JPY']['used'], 0) print("# JPY拘束中:" + str(myaccount['JPYused'])) # ETH使用可能 myaccount['JPYfree'] = round(balance['JPY']['free'], 4) print("# JPY使用可能:" + str(myaccount['JPYfree'])) #ETH保有量格納 # ETH総額 myaccount['ETHtotal'] = round(balance['ETH']['total'], 4) print("# ETH総額:" + str(myaccount['ETHtotal'])) # ETH拘束中(必要証拠金) myaccount['ETHused'] = round(balance['ETH']['used'], 4) print("# ETH拘束中:" + str(myaccount['ETHused'])) # ETH使用可能 myaccount['ETHfree'] = round(balance['ETH']['free'], 4) print("# ETH使用可能:" + str(myaccount['ETHfree'])) #利用可能金額が積立金額を下回っていた場合にはメッセージを表示して終了する if myaccount['JPYtotal'] < AccumulationJPY: # print("入金金額が積立金額を下回っているので処理を中止しました。入金してください") # print("# JPY総額:" + str(myaccount['JPYtotal'])) # print("# 積立金額:" + str(AccumulationJPY)) message = "【Bitflyer積立】入金金額が積立金額を下回っているので処理を中止しました。入金してください" + "\n" message = message + "# JPY総額:" + str(myaccount['JPYtotal']) + "\n" message = message + "# 積立金額:" + str(AccumulationJPY) + "\n" print(message) LINENotifysend(message) sys.exit() #現在価格を取得 ##Tickerの取得 print("#Tickerの取得") ticker = ccxtAPIobj().fetch_ticker(pair, params = { "product_code" : product_code }) #pprint(ticker) #Json から要素へアクセス price['Bid'] = ticker['bid'] price['Ask'] = ticker['ask'] price['last'] = ticker['last'] print("Bid=「売る」。Ask=「買う」") print("Bid") print(price['Bid']) print("Ask") print(price['Ask']) print("last") print(price['last']) ################ #設定された積立金額で購入可能な量を算出 buy_lot = AccumulationJPY / price['Bid'] #積立金額で購入不可の場合はメッセージを表示して終了する ##【参考】bitflyerの最小購入数量 ##https://bitflyer.com/ja-jp/faq/4-5 ##Lightning 現物(ETH/JPY)における最小発注数量は 0.01 ETH ##Lightning 現物(BTC/JPY)における最小発注数量は 0.001 BTC ##購入可否判定 ###成り行き注文なので、少し余裕をもたせて0.011ETHで判定する if buy_lot < 0.011: ##メッセージ表示 # print("積立金額で最低購入枚数を購入できないので処理を中止しました。積立金額を修正してください") # print("# ETH価格:" + str(price['Bid'])) # print("# 積立金額:" + str(AccumulationJPY)) message = "【Bitflyer積立】積立金額で最低購入枚数を購入できないので処理を中止しました。積立金額を修正してください" + "\n" message = message + "# ETH価格:" + str(price['Bid']) + "\n" message = message + "# 積立金額:" + str(AccumulationJPY) + "\n" print(message) LINENotifysend(message) sys.exit() #購入可能な場合、成り行き買い注文を入れる print("#成行き買い") buy_lot = round(buy_lot, 3) buymarket = ccxtAPIobj().createMarketBuyOrder (pair , buy_lot,{ "product_code" : product_code }) pprint(buymarket) #注文した数量、価格のメッセージを表示する ##注文後の数量、金額については計算した値を表示する print("積立注文が完了しました") myaccount['JPYdiff'] = myaccount['JPYtotal'] - AccumulationJPY myaccount['ETHtotal2'] = myaccount['ETHtotal'] + buy_lot print("# JPY残額:" + str(myaccount['JPYdiff'])) print("# ETH総額:" + str(myaccount['ETHtotal2'])) message = "【Bitflyer積立】注文が完了しました" + "\n" message = message + "# JPY残額:" + str(myaccount['JPYdiff'])+ "\n" message = message + "# ETH総額:" + str(myaccount['ETHtotal2']) + "\n" LINENotifysend(message) print("処理終了") elapsed_time = time.time() - start print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
使い方
前回のビットコイン積立と同じですので、前回記事を御覧ください。
(ご利用は自己責任でお願いします)
Bitflyerでビットコインを自動積立できるBot作成
こんにちは。Heywaです。 2009年にビットコインが誕生して以来、暗号通貨の価値は10倍以上に跳ね上がりました。仮想通貨の概念は、取引をより安全に、透明に、匿名で行うために導入されました。今日の投資の世界で最大のトレンドであることは間違
後記
ビットフライヤーはBTCとETHしかAPIで現物取引できないので、この取引所で自動積立できるのは今のところ二種のみになりそうです。
ビットバンクだとネムやリップルも購入できそうなので、機会があれば試してみたいと思います。
あとは、「XX日間の安値を更新したら積み立てる」などのロジックを入れてみると積立結果がどうなるか、シミュレーションしてみてもいいかなと考えています。
記事を読んでプログラミングに興味を持った方は、ぜひプログラミングを学んで貰えれば幸いです。きっとあなたの人生に役に立つはずです。
以下のような本の他にも、一度挫折した人向けの質問できるサービスやスクールも充実してきていますので、非常に学びやすい時代になってきていると思います。
コメント