Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / ライフハック / ビットコインでシステムトレード入門(bitFlyerのAPI編)

2018年6月4日 By KD コメントを書く

ビットコインでシステムトレード入門(bitFlyerのAPI編)

ビットコインでシステムトレード入門(bitFlyerのAPI編)

ビットコインを取引所で購入し、トレードしてみたり、買い物してみたりした後、次に興味を持つことはシステムトレードでしょう。今回はbitFlyerのAPIを使ってシステムトレードを行う方法を紹介します。

見出し

  • 1 はじめに
  • 2 bitFlyerのAPIを使ったシステムトレード
    • 2.1 前提条件
    • 2.2 APIキーの取得
    • 2.3 プロジェクトの準備
    • 2.4 API認証用の関数の実装
    • 2.5 ビットコインを売買するスクリプトの実装
    • 2.6 ビットコインの売買をキャンセルするスクリプトの実装
    • 2.7 動作確認する
  • 3 最後に
    • 3.1 関連記事

はじめに

私のブログに遊びに来ている人にとってはご存知だと思いますが、このブログにはビットコインによる寄付の欄がサイドバーに設置してあります。ビットコインを持っていなかった人でも好奇心のある人なら、すぐにビットコインを購入したことでしょう。

ビットコインを購入してトレードしてみたり買い物で使ってみたりすると、次にシステムトレードに興味を持つのが普通です。ほとんどの取引所はトレードをシステムから行うためのAPIを公開していますので、それを利用することでオリジナルのトレードのシステムを簡単に構築できます。

今回はbitFlyerのAPIを使ってビットコインの売買をする簡単なスクリプトをNodeJSで実装する方法を紹介します。

bitFlyerのAPIを使ったシステムトレード

前提条件

以下を事前に準備してください。

  • bitFlyerのアカウント(本人確認済)を持っていること
  • bitFlyerに入金済であること
  • NodeJSがインストールされていること

もし今回初めてアカウントを作った場合は、先に取引所で売買をすることをおすすめします。そうしないと、パラメーターの意味が全く理解できないはずです。

APIキーの取得

まずはAPIキーをbitFlyer Lightningのサイトから発行しましょう。bitFlyerは通常ユーザ用のページとデベロッパー用のページを分けており、APIはデベロッパー用のbitFlyer Lightningのページから発行できます。アカウントは同じです。

ログインしたら左のバツ印から、「API」を選択します。

Bitflyer 1

次に「新しいAPIキーを追加」を選択します。

Bitflyer 2

ラベル名は何でも良いのですが今回は「my-trade」とします。

Bitflyer 3

権限設定ですが、APIキーは漏洩した場合に被害に合う可能性があるので、使うAPIのみに絞るのが懸命です。今回は「トレード」と「資産」を選択し、「OK」をクリックします。

Bitflyer 4

これでAPIキーが追加されました。

Bitflyer 5

この「API Key」と「API Secret」をプログラムで利用します。

プロジェクトの準備

それではプロジェクトのファイルとパッケージを準備しましょう。

$ mkdir my-trade
$ cd my-trade
$ yarn init -y
$ yarn add axios crypto
$ touch utils.js
$ touch order.js
$ touch cancel.js

API認証用の関数の実装

APIにはパブリックなAPIとプライベートなAPIがあります。APIキーが必要なのはプライベートなAPIです。bitFlyerのAPI認証の仕組みはここに書いてあります。

「utils.js」のソースコードは以下です。

const crypto = require('crypto');

function generateAccessHeaders(key, secret, method, path, body) {
  const timestamp = Date.now().toString();
  const bodyStr = body ? JSON.stringify(body) : '';
  const text = timestamp + method + path + bodyStr;
  const sign = crypto.createHmac('sha256', secret).update(text).digest('hex');

  return {
    'ACCESS-KEY': key,
    'ACCESS-TIMESTAMP': timestamp,
    'ACCESS-SIGN': sign
  };
}

module.exports = { generateAccessHeaders };

だいたい最初に実装する時につまずくのがAPI認証だと思いますが、気をつける点はsignを作成する材料のボディには、GETのプライベートAPIの場合は空を設定し、POSTのプライベートAPIの場合はドキュメントの通りのJSON形式を設定するところです。

ビットコインを売買するスクリプトの実装

メインの売買スクリプトを作りましょう。今回はパラメーターを引数で渡すのではなく、シンプルにソースコード内に記載する形にします。

「order.js」のソースコードは以下です。

const orderKind = 'buy'; // 'buy' or 'sell'
const orderType = 'limit'; // 'limit' or 'market
const price = 816525;
const amount = 0.001;

const API_KEY = '{your-api-key}';
const API_SECRET = '{your-api-secret}';

const axios = require('axios');

const BASE_URL = 'https://api.bitflyer.jp';
const RESOURCE_PATH = '/v1/me/sendchildorder';

const { generateAccessHeaders } = require('./utils');

let side;
if (orderKind === 'buy') {
  side = 'BUY';
} else {
  side = 'SELL';
}
let childOrderType;
if (orderType === 'market') {
  childOrderType = 'MARKET';
} else {
  childOrderType = 'LIMIT';
}
const PATH = RESOURCE_PATH;
const URL = `${BASE_URL}${PATH}`;
const method = 'POST';
const body = {
  product_code: 'BTC_JPY',
  child_order_type: childOrderType,
  side,
  price,
  size: amount,
  minute_to_expire: 43200,
  time_in_force: 'GTC'
};
const headers = generateAccessHeaders(API_KEY, API_SECRET, method, PATH, body);
axios
  .post(`${URL}`, body, { headers })
  .then((response) => {
    console.log(response.status);
    console.log(response.data);
  })
  .catch((error) => {
    console.error(error.response.status);
    console.error(error.response.data);
  });

パラメーターの設定は以下です。

  • orderKind -> 買う場合は「buy」、売る場合は「sell」
  • orderType -> 指値注文は「limit」、成行注文は「market」
  • price -> ビットコインの取引金額
  • amount -> ビットコインの取引量

ビットコインの売買をキャンセルするスクリプトの実装

取引所での売買はちょうどよい金額と量を設定すればすんなり終わりますが、誤って売買のオーダーをしてしまった場合や長い間約定しなかった場合に、キャンセルできると便利です。

「cancel.js」のソースコードは以下です。

const orderId = 'JRF2018XXXX-XXXXXX-XXXXXX';

const API_KEY = '{your-api-key}';
const API_SECRET = '{your-api-secret}';

const axios = require('axios');

const BASE_URL = 'https://api.bitflyer.jp';
const RESOURCE_PATH = '/v1/me/cancelchildorder';

const { generateAccessHeaders } = require('./utils');

const PATH = RESOURCE_PATH;
const URL = `${BASE_URL}${PATH}`;
const method = 'POST';
const body = {
  product_code: 'BTC_JPY',
  child_order_acceptance_id: orderId
};
const headers = generateAccessHeaders(API_KEY, API_SECRET, method, PATH, body);
axios
  .post(`${URL}`, body, { headers })
  .then((response) => {
    console.log(response.status);
    console.log(response.data);
  })
  .catch((error) => {
    console.error(error.response.status);
    console.error(error.response.data);
  });

パラメーターの設定は以下です。

  • orderId -> 注文実行時の返却値に含まれる「child_order_acceptance_id」を指定する

動作確認する

それではスクリプトを実行してみましょう。実行が成功すると「child_order_acceptance_id」が返却されます。

$ node ./order.js
200
{ child_order_acceptance_id: 'JRF2018XXXX-XXXXXX-XXXXXX' }

注文をキャンセルしたい場合はスクリプト内に「child_order_acceptance_id」の値を設定して実行します。

$ node ./cancel.js
200

エラーがでなければ成功です。

最後に

いかがでしたか?ここまでくれば後はトレードのロジックを組むだけです。システムトレードを楽しみましょう。では。

The following two tabs change content below.
  • この記事を書いた人
  • 最新の記事
KD
Twitter のプロフィール

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。
KD
Twitter のプロフィール

最新記事 by KD (全て見る)

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介 - 2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~ - 2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~ - 2019年10月30日

関連記事

  • WordPressサイトの表示が遅い場合の対処法

    WordPressを使い始めるとキャッチ画像などを毎回設定したり、分かり安くするために画像多めの記事を作ってみたりと、気…

  • XserverとWordPressのSSL設定と保護された通信にならない場合の対処法

    Google主導のもと、SSLじゃないサイトは排除される流れになっています。SSLはセキュリティ強化なので、ユーザのこと…

  • MarsEditでMarkdownを使う場合の設定

    MarsEditの初期設定が完了した後、ブログを書き始めるわけですが、皆さんはどういうフォーマットで書きますか?リッチエ…

  • WordPressブログに広告を自由自在に配置するための無料のプラグイン4選

    アフィリエイトでブログに広告を配置する場合、どこにどれくらい配置すべきかを検討することは重要ですが、配置したい場所に配置…

  • MarsEditのプレビューをサイトとほとんど同じにする方法

    MarsEditを使うことのメリットはライブプレビュー(記事を書いている時にリアルタイムでサイトのプレビューが見れること…

カテゴリ : ライフハック タグ : bitcoin, bitflyer, trade

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
    バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • TumblrからWordPressにブログ移転する最適な方法
    TumblrからWordPressにブログ移転する最適な方法
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法
  • Docker SwarmでDockerコンテナのオーケストレーション入門
    Docker SwarmでDockerコンテナのオーケストレーション入門
  • バンクーバー留学豆知識:水道水は美味しく飲めるBritaさえあれば!
    バンクーバー留学豆知識:水道水は美味しく飲めるBritaさえあれば!

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

The following two tabs change content below.
  • この記事を書いた人
  • 最新の記事
KD
Twitter のプロフィール

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。
KD
Twitter のプロフィール

最新記事 by KD (全て見る)

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介 - 2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~ - 2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~ - 2019年10月30日

関連記事

  • WordPressサイトの表示が遅い場合の対処法

    WordPressを使い始めるとキャッチ画像などを毎回設定したり、分かり安くするために画像多めの記事を作ってみたりと、気…

  • XserverとWordPressのSSL設定と保護された通信にならない場合の対処法

    Google主導のもと、SSLじゃないサイトは排除される流れになっています。SSLはセキュリティ強化なので、ユーザのこと…

  • MarsEditでMarkdownを使う場合の設定

    MarsEditの初期設定が完了した後、ブログを書き始めるわけですが、皆さんはどういうフォーマットで書きますか?リッチエ…

  • WordPressブログに広告を自由自在に配置するための無料のプラグイン4選

    アフィリエイトでブログに広告を配置する場合、どこにどれくらい配置すべきかを検討することは重要ですが、配置したい場所に配置…

  • MarsEditのプレビューをサイトとほとんど同じにする方法

    MarsEditを使うことのメリットはライブプレビュー(記事を書いている時にリアルタイムでサイトのプレビューが見れること…

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes