プログラム言語Pythonを使って、BTCが急上昇、もしくは急降下したら、メールで通知がくるツールを作ってみました。
仮想通貨は、特にBTCは定期的に仕手が頻繁に行われるし
BTCが上がると、他も上がる。BTCが下がると、他の通貨も下がる。なので、チェックしたかったんですよね。
今回の目的は仕手対策
別通貨だけど、こういう暴落、暴騰シーンは、仮想通貨あるあるですよね。
数時間後(最悪、翌朝)に、なんじゃこりゃって事が日常茶飯事。
チャートを、ずーっと見るのもなーと思ったので、Pythonで作ってみました。
やりたいことは下記のとおり
先日作成した、BTCの価格を毎秒取得するプログラムがベースになってます。
[st-card id=2466]
ソースコード
一応ソースコード。バグは、たぶん無いと思う。。
★の変数の箇所は各自で設定して使ってくださいませ。
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# ---------------------------------- # BTC急上昇・急降下お知らせツール # ---------------------------------- # 必要パッケージ # pip install python-dateutil # pip install email # ---------------------------------- import sys import requests import time import dateutil.parser import smtplib from email.mime.text import MIMEText from email.utils import formatdate from email.header import Header API ="https://api.bitflyer.jp/v1/ticker" #暴騰・暴落の価格差(円) chk_yen = 5000 #スリープ時間(秒) sleep_time = 60 #★送信元メール MY_ADDRESS = '' #★送信元メールパスワード MY_PASSWORD = '' #★送信元メールSMTPサーバー SMTP_SERVER = '' #★送信先アドレス TO_ADDRESS = '' #メール件名 subject_header = "【Bitcoin価格チェック】" # #関数:メール送信 # def org_send_mail(from_address,to_address,subject,body): msg = MIMEText(body.encode(charset), "plain", charset) msg["Subject"] = Header(subject,charset) msg["From"] = MY_ADDRESS msg["To"] = TO_ADDRESS msg["Date"] = formatdate(localtime=True) smtp = smtplib.SMTP(SMTP_SERVER,587) smtp.ehlo() smtp.starttls() smtp.login(MY_ADDRESS, MY_PASSWORD) smtp.sendmail(from_address,to_address,msg.as_string()) smtp.quit() # #メイン # if __name__ == '__main__': i=0 bid_btc=[] charset = "ISO-2022-JP" #ループ while True: updown="" #APIリクエスト res = requests.get(API) #JSON取得 json = res.json() #リストに追加 bid_btc.append(int(json["best_bid"])) #タイムスタンプ tstr = json["timestamp"] #JSON形式では直接パース出来ないのでdeteutil使用 tdatetime = dateutil.parser.parse(tstr) tdatetime_str = tdatetime.strftime('%Y/%m/%d %H:%M:%S') if i != 0: #価格差取得 kakakusa = int(bid_btc[i]) - int(bid_btc[i-1]) if kakakusa > 0 and kakakusa >= chk_yen: updown = " ↑+"+ str(kakakusa) + "円" #メールタイトル subject = subject_header+"急上昇通知 "+tdatetime_str message_text = tdatetime_str+"\n\nBid:"+ "{:,d}".format(bid_btc[i]) + "円\n" + str(sleep_time) + "秒前の価格と比較して、" + str(kakakusa) + "円上昇しています。\n\n▼coinmarketcapでBTCチャート確認\nhttps://coinmarketcap.com/currencies/bitcoin/#charts\n\n▼bitFlyerへ\nhttps://bitflyer.jp/ja/\n\n以上" #メール本文 body = message_text #メール送信 org_send_mail(MY_ADDRESS,TO_ADDRESS,subject,message_text) elif kakakusa < 0 and kakakusa <= chk_yen*-1: updown = " ↓" + str(kakakusa) + "円" #メールタイトル subject = subject_header+"急降下通知 "+tdatetime_str message_text = tdatetime_str+"\n\nBid:"+ "{:,d}".format(bid_btc[i]) + "円\n" + str(sleep_time) + "秒前の価格と比較して、" + str(kakakusa) + "円下落しています。\n\n▼coinmarketcapでBTCチャート確認\nhttps://coinmarketcap.com/currencies/bitcoin/#charts\n\n▼bitFlyerへ\nhttps://bitflyer.jp/ja/\n\n以上" #メール本文 body = message_text #メール送信 org_send_mail(MY_ADDRESS,TO_ADDRESS,subject,message_text) else: updown = "" kakakusa = 0 pass else: updown = ""; pass print("[" + tdatetime_str + "] BTC_JP Bid: " + "{:,d}".format(bid_btc[i]) + "円" + updown) #スリープ time.sleep(int(sleep_time)) i=i+1 |
60秒毎にチェックしていますが、これを毎秒にしたい場合は
sleep_time = 1
5000円の値動きで通知するようにしていますが、下記の変数を変えれば変更可能。
chk_yen = 5000
あんまり小さい金額にすると、スパムメールのように通知が届くのでおすすめしません。
実行結果
5000円の値動きは、そうそうないので、動作確認は500円で実施。
設定値よりも上回った場合は↑のサインと金額差、下回ったときは↓のサインと金額差を表示するようにしました。
上昇の場合、以下のようなメールが届く
下降の場合、以下のメールが届く
2000円近くの値動きは、結構頻繁にありますね。
とりあえず、動いてよかった。
今後の予定
[st-kaiwa1]他の取引所のAPIと合わせて自動アービトラージのツール作成に着手しようかな。今回のアルゴリズムと合わせれば、取引完了したらメールで通知というのもできますね。[/st-kaiwa1]
ご質問はコメント欄からお願いします