APScheduler
目次
はじめに
Poloniexからチャートデータを取ってきて明日のコイン価格を予想することができ、またAPIを使って成行トレードもできるようになったので、後はそれらをまとめて実行するスクリプトをスケジュラーに登録すれば自動トレードbotが出来上がります。
はじめはLinuxのcronに登録しようと思いましたが、Poloniexのサーバーと時差があるためタイムゾーンが指定できるAPSchedulerを使うことにしました。
APSchedulerは普通にpipでインストールできます。
pip install -U apscheduler
Poloniexサーバー時間
Poloniexサーバーの所在地は日本との時差16時間のロサンゼルスですが、サーバー時間はUTC(協定世界時。日本との時差9時間)に設定されているみたいです。
ずっとこの時差のズレを不思議に思っていましたが、Poloniexサイトの下の方にUTCとしっかり書いてありました。
ちなみに会社の所在地はデラウェア州のウィルミントンなんですね。
使用例
Poloniexのサーバーに毎日決まった時間にアクセスして、自分の資産データをcsvファイルに保存するスクリプトを書いてみました。
if __name__ == "__main__":
以下がジョブをスケジュールする記述です。
if __name__ == "__main__": sc = BlockingScheduler(timezone="UTC") sc.add_job(savePoloniexBalanceToCsv, "cron", hour=0, minute=1) sc.start()
毎日UTC時間の00:01(日本時間の09:01)に関数savePoloniexBalanceToCsv
を実行します。
savePoloniexBalanceToCsv
はPoloniexの資産情報をBTCとUSDで取得してPoloniexBalance.csv
に保存する関数です。
上の例では、savePoloniexBalanceToCsv
だけをスケジュールに登録していますが、sc.add_job
を再度呼ぶことで複数のジョブを登録することができます。
BlockingScheduler
を使うと複数のジョブ実行が重なった場合、一つのジョブを実行しているときは、他のジョブは実行されず待ち状態になります。
Linuxでバックグラウンド実行
上のスクリプトをtestAPScheduler.py
という名前で保存して、nohup
を使って実行すると、シェル端末を落としてもバックグラウンドで実行され続けます。
nohup python testAPScheduler.py > out.log 2> err.log &
一旦シェル端末を落としてしまうとps
コマンドだけではプロセスが見えなくなってしまいます。プロセスをkillする場合は、ps
コマンドにauxw
オプションを付けてpythonをgrepしてやるとプロセスIDが確認できます。
ps auxw | grep python