仮想通貨bot 勉強記録㉜
~24時間botを稼働させる環境を作る~
◆前回までのあらすじ
バックテストコードがひと段落つき、Spyderの紹介をしました。
◆今回やること
・AWSで24時間botを稼働させる
AWS(Amazon Web Service)っていうのは、その名の通りAmazonが提供しているWebサービスです。
インターネット上のサービスなので、自分のパソコンを閉じていてもbotを稼働させ続けることができます。
有料サービスなんですが、最初の1年間は無料で使うことができます。
では早速登録から始めます。
1.AWSに登録する
オレンジ色のボタンから登録してください。
登録を進めていくと、最後にサポートプランを選択する画面になります。
ベーシックサポートを選択しましょう。
2.Cloud9で環境を作成する
①サインイン
登録出来たら、そのままサインインしましょう。
サインインするときはルートユーザーでOKです。
②サーバーの変更
サインインするとコンソール画面になります。
Bybitのサーバーはシンガポールにあるらしいので、サーバーをシンガポールにしましょう。
※なにか特別な効果があるとかは分からないです。完全に気分。
デフォルトのオハイオのままでもいいと思います。
③Cloud9の環境を作成
検索バーにcloud9と入力し、Cloud9を選択します。
残念ながらここからは全部英語です。。。頑張りましょう。
早速環境を作成していきます。
Cretate enviromentをクリックします。
環境の名前と、説明を書きます。適当でいいです。説明は無くても可。
Nextをクリック。
環境の設定を行います。
Cost-saving settingのところを30minutesからNeverに変更しましょう。
その名の通り節約のための設定です。
(AWSは使用時間で料金が決まるため)
botを24時間稼働させないなら、最初はデフォルトのままにしておきましょう。後からでも変更できます。
Nextをクリック。
確認画面です。
Create enviromentをクリック。
しばらく待つと、Cloud9環境が作成されます!👏
3.Cloud9を使ってみる
①ファイルをアップロード
Cloud9を開くと、以下の画面になっていると思います。
左側に現在の作業ディレクトリが表示されています。
ここに.pyファイルを置きます。
Cloud9で作成してもいいし、ローカルの.pyファイルをコピーしてもいいです。
今回はドンチャンブレイクのバックテストコードを使ってみます。
ローカルからcloud9のbotディレクトリにドラッグすればコピーできます。
コピー出来たら、ファイルをダブルクリックして開きます。
Runボタン or F5で実行してみましょう。
モジュールが見つからないよ!というエラーが出ました。
新たな環境なので、モジュールをインストールしないといけません。
めんどくせぇ!
②モジュールをインストール
インストールはcloud9のターミナルから行います。
初期状態の場所だと見づらいので、右に持ってきましょう。
ターミナルを掴んで右に移動させると横並びにできます。
ターミナルを消してしまったら、Alt+Tで呼び出せます。
このコードの場合は、pybybit / matplotlib / pandasをインストールしないと動かないので、インストールします。
pip install git+https://github.com/MtkN1/pybybit.git
pip install matplotlib
pip install pandas
めっちゃエラー!!!
これはですね~、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で必要なモジュールをインストールしてみます。
ばっちりインストールできました。
③ファイルを実行する
モジュールをインストールできたので、もう一度ファイルを実行してみます。
実行するのは勉強記録㉚のコードです。
無事動きました!
グラフが自動で表示されないのは、解決策が分かりませんでした(無念)
仕方ないので、プロット関数の最後の部分を修正します。
#====================損益曲線をプロット====================
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") #グラフの表示
これで実行ファイルと同じディレクトリに、グラフが画像ファイルとして保存されます。
なんとか許容範囲ってことにします。
④稼働時間を設定する
最後に、この環境の稼働時間を設定します。
①歯車マーク
②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でコードを作るのもいいかもしれませんな。
今回はここまで!