仮想通貨の自動売買に興味をもったので

# 概要
仮想通貨（今回はビットコイン：BTC）の自動売買をしてみたいなぁ。と、ふと思いまして・・・・
（「儲けてやるぞ！」という意思はなく、単なる興味で手を付けた記録にございまする。）

いろいろ調べた結果、GMOコインでラスパイを使った方法をチョイスしてみました。

# きっかけ（暇なら読んでもいいよ）
Amazonの書籍を探すのが結構好きで、いろいろなキーワードで技術書などを探しては購入してます。
今回、下記の書籍（Kindle）を見つけたのがきっかけです。

■Kindle版「Python と Raspberry Pi でつくるビットコイン自動取引システム」
https://kurima.hatenablog.com/entry/2021/06/07/205703

https://www.amazon.co.jp/exec/obidos/ASIN/B096PWK3K1/hiyoside-22/

ん～、24時間稼働させても大した金額がかからないラズパイに仮想通貨（BTC）の自動売買をさせてしまおう。というやつですね。
結論からすると、「儲かってないぞ・・・」というところで終わってますが、、、、

おそらくは、書籍に記載されているものは、すべてブログで書いてあるとは思うのと、勝手に有料なKindle書籍の中身を引用しまくるのはよろしくないので、中途半端ですが備忘録で残しておきます。

# 必要なもの
* Python開発環境（Python3）
* GMOコイン
* Raspberry Pi
* なけなしのお金

# やってみる
## STEP 1
まずは、ラズパイ側ですね。
32GBのmicroSDが転がっていたので、Raspberry Pi OSをインストールします。

■Raspberry Pi OS
https://www.raspberrypi.com/software/

基本的に、24H稼働させるけど、GUIなんて要らないので「Raspberry Pi OS Lite」を選択します。
![rasp001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/fa883a89-5374-1e1c-c89f-e81ed1757ee0.png)
![rasp002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/f0478c06-5428-609f-b832-9c7f09393875.png)

あとは、microSDにインストールしてラスパイに挿入して電源を入れればOK。

## STEP 2
続いて、ラズパイの基本的な更新をします。

```
$> sudo apt-get update
$> sudo apt-get upgrade -y
$> sudo apt-get dist-upgrade
$> sudo rpi-update
$> sudo reboot
```

そして、パスワードを変更しておきます。
（なんせ、初期状態だと必ずidが「pi」で、passwordが「raspberry」ですから・・・）

## STEP 3
あとは、本に従って・・・・

Blogだと、順にこんな感じでしたね。
■Pythonで株価アラートをつくる(1)
https://kurima.hatenablog.com/entry/2020/05/10/220219
■Pythonで株価アラートをつくる(2)
https://kurima.hatenablog.com/entry/2020/05/12/223834
■Pythonで株価アラートをつくる(3)
https://kurima.hatenablog.com/entry/2020/05/16/195150
■Pythonで株価アラートをつくる(4)
https://kurima.hatenablog.com/entry/2020/05/22/213227
■Pythonでビットコインの価格を取得する(1)
https://kurima.hatenablog.com/entry/2020/05/24/220957
■Pythonでビットコインの価格を取得する(2)
https://kurima.hatenablog.com/entry/2020/05/30/173011
■Pythonでビットコインの価格をグラフ化する
https://kurima.hatenablog.com/entry/2020/06/07/160604
■Pythonでビットコインの自動取引をシミュレーションする(1)
https://kurima.hatenablog.com/entry/2020/06/27/080427
■Pythonでビットコインの自動取引をシミュレーションする(2)
https://kurima.hatenablog.com/entry/2020/07/18/155747
■Pythonでビットコインの自動取引をする
https://kurima.hatenablog.com/entry/2020/07/25/140955

結構、サクサクと読み進められますが、完成してもウハウハになれるような記述はありません。
むしろ、シミュレーションで数日で200万の資金が170万になることが書かれてますｗ

# 書籍で進めていくとハマる箇所の補足
## mongoDBが入らない（ラズパイ）
作者のBlogが2020年なので、しょうがないのですが、2021/11時点でRaspberry Pi OSはbullseye (Debian 11)になっています。
そうすると、Python3は、3.7→3.9になっていたりするのは、そんなに問題ないのですが、mongoDBをインストールしようとすると
「mongoDBは、パッケージに含まれてないよ！」とエラーになります。

これ、覚えている人もいるはずですが、2018年にライセンス問題となり、2019年にいろんなところでパッケージから消されたんですよ。

■MongoDBがそのコードのオープンソースライセンスを改定、オープンソースの“食い逃げ”に むかつく
https://jp.techcrunch.com/2018/10/17/2018-10-16-mongodb-switches-up-its-open-source-license/

どうやら、この影響で、Raspberry Pi OS（bullseye）からもmongoDBが消えてしまっている。

そこで、下記を参考にbullseyeにもmongoDBを入れることにする。

```
pi@raspberrypi:~ $ sudo nano /etc/apt/sources.list
```

現在は、bullseyeのパッケージ取得先しかない（下記）

```sources.list
deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
```

ここに、1つ前のbusterの取得先も追記してあげる。

```sources.list
deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi　←コレ
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
```

そうしたら、下記のように普通にインストールができる。

```
$> sudo apt update
$> sudo apt-get install mongodb-server
```

## GMAIL送信でエラーになる
「2.1.3 メール通知」でmail_sender.pyのsend_mail()で記載通りにやるとエラーになる。
どうもMIMETextで変換していることが原因のようだったので、下記に書き換えた。

```mail_sender/py
    def send_mail(self, subject, body):
        msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s" %
                   (self._gmail_user, self._to_address, subject, body))　←ここ
        
        smtpobj = smtplib.SMTP_SSL(
            'smtp.gmail.com', 465, timeout=10)
        smtpobj.login(self._gmail_user, self._gmail_password)
        result = smtpobj.sendmail(self._gmail_user, self._to_address, msg)　←ここ
        print(result)
        smtpobj.close()
```

## 他
bitcoin-trader/trader.py内
　act関数のpt_thとsl_thへの代入の箇所の末尾に謎の「）」がある