Coincheckつみたての評価損益をメールで自動配信

スポンサーリンク

Coincheckつみたての評価損益を確認するのに毎回ブラウザでログインしてワンタイムパスワードを入力するの面倒くさいですよね。

そこでPythonでCoincheckつみたての時価総額、評価損益、積立総額を自動でメール配信してくれるプログラムを作りました。

最後にオチもあるのでお楽しみください!

目標

Coincheckつみたて時価総額評価損益積立総額自動でメール配信したい!

プログラム内容

  • 実際のCoincheckのアカウントにログインして時価総額、評価損益、積立総額を取得するプログラムではありません。
    →毎日15時の仮想通貨の価格のみを取得して積み立てた場合の時価総額、評価損益、積立総額を計算します。時刻はCoincheckつみたて取引説明書を参考にしています。
  • 初期値として、すでに所持している各通貨量とすでに積み立てた円の額を入力します。
  • 自分のメールから自分のメールに送信することで自動配信を実現します。

ソースコード

最近オブジェクト指向型で書けるようになって、どっぷりオブジェクト指向型にハマっています笑。

Coincheckの販売価格を取得する部分は下の記事を参考にしました。ありがとうございました。

Pythonでcoincheck APIを使ってみる。 ~自動取引プログラム作成に向けて~ - Qiita
更新Coincheckクラスのdef get()を更新しました。githubに実行できるコードを置いてあります。coincheck API仮想通貨が流行っていたので、自動取引の足掛かりとして…

以下ソースコードです。各自アレンジしてお使いください。

import requests
import json
import time
import calendar
import datetime


class profit_mail:

    def __init__(self,coins,reserve_amount):
        self.coins=coins
        self.reserve_amount=reserve_amount
        self.position={}
        self.position_yen={}
        self.minute=0
        self.hour=0

        self.get_initial_data()
        # self.get_price()
        # self.calc()

    def get_initial_data(self):
        key_list=list(self.coins.keys())
        self.position={}
        for key in key_list:
            value=input('今の'+key+'の保有量は?')
            self.position[key]=float(value)
        self.sum_reserve_amount=int(input('これまでの合計積立額(円)は?'))

    def get_price(self):
        URL = 'https://coincheck.com/api/rate/'
        self.price_dict={}
        for key, item in self.coins.items():
            price = requests.get(URL+item).json()
            #JSON形式をパースする
            self.price_dict[key]=float(price['rate'])
        print(self.price_dict)

    def calc(self):
        self.sum_market_value=0
        for key in list(self.position.keys()):
            self.position_yen[key]=self.position[key]*self.price_dict[key]
            self.sum_market_value=self.sum_market_value+self.position_yen[key]
        self.valuation_gl=self.sum_market_value-self.sum_reserve_amount
        print(self.position_yen)
        print('時価総額:',self.sum_market_value)
        print('評価損益:',self.valuation_gl)

    def get_daytime(self):
        dt=datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9)))
        self.year=dt.year
        self.month=dt.month
        self.hour=dt.hour
        self.minute=dt.minute
        #print(self.hour)
    
    def reserve_action(self):
        day=calendar.monthrange(self.year,self.month)[1]
        reserve_amount_oneday=float(self.reserve_amount/day)
        print(reserve_amount_oneday)
        self.get_price()
        for key in list(self.position.keys()):
            self.position[key]=self.position[key]+reserve_amount_oneday/self.price_dict[key]
        self.sum_reserve_amount+=reserve_amount_oneday*3
        time.sleep(60)

    def repeat(self):
        self.get_daytime()
        self.reserve_action()
        self.calc()
        self.send_mail()

    def send_mail(self):
        # -*- coding:utf-8 -*-
        import smtplib, ssl
        from email.mime.text import MIMEText
        from datetime import datetime

        # アカウント情報
        gmail_account  = "xxxxxxxx@xxxxx.com" # Gmailアカウントアドレス(適宜書き換える)
        gmail_password = "xxxxxxxx"      # パスワード(適宜書き換える)

        # context作成
        context = ssl.create_default_context()

        # Gmailにログイン
        server = smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context)
        server.login(gmail_account, gmail_password)

        # 本文(htmlなので改行は<br>を使う)
        body_str = "時価総額:"+ "{:,d}".format(int(self.sum_market_value)) +"円"+ "<br>"
        body_str += "評価損益:" +"{:,d}".format(int(self.valuation_gl))+"円" +"<br>"
        body_str += "積立総額:" +"{:,d}".format(int(self.sum_reserve_amount))+"円" +"<br><br>"
        body_str += datetime.now().strftime("%Y/%m/%d %H:%M:%S") # 現在時刻も追加

        # メールデータ(MIME)作成
        msg = MIMEText(body_str, "html")
        msg["Subject"] = "Coincheckつみたて"     # メールタイトル
        msg["To"]      = "xxxxxxxx@xxxxx.com" # 送信先メールアドレス(適宜書き換える)
        msg["From"]    = gmail_account       # 送信元メールアドレス

        # メール送信
        server.send_message(msg)        
    
profit_mail=profit_mail(
    coins = {
        'BTC': 'btc_jpy',
        'ETH': 'eth_jpy',
        'XRP': 'xrp_jpy'},
    reserve_amount=20000 )#各通通貨の毎月の積立額
while True:
    #if profit_mail.minute==0:
    if profit_mail.hour==15 and profit_mail.minute==0:
        profit_mail.repeat()
        wait=int(abs(profit_mail.hour*60+profit_mail.minute-15*60)*60*0.9)
        time.sleep(wait)
    profit_mail.get_daytime()

エラーが起きたら

エラーが起きたらおそらくGmailのセキュリティ設定が高いことが原因かと思われます。下の記事に従って設定の変更をしてください。このサイトのおかげでメール配信の自動化をすることが出来ました。ありがとうございます。

せっかくプログラムを作ったのに

Pythonでせっかくプログラムを作ったのに、アプリで簡単に確認する方法がありました。

手順は下の通りです。

  1. Coincheckアプリをインストールしログインまで完了
  2. 画面下のバーで「アカウント」をタップ
  3. 「Coincheckつみたて」というバーがあるのでそれをタップ
  4. これでワンタイムパスワードとか面倒なことせずに時価総額を確認することが出来る

プラグラムを作った後に気づきました泣。

まとめ

せっかくプラグラムを作りましたが、私は使う機会は無さそうです笑。

せっかく作ったので備忘録として載せておきます。

コメント

タイトルとURLをコピーしました