python

ZAIFのAPIで仮想通貨の積立スクリプトを作る(python)

pythonのお勉強の一環として、ちょこちょこ仮想通貨の自動取引の実装にトライしております。

今回はzaifでBTC/BCH/ETH/MONA/XEM(NEM)を500円分買い注文するプログラムを組んでみます。
作ったスクリプトとcronやsystemdのタイマーと組み合わせることで定期積立を実現できます。

はじめに

zaifを選択する理由は、国内の取引所の中ではAPIで操作できる通貨種類が多いからです。

現在日本円で手に入る主要な仮想通貨としては、

  • Bitcoin(BTC)
  • Bitcoin Cash(BCH)
  • Ethereum(ETH)
  • Ethereum classic(ETC)
  • XEM(NEM)
  • Monacoin(MONA)
  • Ripple(XRP)
  • Lisk(LSK)

このあたりでしょうか。

Zaifは大体カバーできてますね。

かつ販売ではなく取引ができるのでAPIのpairに指定できるというわけです。
(BitFlyerとCoinCheckはBitcoinしかpairに設定できないはず)

また、zaifには積立のサービスがありますが少額だと手数料の割合がそこそこ高いので自分で実装するとお得です。ただしセキュリティ面については自己責任で。

zaif.jp

実装方針

売りの実装は難しい(利益や損切りを考えると面倒)ので、まずは買いの実装だけやってみます。
バグって誤発注するのが怖いので予算は少額に設定しておきます。

  • 定期的に一定額(500円で買える分だけ)を購入する(積立)
  • 指値はpythonスクリプトを実行した時点の最終取引額
  • 最小注文単位の金額が500円を超える場合は注文しない
  • 約定判定はなし

実装にあたっては下記のAPIを使用します。

currency_pairs — Zaif api document v1.1.1 ドキュメント
last_price — Zaif api document v1.1.1 ドキュメント
trade — Zaif api document v1.1.1 ドキュメント

APIを利用するには事前にアカウント設定から取引用のキーを取得しておく必要があります。セキュリティ確保のため送信元IPアドレスの制限もしておくと良いでしょう。

ソースコード

zaif_fund.py

実行結果

応答のremainsが0.0以外のものは、板に注文が残っていて、0.0の場合は既に取引が完了しています。

約定の判定処理はありませんが、上げトレンドが続くようなことでもない限り大体翌日ぐらいまでには約定する気がします。

今のところ2ヶ月ほど週1回の頻度で実行してますが、注文が未約定のまま残ったことは無いです。

仮想通貨を取引所に置きっぱなしが怖い人は送金するAPIの組み合わせることで別walletへの退避も自動で出来ますね。