GMOコインのPrivate APIが通らないと思ったらPCの時刻がずれてました

昨日のbitcoinの暴落はすごかったですね。。一時マイナス40万くらいの勢いでしたね。。その混乱もあり各取引所の差額も大きく開いていました。私は安くなりがちなGMOと高くなりがちなbitbankでゼロ送金時間アービトラージを行っているのですが、普段でも2千円くらいなのに常時2~3万、最大で5万円近くの差額が開いていました。おかげで一部出金待ちJPYがあり資金を十分に投入できなかったにも関わらず1日で10万円の利益を出すことができました!下の累計損益グラフが大変なことになってます。

さて本題に入りますが、このブログでご紹介している通りPythonでbitcoinのアービトラージ自動売買を行っているのですが、昨日あたりからGMOコインでPrivate APIをたたくと下のようなエラーが出るようになってしまいました。
[{'message_code’: 'ERR-5008’, 'message_string’: 'Timestamp for this request is too late.’}]
APIドキュメントを確認したところ、「リクエストヘッダーに設定されているAPI-TIMESTAMPが公開APIのシステム時刻より遅い場合に返ってきます」とのことだったのと、始めのうちは出たり出なかったりだったのでネットワークが込み合っているとたまにそうなるのかなぁと思ってリトライ処理を入れていました。
ところが今朝になると何度リトライしてもダメで同じエラーが返ってきました。
GMOコインのサーバーがおかしくなった?とか疑い始めたのですが、とりあえずためしにタイムスタンプを強制的にいじってみました。
timestamp = '{0}000’.format(int(time.mktime(datetime.now().timetuple())))
としていたのを、
timestamp = '{0}000’.format(1000+int(time.mktime(datetime.now().timetuple())))
にしてみたところ、
[{'message_code’: 'ERR-5009’, 'message_string’: 'Timestamp for this request is too fast.’}]
今度は逆に早いと怒られてしまいました。それならばと
timestamp = '{0}000’.format(10+int(time.mktime(datetime.now().timetuple())))
としてみたところ今度は正常に動きました。
やっぱりGMOのサーバーがずれてんじゃないの?と思いつつもPCの時刻とスマホの時刻を見比べてみると、、PCの時刻が10秒ほど遅れてました。。
ネットワークにつながってるから常に正確と思っていたのですがそうではないようです。Windowsの設定画面で下の通り「今すぐ同期」を押してこの問題は解消されました。


Pythonを使ったbitcoinアービトラージの(ほぼ)自動売買プログラムのご紹介はこちら↓
https://tsurezure.info/arbitrage/index.php/2020/03/12/post-455/