見出し画像

仮想通貨bot 勉強記録㉜

~24時間botを稼働させる環境を作る~

◆前回までのあらすじ

図1

バックテストコードがひと段落つき、Spyderの紹介をしました。

◆今回やること

図1

・AWSで24時間botを稼働させる

図2

AWS(Amazon Web Service)っていうのは、その名の通りAmazonが提供しているWebサービスです。
インターネット上のサービスなので、自分のパソコンを閉じていてもbotを稼働させ続けることができます。
有料サービスなんですが、最初の1年間は無料で使うことができます。

では早速登録から始めます。

1.AWSに登録する

図3


画像6

オレンジ色のボタンから登録してください。

登録を進めていくと、最後にサポートプランを選択する画面になります。
ベーシックサポートを選択しましょう。

画像7

2.Cloud9で環境を作成する

図3

①サインイン

登録出来たら、そのままサインインしましょう。

サインインするときはルートユーザーでOKです。

画像9

②サーバーの変更

サインインするとコンソール画面になります。
Bybitのサーバーはシンガポールにあるらしいので、サーバーをシンガポールにしましょう。

※なにか特別な効果があるとかは分からないです。完全に気分。
 デフォルトのオハイオのままでもいいと思います。

画像12

③Cloud9の環境を作成

検索バーにcloud9と入力し、Cloud9を選択します。

画像11

残念ながらここからは全部英語です。。。頑張りましょう。

画像13

早速環境を作成していきます。
Cretate enviromentをクリックします。

画像14

環境の名前と、説明を書きます。適当でいいです。説明は無くても可。
Nextをクリック。

画像15

環境の設定を行います。
Cost-saving settingのところを30minutesからNeverに変更しましょう。

その名の通り節約のための設定です。
(AWSは使用時間で料金が決まるため)
botを24時間稼働させないなら、最初はデフォルトのままにしておきましょう。後からでも変更できます。

Nextをクリック。

画像16

確認画面です。
Create enviromentをクリック。
しばらく待つと、Cloud9環境が作成されます!👏

3.Cloud9を使ってみる

図3

①ファイルをアップロード

Cloud9を開くと、以下の画面になっていると思います。

画像18

左側に現在の作業ディレクトリが表示されています。

ここに.pyファイルを置きます。
Cloud9で作成してもいいし、ローカルの.pyファイルをコピーしてもいいです。
今回はドンチャンブレイクのバックテストコードを使ってみます。

画像20

ローカルからcloud9のbotディレクトリにドラッグすればコピーできます。
コピー出来たら、ファイルをダブルクリックして開きます。

Runボタン or F5で実行してみましょう。

画像21

モジュールが見つからないよ!というエラーが出ました。
新たな環境なので、モジュールをインストールしないといけません。
めんどくせぇ!

②モジュールをインストール

インストールはcloud9のターミナルから行います。
初期状態の場所だと見づらいので、右に持ってきましょう。
ターミナルを掴んで右に移動させると横並びにできます。

ターミナルを消してしまったら、Alt+Tで呼び出せます。

画像22

画像23

このコードの場合は、pybybit / matplotlib / pandasをインストールしないと動かないので、インストールします。

pip install git+https://github.com/MtkN1/pybybit.git
pip install matplotlib
pip install pandas

画像24

めっちゃエラー!!!

これはですね~、pipのバージョンが古くてインストールできないんです。
以下のコマンドでpipのバージョンを表示します。

python -m pip -V

出力結果を確認しましょう。

ec2-user:~/environment $ python -m pip -V
pip 9.0.3 from /usr/lib/python3.7/site-packages (python 3.7)

バージョン9.0.3となってますね。
以下のコマンドでアップデートしてください。

python -m pip install --upgrade --user pip

実行するとアップデートされます。

ec2-user:~/environment $ python -m pip install --upgrade --user pip
Collecting pip
 Downloading https://files.pythonhosted.org/packages/cd/6f/43037c7bcc8bd8ba7c9074256b1a11596daa15555808ec748048c1507f08/pip-21.1.1-py3-none-any.whl (1.5MB)
   100% |████████████████████████████████| 1.6MB 817kB/s 
Installing collected packages: pip
Successfully installed pip-21.1.1

これでpipのバージョンが最新になりました。

もう一度pip installで必要なモジュールをインストールしてみます。

画像25

ばっちりインストールできました。

③ファイルを実行する

モジュールをインストールできたので、もう一度ファイルを実行してみます。
実行するのは勉強記録㉚のコードです。

画像26

無事動きました!

グラフが自動で表示されないのは、解決策が分かりませんでした(無念)
仕方ないので、プロット関数の最後の部分を修正します。

#====================損益曲線をプロット====================
def plot(records,chart):

   #損益グラフ
   plt.subplot(2,1,1)
   plt.plot( records.Date, records.Funds )         # X軸、Y軸の値を指定
   plt.xlabel("Date")                              # X軸のラベル名
   plt.ylabel("Balance")                           # Y軸のラベル名
   plt.xticks(rotation=50)                         # X軸の目盛りを50度回転

   #チャート
   plt.subplot(2,1,2)
   plt.plot( chart.open_time, chart.close_price ) # X軸、Y軸の値を指定
   plt.xlabel("Date")                             # X軸のラベル名
   plt.ylabel("{}".format(symbol))                # Y軸のラベル名
   plt.xticks(rotation=50)                        # X軸の目盛りを50度回転

   # リターン分布の相対度数表を作る
   # plt.subplot(2,1,2)                           # X軸、Y軸の値を指定
   # plt.hist( records.Rate,50,rwidth=0.9)        # ヒストグラムで表示
   # plt.axvline( x=0,linestyle="dashed",label="Return = 0" )
   # plt.axvline( records.Rate.mean(), color="orange", label="AverageReturn" )
   # plt.legend() # 凡例

   #plt.show()からplt.savefig("名前")に変更
   plt.savefig("records")                         #グラフの表示   

これで実行ファイルと同じディレクトリに、グラフが画像ファイルとして保存されます。

画像27

なんとか許容範囲ってことにします。

④稼働時間を設定する

最後に、この環境の稼働時間を設定します。

稼働時間

①歯車マーク
②EC2 Instance
③Stop my enviroment

ここの設定で、cloud9終了後の環境稼働時間を指定できます。
最低30分で、最高はNever = ”終了しない”です。
ここはお好みで設定しましょう。

稼働確認は、適当なコードを実行して、24H後に再確認して動いてればオッケーでいいと思います。

↓1分足の価格を表示するコードです。(親切!)

# -*- coding: utf-8 -*-
"""
Created on Fri May  7 20:43:12 2021

@author: Mamu
"""

import pybybit
from datetime import datetime,timedelta
import time

apis = [
'API',
'シークレット'
]
bybit = pybybit.API(*apis, testnet = True)


def get_price(chart_min):
   get_start = int((datetime.now()-timedelta(minutes=chart_min*5)).timestamp()) # タイムスタンプ変換

   data = bybit.rest.inverse.public_kline_list(
             symbol = "BTCUSD",
             interval= chart_min,
             from_ = get_start
             ).json()["result"]

   return {"open_time" : data[-2]["open_time"],
           "open"      : float(data[-2]["open"]),
           "high"      : float(data[-2]["high"]),
           "low"       : float(data[-2]["low"]),
           "close"     : float(data[-2]["close"]),
           "volume"    : float(data[-2]["volume"])
           }

def print_price( data ):
   print( "時間: " + datetime.fromtimestamp(data["open_time"]).strftime('%Y/%m/%d %H:%M') + " 始値: " + str(data["open"])+ " 高値: " + str(data["high"]) + " 安値: " + str(data["low"]) + " 終値: " + str(data["close"]) )

last_data = get_price( 1 )
print_price( last_data )
while True:
   # 最新のローソク足を取得して表示
   data = get_price( 1 )

   if data["open_time"] > last_data["open_time"]: 
       print_price( data )
       last_data = data

   time.sleep(10)

以上です!

実際に稼働するときはCloud9を使うので、最初からCloud9でコードを作るのもいいかもしれませんな。

今回はここまで!

いいなと思ったら応援しよう!