Casual Developers Note

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

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

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

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

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

ビットコインのシステムトレードは単にお金を増やすだけでなく、単純に楽しいプロセスです。今回はZaifのAPIを利用して売買のプログラムを実装する方法を紹介します。

見出し

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

はじめに

前回はbitFlyerのAPIを利用して売買のプログラムを作りました。

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

今回はZaifのAPIを利用して売買のプログラムを作る方法を紹介します。

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

前提条件

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

  • Zaifのアカウント(本人確認済)を持っていること
  • Zaifの二段階認証が完了していること
  • Zaifに入金済であること
  • NodeJSがインストールされていること

APIキーの取得

まずはAPIキーをZaifの開発者ページから発行しましょう。

ログインしたら「アカウント -> 各種サービス -> 開発者向けAPI -> API Keys」を選択します。

Zaif 2

二段階認証の番号を入力して「Submit」をクリックします。

Zaif 3

名前は今回は「my-trade」としておきましょう。権限は今回は「Info」と「Trade」のみを選択して、「Create」をクリックします。

Zaif 4

すると新しいAPIのkeyとsecretが発行されます。

Zaif 5

これらの情報はプログラムで使用します。

プロジェクトの準備

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

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

API認証用の関数の実装

ZaifのAPI認証の仕組みはここにあります。

const crypto = require('crypto');

function generateAccessHeaders(key, secret, encodedParams) {
  const sign = crypto.createHmac('sha512', secret).update(encodedParams).digest('hex');
  return { key, sign };
}

module.exports = { generateAccessHeaders };

パラメーターの「encodedParams」には「qs」のライブラリでエンコードしたパラメーターを渡します。

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

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

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

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

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

const axios = require('axios');
const qs = require('qs');

const BASE_URL = 'https://api.zaif.jp/tapi';
const METHOD = 'trade';

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

const nonce = Date.now().toString() / 1000;
let params;
if (orderKind === 'buy') {
  params = {
    nonce,
    method: METHOD,
    currency_pair: 'btc_jpy',
    action: 'bid',
    price,
    amount
  };
} else {
  params = {
    nonce,
    method: METHOD,
    currency_pair: 'btc_jpy',
    action: 'ask',
    price,
    amount
  };
}
const encodedParams = qs.stringify(params);
const headers = generateAccessHeaders(API_KEY, API_SECRET, encodedParams);
axios
  .post(`${BASE_URL}`, encodedParams, { 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」
  • price -> ビットコインの取引金額
  • amount -> ビットコインの取引量

ZaifはパブリックなAPIとプライベートなAPIでURLが異なっているので注意しましょう。

また、ZaifのAPIは指値注文しか対応していません。

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

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

const orderId = 'XXXXXXXXX';

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

const axios = require('axios');
const qs = require('qs');

const BASE_URL = 'https://api.zaif.jp/tapi';
const METHOD = 'cancel_order';

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

const nonce = Date.now().toString() / 1000;
const params = {
  nonce,
  method: METHOD,
  order_id: orderId,
  currency_pair: 'btc_jpy'
};
const encodedParams = qs.stringify(params);
const headers = generateAccessHeaders(API_KEY, API_SECRET, encodedParams);
axios
  .post(`${BASE_URL}`, encodedParams, { headers })
  .then((response) => {
    console.log(response.status);
    console.log(response.data);
  })
  .catch((error) => {
    console.error(error.response.status);
    console.error(error.response.data);
  });

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

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

動作確認する

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

$ node ./order.js
200
{ success: 1,
  return:
   { received: 0,
     remains: 0.001,
     order_id: XXXXXXXXX,
     funds: [Object] } } }

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

$ node ./cancel.js
200
{ success: 1,
  return:
   { order_id: XXXXXXXXX,
     funds: { jpy: 77774.319, btc: 0.513, xem: 0, mona: 0 } } }

「success」が1であれば成功です。

最後に

いかがでしたか?取引所が提供しているAPIを使えば簡単にシステムトレードが実現できます。最近は取引所のAPIをラップしたライブラリを目にするのですが、この程度の処理であればライブラリを使う必要は全く無いでしょう。では。

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日

関連記事

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

    ビットコインを取引所で購入し、トレードしてみたり、買い物してみたりした後、次に興味を持つことはシステムトレードでしょう。…

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

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

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

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

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

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

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

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

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

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

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

このサイトはスパムを低減するために 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.」というエラーが出た場合の原因と対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • 爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
    爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
    バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • PythonでWebスクレイピング入門(Scrapy+Selenium編)
    PythonでWebスクレイピング入門(Scrapy+Selenium編)
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法

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日

関連記事

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

    ビットコインを取引所で購入し、トレードしてみたり、買い物してみたりした後、次に興味を持つことはシステムトレードでしょう。…

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

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

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

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

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

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

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

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

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

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

Copyright © 2023 KD - Casual Developers Notes