検索:
Coincheckでビットコインの自動トレードをしてみよう(bot開発Python版)

誰でもできる自動売買

仮想通貨の自動売買やシステムトレードを聞くと「なんだか難しそう・・・」と尻込みしてしまいませんか?

しかし、実はやってみると意外と簡単で「メールの設定をするようなもの」です。プログラミングのコードはこの記事に書いてあるので、それをコピペするだけでOK。わからないことはYahoo知恵袋で聞きましょう!

手動トレードにはリスクがある

仮想通貨は値動きが非常に速いため、買いたい価格になったとき、トレンドが転換したときなどに手動で売買をしようとしても間に合わない!という事象がよく起こります。そうして思ったより高く買ってしまったり、安く売ってしま足りするリスクがあります。

また、まだ下げるかもしれない、まだ上がるかもしれないという心理的なプレッシャーにより、適切なタイミングで売買をすることが出来ず、結果的に損をしてしまうかもしれません。

人間は損を回避しようとして結果的に期待値の低い行動をしてしまう、という心理をご存じですか?
これは「プロスペクト理論」と言われています。こういった感情に流されず、もっとも期待値の高いところで取引を行うために自動売買を積極的に取り入れると勝率が上がるかもしれません。

アメリカ屈指の金融街、ウォールストレートで敏腕のトレーダー達が一斉にAI・人工知能にとってかわられてしまったという話を聞いたことがある方もいるかもしれません。全世界の人間たちのなかで最も優れた専門家のトレーダーですら、AIの取引成績には勝てなかったのです。

自分にはスペシャルな取引センスがある、と信じて手動取引をすることも悪くはないかもしれませんが、客観的にはそうでないことの方が多いでしょう。

では、自動売買をやってみましょう

今回はコインチェックでビットコインのシステムトレードをやってみようと思います。
最近のWEBサービスはユーザーがもっと便利にサービスを使えるように、API(アプリケーションプログラミングインタフェース)というものを公開してくれています。

APIとは、端的に言えばプログラムを使って自動取引する機能を公開するから、自由に使っていいよ。ということです。公式で認められているため、自分のパソコンや、自分が管理しているサーバーから、仮想通貨取引所のAPIへ接続して自動売買することは全く怪しいことではありません。

また、APIで出来ることは限られていますので、自分の個人情報が流出したり、残高を他人に取られたりするようなリスクはありません。そういったことが発生した場合には、取引所の重大な過失(不具合)であるため、保障されることがあるでしょう。

1.APIキーを取得しよう

f:id:shidoma:20171215202112p:plain

インチェックのウォレット画面「設定」からAPIキーを選ぶと上記のような画面になります。

f:id:shidoma:20171215202215p:plain

新たにAPIキーを追加するボタンを押しましょう。
するとAPIでやることを選択する画面になります。自動取引したい項目のチェックボックスにチェックをいれましょう。そしてAPIキーを取得出来たら、絶対に他人には見せないようにしてください。

このAPIキーがあれば、他人があなたのアカウントを使って自由に取引をしたり、残高を送金することが出来てしまいます。

f:id:shidoma:20171215202421p:plain

続いてAPIに付与する権限を選択します。
自動売買をするAPIと、出金をするAPIは分けた方がセキュリティ的には安心です。

これで、APIキーとシークレットキーが発行されました。

<改めて注意!>

APIキーとシークレットキーは絶対に他人に漏らさないようにしましょう。
万が一、漏れてしまったら、あなたの資産は全て奪われたと考えてよいでしょう!

2.開発環境を準備しよう

ここは以前書いた記事を参考にお願いします。

Monacoin(モナーコイン)の自動取引botでトレードしてみようーその1(ZaifでPython使用 MAC版)

3.HTTPリクエストを簡易に扱うライブラリを作りましょう

開発環境に「coincheckApi.py」というファイル名で以下のソースファイルを作成します。

————–

# -*- coding: utf-8 -*-

import json
import requests
import time
import hmac
import hashlib

class ApiCall:

    def __init__(self,api_key,api_secret,api_endpoint):
        self.api_key = api_key
        self.api_secret = api_secret
        self.api_endpoint = api_endpoint

    def get_api_call(self,path):
        if path == '/api/order_books':
            timestamp = str(int(time.time()) + 86401)
        elif path == '/api/trades':
            timestamp = str(int(time.time()) + 86402)
        elif path == '/api/exchange/leverage/positions':
            timestamp = str(int(time.time()) + 86403)

        text = timestamp + self.api_endpoint + path
        sign = hmac.new(bytes(self.api_secret.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
        request_data=requests.get(
            self.api_endpoint+path
            ,headers = {
            'ACCESS-KEY': self.api_key,
            'ACCESS-NONCE': timestamp,
            'ACCESS-SIGNATURE': sign,
            'Content-Type': 'application/json'
        })
        return request_data


    def post_api_call(self,path,body):
        body = json.dumps(body)
        if path == '/api/exchange/orders':
            timestamp = str(int(time.time()) + 86404)
        else :
            timestamp = str(int(time.time()) + 86405)

        text = timestamp + self.api_endpoint + path + body
        sign = hmac.new(bytes(self.api_secret.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
        request_data=requests.post(
            self.api_endpoint+path
            ,data= body
            ,headers = {
            'ACCESS-KEY': self.api_key,
            'ACCESS-NONCE': timestamp,
            'ACCESS-SIGNATURE': sign,
            'Content-Type': 'application/json'
        })
        return request_data

————–

4.APIキーとシークレットキーは別ファイルに保存

「cc_keys.json」という名前でjsonファイルを作り、発行したAPIキーとシークレットキーを切り出しておきましょう。ソースコード中にAPIキーとシークレットキーを直書きしておくと、コードを公開した際に漏れてしまうなど、危険があります!

————–

{
    "key": "xxxxxxxxxxxxxxx",
    "secret": "yyyyyyyyyyyyyyyyyyyyyyyyyyyy",
 }

————-

<繰り返し注意!>

APIキーとシークレットキーは絶対に漏らさないように!

5.いざ、取引の要となるプログラムを書きましょう!

以下「main.py」のサンプルコードを置いておきます。

1万円分のBTCを成行で買うだけのコードです。

———-

# -*- coding: utf-8 -*-

import json
from pprint import pprint  # 表示用(jsonをきれいに表示してくれる)
import coincheckApi

cc_keys_json = open('cc_keys.json', 'r')
cc_keys = json.load(cc_keys_json)

api_endpoint = 'https://coincheck.com'
order_path = '/api/exchange/orders'

if __name__ == '__main__':

    api = coincheckApi.ApiCall(cc_keys["key"], cc_keys["secret"], api_endpoint)
    action = "market_buy"
    body = {
        "pair": "btc_jpy",
        "order_type": action,
        "market_buy_amount": 10000
    }

    try:
        result = api.post_api_call(order_path, body).json()
        if result["success"] != True:
            pprint(result)

    except Exception as e:
        print(e)

———-

6.アルゴリズムを変えてみよう

action = “market_buy”が「買う」という行動を表しています。ここを修正することで、売ることもできます。
また市場の価格を参照して、いくらになったら買う、いくらになったら売る、ということもできます。コインチェックが公開しているAPIマニュアルに設定方法が記載されているため、参考にしてみましょう!

7.自動売買で勝利するには回線速度が超重要

システムトレードで勝利するためには、アルゴリズムは最も重要なのは言うまでもありませんが、botを動かす環境によって勝率が大きく変わってきます。

本気で勝つbot開発に挑むなら、環境整備もぜひ始めておきましょう!

・ネット遅延を減らす

今はほとんどの方が光回線でインターネットに接続していると思いますが、最もアクセス速度が早く安定しているのは「NURO 光」です。自宅のPCを利用してbotトレードするならば、インターネット環境の速度アップは必須です。

あとはエントリーのタイミングを考えて、プログラミングしていきましょう!ここからが本当の勝負です!一緒に頑張りましょう!

では!

Monacoin(モナーコイン)の自動取引botでトレードその2ー自動売買する(ZaifでPython使用 MAC版)

こんにちは!ゆとひとです。

 

本シリーズの前回では、ZaifAPIを使って直近の終値を取得するところまで開発してみました。今回は自動で売買してみようと思います。

1.ZaifAPIキーを取得する

f:id:shidoma:20171123234926p:plain

アカウントメニューの「開発者向けAPI」を押すと、APIキーの管理画面が出てきます。

 

f:id:shidoma:20171123235027p:plain

真ん中あたりにある、Get Verification CodeからAPIキーを取得しましょう。

 

f:id:shidoma:20171123235356p:plain

認証メールが届くので1時間以内に6桁のキーを入力しましょう。

 

f:id:shidoma:20171123235330p:plain

そしてAPIキーのアカウント?を作ります。名前は適当に。

機能としては、Info(公開情報の取得)、Trade(取引の実施)にチェックを付けておきます。必要であれば、Withdraw(出金)もつけておいてよいでしょう。

 

2.認証キーをjsonファイルに記載しておきましょう

f:id:shidoma:20171123235959p:plain

Zaifフォルダの直下に「zaif_keys.json」ファイルを作ります。

 

f:id:shidoma:20171124000148p:plain

jsonファイルの中身はこんな感じ。

{

 “key”: “xxxxxxxxxxxxxxxx”,

 “secret”: “wwwwwwwwwwww”

}

 

3.jsonファイルに書いた認証キーを読み込んで、日本円残高を取得してみましょう

— コード ————————

# -*- coding: utf-8 -*-
# 2017/11/23 EUCALYPTUS is ALL Koala's food. by Monakoala

import time
import json
from zaifapi import ZaifPublicApi
from zaifapi import ZaifTradeApi

zaif_keys_json = open('zaif_keys.json', 'r')
zaif_keys = json.load(zaif_keys_json)

zaif_i = ZaifPublicApi()
zaif_t = ZaifTradeApi(zaif_keys["key"], zaif_keys["secret"])

if __name__ == '__main__':

while True:
time.sleep(3)

last_price = zaif_i.last_price('mona_jpy')["last_price"]
print('終値' + str(last_price))

funds = zaif_t.get_info2()
print(str('日本円残高' + str(funds['funds']['jpy'])))


実行結果

f:id:shidoma:20171124001303p:plain

 

4.日本円残高で買える分のMonaを買い増そう

いくで。やるで。モナ買いましや!

 

# -*- coding: utf-8 -*-
# 2017/11/23 EUCALYPTUS is ALL Koala’s food. by Monakoala

import time
import json
import math
from zaifapi import ZaifPublicApi
from zaifapi import ZaifTradeApi

zaif_keys_json = open(zaif_keys.json, ‘r’)
zaif_keys = json.load(zaif_keys_json)

zaif_i = ZaifPublicApi()
zaif_t = ZaifTradeApi(zaif_keys[“key”], zaif_keys[“secret”])

if __name__ == ‘__main__’:

while True:
time.sleep(3)

last_price = zaif_i.last_price(mona_jpy’)[“last_price”]
print(終値+ str(last_price))

funds = zaif_t.get_info2()
print(str(‘日本円残高 ‘ + str(funds[‘funds’][‘jpy’])))
print(str(‘モナ残高 ‘ + str(funds[‘funds’][mona])))

# 売り板の一番上の価格と数量を取得する。
bid_price, bid_amount = zaif_i.depth(mona_jpy’)[“bids”][0]

# 日本円残高が1000円以上ある場合
if funds[‘funds’][‘jpy’] >= 1000:

# 売り板の価格に対して、1000円で買える枚数を計算する
amount = math.floor(1000 / bid_price)

# 買い取引の注文
print(‘↓注文’)
result = zaif_t.trade(currency_pair=mona_jpy”, action=“bid”, \
price=bid_price, amount=amount)

 

実行結果

f:id:shidoma:20171124004242p:plain

結果:2 mona買えました!

 

action=”bid” を action=”ask”にすると売りも出来ます。

現在価格から1%下がったら、買い、1%上がったら、売るなど、自由に条件を設定していきましょう!

 

では!

Monacoin(モナーコイン)の自動取引botでトレードしてみようーその1(ZaifでPython使用 MAC版)

こんにちは!ゆとひとです。

 

今回は国内の仮想通貨取引所Zaif」でモナコインを自動取引するbotを作っていきたいと思います。

f:id:shidoma:20171121162520j:plain

Zaif」はサーバーが弱いって?僕もそう思ってはいるんですが、改善しそうなお知らせが出ていました。API実行回数を制限して、サーバーへの負荷を減らすとのことです。少しは快適になるかな?

corp.zaif.jp

 

1.Python 3.xをインストールする。

これは、仮想通貨トレードに限らず色んなサイトで解説されているので割愛しますね。

qiita.com

 

 

2.開発環境PyCharmをインストールする。

30日間無料で使えますので、PyCharmがオススメです。

気に入ったら有料版を続けて使うもよし、別の環境に引っ越すもよし。

www.jetbrains.com

 

 

3.Zaif APIのライブラリをインストールする。

公式で公開されているAPIそのものではありませんが、使いやすいように加工してライブラリ化してくださってます。

github.com

 

 

これをダウンロードして、

ドキュメントフォルダの配下にZaifフォルダを作って展開しました。

f:id:shidoma:20171121155632p:plain

 

 

インストールは、ターミナルに以下のコマンドを打ちます。

pip install zaifapi

 

 

5.Pycharmでライブラリを開いてみましょう

openを選択して、zaifフォルダを選びます。

f:id:shidoma:20171121155930p:plain

 

Zaifフォルダの直下にmain.pyファイルを作ります。

f:id:shidoma:20171121160043p:plain

 

 

6.公開情報API終値(直近価格)を取得してみる。

以下コードをコピペして実行すると、

3秒ごとに、mona/jpyの終値(直近価格)を取得してコンソールに表示します。

— コード ————————

# -*- coding: utf-8 -*-

# 2017/11/21 EUCALYPTUS is ALL Koala’s food. by Monakoala

import time
from zaifapi import ZaifPublicApi

zaif_i = ZaifPublicApi()

if __name__ == ‘__main__’:

    i = 0
    while True:
        time.sleep(3)

        last_price = zaif_i.last_price(mona_jpy’)[“last_price”]
        print(str(last_price))

        i += 1

 

実行結果

326.5円らしいです。

f:id:shidoma:20171121161152p:plain

 

ちなみに、こんなエラーが出た場合Zaifはサーバー側か、

回線等の問題なので何も直さずにリトライしてみましょう。

>zaifapi.api_error.ZaifApiError: return status code is 502

 

本日はここまで!

次回は、いよいよ売買を自動でやってみたいと思います!

 

では!

 

 

 

 

参考にさせて頂いた記事

https://qiita.com/speedkingg/items/2d874beee26106ce9f9a

大枠はこちらの記事通りにやっていくと進みますが、

2017年4月の記事なので私が始めた頃は状況が変わっていました。

Zaif APIPython 3.x系で利用できるように変わってます。(2017/11/21)

・”ZaifPrivateAPI”は名前が変わっており、”ZaifTradeAPI”になってます。