見出し画像

定期的に取引所のビットコイン残高をチェックし、BTC受取があったら売却するプログラム

今回のプログラムはbitcoin関連です。プログラムの内容はQuoinexという取引所であなた宛にBTC送金があった際に、自動的に売却を行うプログラムです。

なぜこのようなプログラムが必要なのでしょうか。それは、例えばもしあなたがBTCで買い物ができるECサイトを運営していたり、友人などからBTCを頻繁に受け取る機会のある方だれば、すぐに売却して現金化をしないと損してしまう可能性があるからです(もちろん得をするケースもあると思いますが)。この自動化プログラムを起動しておけば、BTCを受け取った後にその都度取引所にログインして手動で売却を行う必要がありません。

今回は取引所としてQuoinexを使います。Quoinexは現物取引の手数料がなく、またサーバーも安定していますのでオススメです。


早速ですが、今回もまずは実行結果をご紹介します。

実行結果

こんな感じで10秒おきに残高のチェックを行い、残高を発見し次第成行オーダーにより売却を行っています。


プログラム概要

- 設定したインターバルでQuoinexの現物BTC残高をチェックし、残高がある場合

- 2重にオーダーを出さないように、約定したかどうかを確認してから次のインターバルでチェックを行います

- 約定したとき/予期せぬエラーが起きた場合に設定したSlackへ通知を行います

- ソースコードはnodejsを使用して、TypeScriptで記述しています


セットアップ手順

- Nodejs: 前回の記事同様にnodejsをインストールしてください。バージョンはv8以降推奨です。

- Quoinex API: プログラム実行のためにQuoinexのAPI keyとsecretが必要です。こちらの公式のガイドがわかりやすいですので、ご参照ください。

- Slack API: 必須ではないですが、slackの設定を行うと通知できます。あなたのSlack環境でwebhook urlを取得してください。こちらの記事がわかりやすいです。


設定ファイル

{
  "intervalSec": 10,
  "quoine": {
    "key": "xxxxx",
    "secret": "xxxxx"
  },
  "logging": {
    "slack": {
      "enabled": false,
      "url": "xxxxx",
      "channel": "#xxxxx",
      "username": "BTC bot"
    }
  },
  "log4js": {
    "appenders": {
      "default": {
        "type": "dateFile",
        "filename": "logs/system.log",
        "pattern": "-yyyy-MM-dd"
      },
      "console": {
        "type": "console"
      }
    },
    "categories": {
      "default": { "appenders": ["default", "console"], "level": "info" }
    }
  }
}

- intervalSec: 定期的にチェックを行う秒間隔です。デフォルトは10秒です。

- quoine: Quoinexの設定画面からAPIのkey/secretを設定してください

- slack: Incoming Webhookの設定画面から取得したurlと、あなたが通知を行いたいchannel (#generalなど)を指定してください

- log4js: logの設定ですが、特に変更しなくて良いです。興味がある方はlog4jsのドキュメントをご参照ください。


ソースコードの一部

async function main(): Promise<void> {
  let notifyRetryCount = 0
  while (true) {
    try {
      logger.info(`checking ...`)
      await clearPositions()
      await delay(intervalSec * 1000)
      notifyRetryCount = 0
    } catch (ex) {
      notifyRetryCount++
      if (notifyRetryCount > 10) {
        logger.info(ex.message)
        notifySlack(ex.message)
      }
      await delay(intervalSec * 1000)
    }
  }
}

上記がメインのループコードです。configで指定した秒数分待ってもしBTCが存在していたら売却の処理を実行します。またエラーハンドリングも適宜行っており、この例では10回以上BTC残高の取得に失敗した場合はSlackにエラー通知を送るという実装になっています。

APIを使用した売買の具体的に処理はclearPositions()というメソッドの中で行っていますのでご興味ある方はご購入していただいてからご確認してください。


ご購入いただいたソースコードの配布形式

今回は少しソースコードのボリュームが前回のスクレイピングのものよりも多いので、プロジェクトフォルダをそのままダウンロードできるようにしています。zipファイルをダウンロードして展開して、手順通りに実行してみてください。

ec2などのクラウド環境で24時間動き続けるような設定をするのがオススメです。そちらのガイドに関してもご購入いただいた方向けに記載しています。

ここから先は

610字

¥ 3,000

期間限定!PayPayで支払うと抽選でお得

この記事が気に入ったらチップで応援してみませんか?