Pythonと機械学習

Pythonも機械学習も初心者ですが、頑張ってこのブログで勉強してこうと思います。

APScheduler

目次

はじめに

Poloniexからチャートデータを取ってきて明日のコイン価格を予想することができ、またAPIを使って成行トレードもできるようになったので、後はそれらをまとめて実行するスクリプトをスケジュラーに登録すれば自動トレードbotが出来上がります。

はじめはLinuxのcronに登録しようと思いましたが、Poloniexのサーバーと時差があるためタイムゾーンが指定できるAPSchedulerを使うことにしました。

APSchedulerは普通にpipでインストールできます。

pip install -U apscheduler

Poloniexサーバー時間

Poloniexサーバーの所在地は日本との時差16時間のロサンゼルスですが、サーバー時間はUTC(協定世界時。日本との時差9時間)に設定されているみたいです。

ずっとこの時差のズレを不思議に思っていましたが、Poloniexサイトの下の方にUTCとしっかり書いてありました。
ちなみに会社の所在地はデラウェア州のウィルミントンなんですね。

f:id:darden:20161105164006p:plain

使用例

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オプションを付けてpythongrepしてやるとプロセスIDが確認できます。

ps auxw | grep python