<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>FX・ビットコイン・オプションのシステムトレード開発と取引録</title>
	<atom:link href="https://fx.ichizo.biz/feed" rel="self" type="application/rss+xml" />
	<link>https://fx.ichizo.biz</link>
	<description>FXとビットコインのシステムトレードの開発録、オプション取引の履歴を書き連ねています。MT4, Pythonで開発しています。</description>
	<lastBuildDate>Tue, 09 May 2017 14:51:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.4.2</generator>
<site xmlns="com-wordpress:feed-additions:1">120381116</site>	<item>
		<title>bitFlyerのAPIを使ってビットコイン先物の価格情報を取得してみる</title>
		<link>https://fx.ichizo.biz/2017/05/09/bitflyer-futures.html</link>
					<comments>https://fx.ichizo.biz/2017/05/09/bitflyer-futures.html#respond</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Tue, 09 May 2017 14:51:52 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[システムトレード]]></category>
		<category><![CDATA[ビットコイン]]></category>
		<category><![CDATA[bitcoin]]></category>
		<category><![CDATA[ビットコイン先物]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=445</guid>

					<description><![CDATA[bitFlyerでビットコイン先物の価格情報を取得してみる bitFlyerでは、ビットコインの先物を取引できます。 現在（2017/05/09）だと、「BTCJPY12MAY2017」と「BTCJP ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<h2>bitFlyerでビットコイン先物の価格情報を取得してみる</h2>
<p>bitFlyerでは、ビットコインの先物を取引できます。</p>
<p>現在（2017/05/09）だと、「BTCJPY12MAY2017」と「BTCJPY19MAY2017」の２種類になります。</p>
<p>１週間先（今週）と２週間先（来週）の金曜日が満期日の先物になります。</p>
<p>APIで使用するには、product_codeに「BTCJPY12MAY2017」もしくは「BTCJPY19MAY2017」を使用すればOKです。</p>
<p>今回は、これを使って、ビットコイン現物と２種類の先物の価格情報（Ticker）を取得します。</p>
<p>後々グラフで表示したいので、とりあえずMySQLのデータベースにINSERTするところまでを目指します。</p>
<p>では、早速ソースです。</p>
<h3><i class="fa fa-check-circle"></i><span>ビットコイン現物と先物価格情報を取得（bitFlyer APIを使用）</span></h3>
<p></p><pre class="crayon-plain-tag"># -*- coding: utf-8 -*-
"""
Created on Thu Mar  9 12:14:31 2017

@author: ichizo
"""

import bitflyerApi
from datetime import datetime
import pymysql

markets_path = '/v1/markets'

"""
dbh = pymysql.connect(
         host='localhost',
         user='root',
         password='',
         db='bitcoin',
         charset='utf8',
         cursorclass=pymysql.cursors.DictCursor
    )
"""

def get_product_code_list():
    api = bitflyerApi.bitflyerApi()
    market_list = api.get_api_call(markets_path).json()
    print(market_list)
    
    pc_list = []
    for market in market_list:
        if market['product_code'] != 'FX_BTC_JPY' and market['product_code'] != 'ETH_BTC':
            
            if 'alias' in market:
                pc = {'product_code':market['product_code'], 'alias':market['alias']}
            else:
                pc = {'product_code':market['product_code'], 'alias':market['product_code']}
    
            pc_list.append(pc)

    return pc_list

def insert_data(data):
    sql = "INSERT INTO bitflyers (product_code, alias, timestamp, \
            best_bid, best_ask, best_bid_size, best_ask_size, \
            total_bid_depth, total_ask_depth, ltp, \
            volume, volume_by_product, created) \
            VALUES ( \
            '%s', '%s' ,'%s', '%s', '%s', '%s', '%s', \
            '%s', '%s', '%s', '%s', '%s', '%s')" \
             % (data['product_code'], data['alias'], data['timestamp'], 
            data['best_bid'], data['best_ask'], data['best_bid_size'], data['best_ask_size'], \
            data['total_bid_depth'], data['total_ask_depth'], data['ltp'], \
            data['volume'], data['volume_by_product'], data['created'])
    print(sql)
"""
    stmt = dbh.cursor()

    stmt.execute(sql)
    dbh.commit()
    
    stmt.close()
    dbh.close()
"""

if __name__ == '__main__':
    
    pc_list = get_product_code_list();
    print(pc_list)
    
    api = bitflyerApi.bitflyerApi()
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    for pc in pc_list:
        channel = 'lightning_ticker_' + pc['product_code']
        result = api.pubnub_call(channel)
        print(result)
        result['timestamp'] = result['timestamp'][:26].replace('T',' ')
        result['alias'] = pc['alias']
        result['created'] = now
        
        insert_data(result)</pre><p></p>
<p>とりあえず、SQL（INSERT文）を発行するところまでは実装しました。</p>
<p>PyMySQLの部分をコメントアウトしていますが、Python上でMySQLが扱えれば動くはずです（多分）。</p>
<p>今、手元に環境がないため、MySQLにデータが入るところまでは確認できていません。</p>
<p>近いうちにVPSでも契約しようかと思います。</p>
<p>今回実装したPythonプログラムでは、<a href="http://fx.ichizo.biz/2017/03/09/bitflyer-api.html">以前開発したAPIを扱うプログラム</a>を使用していますので、そのソースも載せておきます。</p>
<p>必要なライブラリ等は<a href="http://fx.ichizo.biz/2017/03/09/bitflyer-api.html">以前の記事</a>をご覧ください。</p>
<h3><i class="fa fa-check-circle"></i><span>bitFlyer API</span></h3>
<p></p><pre class="crayon-plain-tag"># -*- coding: utf-8 -*-
"""
Created on Thu Mar  9 12:00:27 2017

@author: ichizo
"""
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub, SubscribeListener
import json
import requests
import time
import hmac
import hashlib
import util

class bitflyerApi:
    def __init__(self):
        self.api_key = 'APIキー'
        self.api_secret = 'APIシークレットキー'
        self.api_endpoint = 'https://api.bitflyer.jp'

    def get_api_call(self,path):
        method = 'GET'
        timestamp = str(time.time())
        text = timestamp + method + 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-TIMESTAMP': timestamp,
                'ACCESS-SIGN': sign,
                'Content-Type': 'application/json'
            })
        return request_data

    def post_api_call(self,path,body):
        body = json.dumps(body)
        method = 'POST'
        timestamp = str(time.time())
        text = timestamp + method + 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-TIMESTAMP': timestamp,
                'ACCESS-SIGN': sign,
                'Content-Type': 'application/json'
            })
        return request_data

    """
        channel: 'lightning_ticker_BTC_JPY'
    """
    def pubnub_call(self,channel):
        pnconfig = PNConfiguration()
        pnconfig.subscribe_key = "sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f"
        pnconfig.ssl = False
     
        pubnub = PubNub(pnconfig)
        
        my_listener = SubscribeListener()
        pubnub.add_listener(my_listener)
         
        pubnub.subscribe().channels(channel).execute()
        my_listener.wait_for_connect()
    
        bf_result = my_listener.wait_for_message_on(channel)
        bf_data = bf_result.message
 
        pubnub.unsubscribe().channels(channel).execute()
        my_listener.wait_for_disconnect()
        
        return bf_data

    def get_board(self):
        api = bitflyerApi()
        result = api.pubnub_call('lightning_board_snapshot_BTC_JPY')
        bids = util.util.dict_to_pd(result['bids'],'bf',False)
        asks = util.util.dict_to_pd(result['asks'],'bf',True)
        return bids,asks
    
    def get_balance(self):
        api = bitflyerApi()
        result = api.get_api_call('/v1/me/getbalance').json()
        data = {}
        for row in result:
            if (row['currency_code'] == 'JPY'):
                data['jpy_amount'] = float(row['amount'])
                data['jpy_available'] = float(row['available'])
            elif (row['currency_code'] == 'BTC'):
                data['btc_amount'] = float(row['amount'])
                data['btc_available'] = float(row['available'])
        return data

    def order(self,data):
        api = bitflyerApi()
        result = api.post_api_call('/v1/me/sendchildorder',data).json()
        return result</pre><p></p>
<p>データがたまったら、グラフで表示させる部分も実装してみようかと思います。</p>
<p>これらのデータで色々とできそうで、これから楽しみです！</p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/05/09/bitflyer-futures.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">445</post-id>	</item>
		<item>
		<title>お！USOの価格が下がっている。Callオプションを決済しようかな</title>
		<link>https://fx.ichizo.biz/2017/05/06/coveredcall.html</link>
					<comments>https://fx.ichizo.biz/2017/05/06/coveredcall.html#respond</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Sat, 06 May 2017 02:27:41 +0000</pubDate>
				<category><![CDATA[オプション]]></category>
		<category><![CDATA[オプション取引]]></category>
		<category><![CDATA[カバードコール]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=442</guid>

					<description><![CDATA[USOが値下がりしているのでCallオプションを決済しようか 3月下旬にUSOのCallオプションを売り立てました。 で、その1週間後にUSOの価格が上昇するという事態になっていました。 売り立てたC ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<h2>USOが値下がりしているのでCallオプションを決済しようか</h2>
<p><a href="http://fx.ichizo.biz/2017/03/27/optiontrade.html">3月下旬にUSOのCallオプションを売り立てました</a>。</p>
<p>で、<a href="http://fx.ichizo.biz/2017/03/31/uso-option.html">その1週間後にUSOの価格が上昇するという事態</a>になっていました。</p>
<p>売り立てたCallオプションは、2017/6/16が満期日のものです。</p>
<p>満期までにはUSOが下がることもあるだろうということで、様子を見ながら放置していました。</p>
<p>するとここ1週間ほどUSOの価格が下がって来ていますので、Callオプション売を決済することにしました。</p>
<p>Firstrade証券の取引時間内に「USO 06/16/2017 Call 11.00」の買い注文を2単位、0.10ドルで出しました。</p>
<p>すると即決済されました。</p>
<h2>「USO 06/16/2017 Call 11.00」決済時の損益は</h2>
<p>「USO 06/16/2017 Call 11.00」を2017/3/24に0.25ドルで2単位売り立てました。</p>
<p>この時の手数料が6.35ドルでしたから、0.25 x 2 x 100 &#8211; 6.35 = 43.65 ドルの現金が口座に入りました。</p>
<p>このCallオプションを決済したのが5/3で、その時のオプションの価格が0.10ドルでした。</p>
<p>この時の手数料が6.34ドルでしたから、-0.10 x 2 x 100 &#8211; 6.34 = -26.34 ドルの現金が口座に入りました。</p>
<p>マイナスなので、26.34ドルが口座から引かれたということです。</p>
<p>差し引きを計算すると、43.65 &#8211; 26.34 = 17.31 ドルの利益という結果になりました。</p>
<p>3/24に取引を始めて、5/3に決済しましたので、40日ほどで 17.31ドルの利益を得られたということです。</p>
<h2>まとめ　今回の取引の反省点</h2>
<p>今回の反省点としては、USOの価格が下がったままの状態でCallオプションの売りを仕掛けてしまったということです。</p>
<p>その3～4日後にはUSOがグッと上がっていますので、そのタイミングで仕掛けた方がよかったですね。</p>
<p>タイムディケイが得られなくなるということで焦って仕掛けてしまったのですが、ちょっとだけ待って仕掛けたらより利益が得られたということです。</p>
<p>待つのも相場ということでしょうか。</p>
<p>ここ最近のUSOの値幅を見ると、9～11ドルをウロウロとしていますので、11ドル近辺に上がったタイミングでエントリーするのが良さそうです。</p>
<p>今回は、エントリーのタイミングがまずかったなと反省していたのですが、満期日までに価格がかなり下がってくれましたので何とか利益を出すことができました。</p>
<p>次回は、USOの価格が上がるタイミングを待ち、Callオプションの売りを仕掛けたいと思います。</p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/05/06/coveredcall.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">442</post-id>	</item>
		<item>
		<title>ビットコイン裁定取引のPythonプログラムをBash on Ubuntu on Windows上で動かすための設定</title>
		<link>https://fx.ichizo.biz/2017/04/04/bitcoin-arbitrage-python.html</link>
					<comments>https://fx.ichizo.biz/2017/04/04/bitcoin-arbitrage-python.html#respond</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Tue, 04 Apr 2017 08:41:45 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[システムトレード]]></category>
		<category><![CDATA[ビットコイン]]></category>
		<category><![CDATA[Anaconda]]></category>
		<category><![CDATA[Bash on Ubuntu on Windows]]></category>
		<category><![CDATA[bitcoin]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=423</guid>

					<description><![CDATA[ビットコインの裁定取引（アービトラージ）を行うPythonプログラムを作ったのですが、どうも動かす環境がなくてほったらかしの状態でした。 ちょっともったいないと思って動かせる環境がないかと考えていたら ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>ビットコインの裁定取引（アービトラージ）を行うPythonプログラムを作ったのですが、どうも動かす環境がなくてほったらかしの状態でした。</p>
<p>ちょっともったいないと思って動かせる環境がないかと考えていたら、Bash on Ubuntu on Windowsを使えば動かせるんじゃないかと思い付いたので、環境構築からやってみた作業メモです。</p>
<h2>そうだ！Bash on Ubuntu on Windowsを使おう</h2>
<p>Window10上でLinuxを動かしたいという場合、Anniversary Updateから提供されているBash on Ubuntu on Windowsを利用するのも一つの手です。</p>
<p>今回は、Linux上で動かしたいプログラム（crontab）があったので、Bash on Ubuntu on Windowsを利用してみることにしました。</p>
<p>Bash on Ubuntu on WindowsにAnacondaをインストールして、Python環境を構築することを目指します。</p>
<p>まずは、Bash on Ubuntu on Windowsを使えるようにします。</p>
<h2>Bash on Ubuntu on Windowsのインストール</h2>
<h3><i class="fa fa-check-circle"></i><span>Windows Subsystem for Linuxを有効にする</span></h3>
<p>Windowsボタン右クリックから「プログラムと機能」を選択します。</p>
<p>左側メニューの「Windowsの機能の有効化または無効化」をクリックします。<br />
<a href="http://fx.ichizo.biz/wp-content/uploads/2017/04/01-Bash-on-Ubuntu-on-Windows.png"><img data-attachment-id="424" data-permalink="https://fx.ichizo.biz/2017/04/04/bitcoin-arbitrage-python.html/01-bash-on-ubuntu-on-windows" data-orig-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/01-Bash-on-Ubuntu-on-Windows.png" data-orig-size="814,236" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="01 Bash on Ubuntu on Windows" data-image-description="" data-medium-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/01-Bash-on-Ubuntu-on-Windows-300x87.png" data-large-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/01-Bash-on-Ubuntu-on-Windows.png" src="http://fx.ichizo.biz/wp-content/uploads/2017/04/01-Bash-on-Ubuntu-on-Windows.png" alt="" width="814" height="236" class="alignnone size-full wp-image-424" srcset="https://fx.ichizo.biz/wp-content/uploads/2017/04/01-Bash-on-Ubuntu-on-Windows.png 814w, https://fx.ichizo.biz/wp-content/uploads/2017/04/01-Bash-on-Ubuntu-on-Windows-300x87.png 300w, https://fx.ichizo.biz/wp-content/uploads/2017/04/01-Bash-on-Ubuntu-on-Windows-768x223.png 768w" sizes="(max-width: 814px) 100vw, 814px" /></a></p>
<p>Windows Subsystem for Linux (Beta)にチェックを入れます。<br />
<a href="http://fx.ichizo.biz/wp-content/uploads/2017/04/02-Bash-on-Ubuntu-on-Windows.png"><img data-attachment-id="425" data-permalink="https://fx.ichizo.biz/2017/04/04/bitcoin-arbitrage-python.html/02-bash-on-ubuntu-on-windows" data-orig-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/02-Bash-on-Ubuntu-on-Windows.png" data-orig-size="415,368" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="02 Bash on Ubuntu on Windows" data-image-description="" data-medium-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/02-Bash-on-Ubuntu-on-Windows-300x266.png" data-large-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/02-Bash-on-Ubuntu-on-Windows.png" src="http://fx.ichizo.biz/wp-content/uploads/2017/04/02-Bash-on-Ubuntu-on-Windows.png" alt="" width="415" height="368" class="alignnone size-full wp-image-425" srcset="https://fx.ichizo.biz/wp-content/uploads/2017/04/02-Bash-on-Ubuntu-on-Windows.png 415w, https://fx.ichizo.biz/wp-content/uploads/2017/04/02-Bash-on-Ubuntu-on-Windows-300x266.png 300w" sizes="(max-width: 415px) 100vw, 415px" /></a></p>
<p>OKをクリックするとインストールが始まります。<br />
インストールが完了したらパソコンを再起動するかを聞かれるので、再起動しましょう。</p>
<h3><i class="fa fa-check-circle"></i><span>開発者モードに設定する</span></h3>
<p>再起動したら、Windowsボタンをクリック、設定メニュー（歯車のアイコン）をクリックします。</p>
<p>Windowsの設定画面で、「更新とセキュリティ」をクリックします。<br />
<a href="http://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows.png"><img data-attachment-id="426" data-permalink="https://fx.ichizo.biz/2017/04/04/bitcoin-arbitrage-python.html/03-bash-on-ubuntu-on-windows" data-orig-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows.png" data-orig-size="1142,666" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="03 Bash on Ubuntu on Windows" data-image-description="" data-medium-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows-300x175.png" data-large-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows-1024x597.png" src="http://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows-1024x597.png" alt="" width="640" height="373" class="alignnone size-large wp-image-426" srcset="https://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows-1024x597.png 1024w, https://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows-300x175.png 300w, https://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows-768x448.png 768w, https://fx.ichizo.biz/wp-content/uploads/2017/04/03-Bash-on-Ubuntu-on-Windows.png 1142w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>左メニューの「開発者向け」メニューをクリックして、「開発者モード」にチェックを入れます。<br />
<a href="http://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows.png"><img data-attachment-id="427" data-permalink="https://fx.ichizo.biz/2017/04/04/bitcoin-arbitrage-python.html/04-bash-on-ubuntu-on-windows" data-orig-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows.png" data-orig-size="1142,666" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="04 Bash on Ubuntu on Windows" data-image-description="" data-medium-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows-300x175.png" data-large-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows-1024x597.png" src="http://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows-1024x597.png" alt="" width="640" height="373" class="alignnone size-large wp-image-427" srcset="https://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows-1024x597.png 1024w, https://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows-300x175.png 300w, https://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows-768x448.png 768w, https://fx.ichizo.biz/wp-content/uploads/2017/04/04-Bash-on-Ubuntu-on-Windows.png 1142w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>「開発者向け機能を使う」の確認ボックスが表示されるので「はい」を選んで進めます。</p>
<h3><i class="fa fa-check-circle"></i><span>Bashをインストールする</span></h3>
<p>コマンドプロンプトを起動して、「bash」と入力します。<br />
<a href="http://fx.ichizo.biz/wp-content/uploads/2017/04/05-Bash-on-Ubuntu-on-Windows.png"><img data-attachment-id="428" data-permalink="https://fx.ichizo.biz/2017/04/04/bitcoin-arbitrage-python.html/05-bash-on-ubuntu-on-windows" data-orig-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/05-Bash-on-Ubuntu-on-Windows.png" data-orig-size="979,512" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="05 Bash on Ubuntu on Windows" data-image-description="" data-medium-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/05-Bash-on-Ubuntu-on-Windows-300x157.png" data-large-file="https://fx.ichizo.biz/wp-content/uploads/2017/04/05-Bash-on-Ubuntu-on-Windows.png" src="http://fx.ichizo.biz/wp-content/uploads/2017/04/05-Bash-on-Ubuntu-on-Windows.png" alt="" width="979" height="512" class="alignnone size-full wp-image-428" srcset="https://fx.ichizo.biz/wp-content/uploads/2017/04/05-Bash-on-Ubuntu-on-Windows.png 979w, https://fx.ichizo.biz/wp-content/uploads/2017/04/05-Bash-on-Ubuntu-on-Windows-300x157.png 300w, https://fx.ichizo.biz/wp-content/uploads/2017/04/05-Bash-on-Ubuntu-on-Windows-768x402.png 768w" sizes="(max-width: 979px) 100vw, 979px" /></a></p>
<p>インストールの確認メッセージが表示されるので「y」を入力すると、Bash on Ubuntu on Windowsがインストールされます。</p>
<p>UNIXユーザー名とパスワードを聞かれるので好きなものを入力します。</p>
<p>ここまで終わればインストール完了です。</p>
<h2>pipをインストールする</h2>
<p>続いてpipをインストールします。</p>
<p></p><pre class="crayon-plain-tag">sudo apt-get install python-pip</pre><p></p>
<h2>pyenvをインストールする</h2>
<p>pyenvのインストールに必要なパッケージをインストールします。</p>
<p></p><pre class="crayon-plain-tag">sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev libpng-dev git</pre><p></p>
<p>続いてpyenvの本体をインストールします。</p>
<p></p><pre class="crayon-plain-tag">git clone git://github.com/yyuu/pyenv.git ~/.pyenv
git clone https://github.com/yyuu/pyenv-pip-rehash.git ~/.pyenv/plugins/pyenv-pip-rehash
echo 'export PYENV_ROOT="$HOME/.pyenv"' &gt;&gt; ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' &gt;&gt; ~/.bashrc
echo 'eval "$(pyenv init -)"' &gt;&gt; ~/.bashrc
source ~/.bashrc</pre><p></p>
<h2>Anacondaのインストール</h2>
<p>引き続いてAnacondaをインストールします。<br />
まず、Anacondaのバージョンを確認します。</p>
<p></p><pre class="crayon-plain-tag">pyenv install -l | grep anaconda3
  anaconda3-2.0.0
  anaconda3-2.0.1
  anaconda3-2.1.0
  anaconda3-2.2.0
  anaconda3-2.3.0
  anaconda3-2.4.0
  anaconda3-2.4.1
  anaconda3-2.5.0
  anaconda3-4.0.0
  anaconda3-4.1.0
  anaconda3-4.1.1
  anaconda3-4.2.0
  anaconda3-4.3.0
  anaconda3-4.3.1</pre><p></p>
<p>anaconda3-4.3.1が最新なので、これをインストールしてデフォルトに指定します。</p>
<p></p><pre class="crayon-plain-tag">pyenv install anaconda3-4.3.1
pyenv global anaconda3-4.3.1
echo 'export PATH="$PYENV_ROOT/versions/anaconda3-4.1.0/bin:$PATH"' &gt;&gt; ~/.bashrc
source ~/.bashrc</pre><p></p>
<p>インストールを確認します。</p>
<p></p><pre class="crayon-plain-tag">python --version
Python 3.6.0 :: Anaconda 4.3.1 (64-bit)</pre><p></p>
<h2>ファイルのコピー</h2>
<p>以前Windows10上で作ったファイルをコピーします。</p>
<p>Bash on Ubuntu on Windows上でCドライブにアクセスするには、「/mnt/c」ですので、以下のコマンドを実行します。</p>
<p></p><pre class="crayon-plain-tag">cp -ra /mnt/c/python/bitcoin/ .</pre><p></p>
<p>これでフォルダごとコピーすることができました。</p>
<h2>必要なライブラリをインストール</h2>
<p>利用するライブラリをpipでインストールします。</p>
<p></p><pre class="crayon-plain-tag">pip install 'pubnub&gt;=4.0.10'
pip install zaifapi
pip install PyJWT</pre><p></p>
<p>これで、Anaconda上で実装したビットコインの裁定取引（アービトラージ）プログラムを実行できるようになりました。</p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/04/04/bitcoin-arbitrage-python.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">423</post-id>	</item>
		<item>
		<title>あれ、USOの価格上がっているよ？Callオプション価格も上がってる・・・。</title>
		<link>https://fx.ichizo.biz/2017/03/31/uso-option.html</link>
					<comments>https://fx.ichizo.biz/2017/03/31/uso-option.html#respond</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Fri, 31 Mar 2017 06:44:29 +0000</pubDate>
				<category><![CDATA[オプション]]></category>
		<category><![CDATA[オプション取引]]></category>
		<category><![CDATA[カバードコール]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=420</guid>

					<description><![CDATA[Callオプションの売ポジションを持っているUSOが値上がりしている 前回の取引の際に USOの期間が6/16までで11.00ドルの Callオプションを売り立てました。 それまで保持していたCall ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<h2>Callオプションの売ポジションを持っているUSOが値上がりしている</h2>
<p><a href="http://fx.ichizo.biz/2017/03/27/optiontrade.html">前回の取引</a>の際に<br />
USOの期間が6/16までで11.00ドルの<br />
Callオプションを売り立てました。</p>
<p>それまで保持していたCallオプションの<br />
価格が落ちていたので決済して、<br />
何も持っていないのは機会損失とばかりに<br />
すぐに次のCallオプションの売りを立てたのでした。</p>
<p>それから１週間も経っていません。<br />
今日USOの価格を確認してみると、<br />
かなり上がっているではありませんか。</p>
<p>現在（2017/3/31 15:00）で<br />
10.57ドルになっています。</p>
<p><a href="http://fx.ichizo.biz/2017/03/27/optiontrade.html">前回の取引 3/24の時点</a>では、<br />
10.00ドルぐらいでしたから、<br />
一番落ち込んでいたところから<br />
これまでの平均的な価格である<br />
11.00ドル近辺まで行きそうな勢いです。</p>
<p>ここ直近の６カ月でみると、<br />
2016年10月終わり～11月終わりの<br />
ほぼ１カ月間が10ドル近辺まで<br />
値下がりしていた期間になります。</p>
<p>直近の１年間でみると、<br />
2016年4月のはじめと<br />
2016年8月のはじめに<br />
大きく値を下げています。</p>
<p>将来の値動きは何とも分かりませんが、<br />
このまま上がっていきそうな気配です。</p>
<h2>ポジポジ病だったことに気が付く</h2>
<p>3/24に0.25ドルで売り立てた<br />
Callオプションが、<br />
今日の時点で0.39ドルまで<br />
値上がりしています。</p>
<p>前回分を決済した後、<br />
オプションを持っていないのは<br />
機会損失だとばかりに<br />
すぐに売りポジションを立てました。</p>
<p>USOの価格が下がっていた時期でしたので<br />
正直Callオプションも下がっていました。</p>
<p>プレミアム、あまりもらえないなと<br />
思いつつも、まあしょうがないと<br />
自分に納得させて売りオプションを<br />
立てたのですが１週間も立たないうちに<br />
プレミアムが0.14ドルも上がっています。</p>
<p>結果論になってしまいますが、<br />
わずか数日待てば28ドル<br />
余計にプレミアムを貰えていたことになります。<br />
(0.39 &#8211; 0.25) * 200 = 28 ドル</p>
<p>オプション取引でも焦りは禁物ですね。<br />
「オプションを持っていない期間は機会損失になる」<br />
というのは焦りからでた発想でした。</p>
<p>値上がりしている今の状況こそ、<br />
機会損失だなと思います。</p>
<p>いずれにしてもしばらくは様子を見ます。</p>
<p>期限が６月中旬までのオプションなので<br />
それまでにまた値下がりすることが<br />
あるかもしれませんし。</p>
<p>また値下がりしないままなら<br />
今のオプションを決済して<br />
ちょっと先の期限のオプションを<br />
売り立ててプレミアムを<br />
手に入れるというのもありですね。</p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/03/31/uso-option.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">420</post-id>	</item>
		<item>
		<title>原油価格が下がったのでUSOコールオプション売りを決済したよ</title>
		<link>https://fx.ichizo.biz/2017/03/27/optiontrade.html</link>
					<comments>https://fx.ichizo.biz/2017/03/27/optiontrade.html#respond</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Mon, 27 Mar 2017 14:39:03 +0000</pubDate>
				<category><![CDATA[オプション]]></category>
		<category><![CDATA[オプション取引]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=417</guid>

					<description><![CDATA[USOオプション価格が下落、コールオプションの売りを決済 アメリカの証券会社、Firstradeで投資している オプション取引の報告です。 Firstradeでは、USO（United States  ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<h2>USOオプション価格が下落、コールオプションの売りを決済</h2>
<p>アメリカの証券会社、Firstradeで投資している<br />
オプション取引の報告です。</p>
<p>Firstradeでは、USO（United States Oil ETF）の現物を<br />
保持していて、コールオプションの売りを行う<br />
カバードコールを行っています。</p>
<p>2月16日にUSOの2017/05/19期限、11.00ドルの<br />
Callオプションの売りを行いました。</p>
<p>USOの現物は、200持っていますので、<br />
オプションの売りでオープンしたのは<br />
2単位です。</p>
<p>2017/05/19期限、11.00ドルのCallオプションを<br />
2月16日に0.40ドルの単価で売れました。</p>
<p>単価0.40ドルのコールオプションを2単位<br />
売れたので、0.40 × 200 = 80ドルから<br />
手数料の6.34ドルを差し引いた73.66ドルを得ました。</p>
<p>このコールオプションは5/19期限で、<br />
期限まで保持してもいいと思っていたのですが、<br />
思ったよりもUSOの価格が落ちていて、<br />
売りで入ったコールオプションの価格が<br />
0.04ドルにまで落ちていました。</p>
<p>これ以上は下がりようがない、<br />
下がっても0.04ドルのみということで、<br />
決済することにしました。</p>
<p>注文を出したのが3/24で、<br />
0.04ドルの買い注文はすぐに決済されました。</p>
<p>0.04ドルの買戻しなので、<br />
0.04 × 200 = 8ドルに<br />
手数料の6.34ドルを加えた14.34ドルを支払いました。</p>
<p>今回の取引で、<br />
73.66 － 14.34 = 59.32ドルの収益となりました。</p>
<p>保持しているUSOの現物200が約10ドルですので、<br />
59.32 ÷ 2000 = 2.97%<br />
の利益率となりました。</p>
<p>2月16日から3月24日までの1カ月ちょっとの<br />
取引で2.97%の利益率ですから<br />
中々良い結果でした。</p>
<p>オプション取引（カバードコール）の<br />
よいところは、取引を始める時（売る時）と<br />
閉じるとき（買う時）のみ取引を行い、<br />
後はほぼ放置でよいというところです。</p>
<p>取引を行わない間は数日に１回程度<br />
現物の価格をチェックする程度です。</p>
<p>今回のようにうまい具合に現物価格が<br />
下がってくれれば決済してしまって<br />
利益を確定させることもできます。</p>
<p>私のやり方は、期限が３カ月ほど先の<br />
コールオプションのうち、現在の現物価格の<br />
5%ぐらい上のものを売り、<br />
それを保持するというものです。</p>
<p>USOはシェールオイルの影響で<br />
10ドル程度まで値下がりしており、<br />
またUnited States Oil ETFですから<br />
個別株のように倒産するリスクもありません。</p>
<p>原油価格ですので、値動きのニュースも<br />
入りやすいというメリットがあります。</p>
<p>ただ、最近は朝鮮半島の動向が不透明に<br />
なってきていますので、<br />
有事の際には原油価格がドンと上がる<br />
という可能性もなくはありません。<br />
（そうゆう急激な値上げに備えるための<br />
　カバードコールではありますが）</p>
<p>あとは、最近USOのボラティリティが<br />
小さくなってきているのか<br />
どうもオプション価格が<br />
抑えられているように感じます。</p>
<p>今後、その辺にも注視していきます。</p>
<p>で、2月にオープンしたコールオプションの<br />
売りを決済したので、<br />
次のコールオプション売りの注文を出しました。</p>
<p>USOの6月16日期限、11.00ドルのコールオプションの<br />
売り注文を3月24日に出しました。</p>
<p>これもすぐに0.25ドルで2単位約定しました。<br />
0.25 × 200 = 50ドルから手数料の6.25ドルを<br />
差し引いた43.75ドルを得ました。</p>
<p>これについても今後の取引を報告します。</p>
<p>そういえば、Firstradeの手数料が安くなっています。<br />
オプションの2単位の取引で、当初は8.45ドルしていたのが、<br />
最近は6.34もしくは6.25ドルと2ドルちょっと下がっています。</p>
<p>これは素直にうれしいですね。</p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/03/27/optiontrade.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">417</post-id>	</item>
		<item>
		<title>ビットコインの価格情報を取得するシェルをCakePHP3で作ってみたよ</title>
		<link>https://fx.ichizo.biz/2017/03/27/bitcoin-ticker-cakephp3.html</link>
					<comments>https://fx.ichizo.biz/2017/03/27/bitcoin-ticker-cakephp3.html#respond</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Sun, 26 Mar 2017 15:26:02 +0000</pubDate>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ビットコイン]]></category>
		<category><![CDATA[bitcoin]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=414</guid>

					<description><![CDATA[ビットコインの価格情報を取得するシェルを実装してみた ビットコインのTicker情報を取得する プログラムって前に作ってなかったっけ？ というツッコミを頂いた方、 本当にありがとうございます。 実は以 ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<h2>ビットコインの価格情報を取得するシェルを実装してみた</h2>
<p>ビットコインのTicker情報を取得する<br />
プログラムって前に作ってなかったっけ？<br />
というツッコミを頂いた方、<br />
本当にありがとうございます。</p>
<p>実は以前Pythonで同じようなものを実装しました。<br />
↓以前の記事<br />
<a href="http://fx.ichizo.biz/2017/03/08/bitcoin-ticker.html">ビットコインTicker情報を取得するプログラムをPythonで作ったよ</a></p>
<p>今回はCakePHP3を使って同じようなものを作ってみました。</p>
<p>なぜ今回わざわざCakePHP3を使って<br />
実装したのかといいますと、<br />
取得したTicker情報を表示させる<br />
システムを作りたい<br />
（価格情報をグラフで表示させたい）<br />
ためです。</p>
<p>現在使用しているWEBサーバーは、<br />
レンタルサーバーなのです。</p>
<p>Apache＋MySQLという環境なのですが、<br />
通常のよくあるレンタルサーバーなので<br />
SSHでガリガリ環境構築とかができません。</p>
<p>レンタルサーバーでWEBシステム構築というと<br />
やはりPHPがお手軽で便利なので<br />
今回これに合わせて取得する方も<br />
実装し直してみました。</p>
<p>CakePHPですが、以前は非常によく利用していました。<br />
CakePHP 1.2とかの頃です。</p>
<p>CakePHP 2でも二つ、三つほどシステムを<br />
実装したことがあります。</p>
<p>しかしそこからしばらく離れていて<br />
気がつけばバージョン3が<br />
リリースされているではありませんか。</p>
<p>これは試してみるしかない！<br />
という単純な理由でCakePHP3での実装となりました。</p>
<p>早速CakePHP3のソースをダウンロードしてと、<br />
ダウンロードを開いたところから面喰いました。</p>
<p>ダウンロードボタンをクリックしても<br />
ダウンロードされないではありませんか。</p>
<p>で、そのページに記載されている内容を<br />
読んでみるとcomposerを使えと書かれています。</p>
<p>ん？composer？<br />
何それ？<br />
という状態でした。</p>
<p>初めてさわるcomposerでしたが、<br />
手順通りに進めると意外に<br />
あっさりとインストールが完了しました。</p>
<p>データベースを作成して<br />
config/app.php を作成して<br />
tmpやlogsフォルダの権限を変更すれば<br />
設定は完了です。</p>
<p>さすがはCakePHPです。<br />
この辺の手軽さは相変わらずでした。</p>
<h3><i class="fa fa-check-circle"></i><span>テーブルを作成する</span></h3>
<p>最初に、取得したTicker情報を<br />
保存するテーブルを作成します。</p>
<p>各ビットコイン取引所ごとに<br />
１テーブルずつ用意します。</p>
<p>各ビットコイン取引所のAPIから<br />
返ってきた値をそのまま<br />
DBに突っ込む形なので<br />
テーブル構成はAPIの返り値に合わせています。</p>
<p>以下のSQLでテーブルを作成します。</p>
<p></p><pre class="crayon-plain-tag">CREATE TABLE bitflyers (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    product_code VARCHAR(10),
    timestamp datetime DEFAULT NULL,
    tick_id INT,
    best_bid DECIMAL(10.3),
    best_ask DECIMAL(10.3),
    best_bid_size DECIMAL(5.1),
    best_ask_size DECIMAL(5.1),
    total_bid_depth DECIMAL(15.8),
    total_ask_depth DECIMAL(15.8),
    ltp DECIMAL(10.1),
    volume DECIMAL(15.8),
    volume_by_product DECIMAL(15.8),
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE coinchecks (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    last DECIMAL(10.3),
    bid DECIMAL(10.3),
    ask DECIMAL(10.3),
    high DECIMAL(10.3),
    low DECIMAL(10.3),
    volume DECIMAL(13.8),
    timestamp datetime,
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE quoines (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    product_type VARCHAR(20),
    code VARCHAR(8),
    name VARCHAR(20),
    market_ask DECIMAL(10.3),
    market_bid DECIMAL(10.3),
    indicator smallint,
    currency VARCHAR(4),
    currency_pair_code VARCHAR(8),
    symbol VARCHAR(2),
    fiat_minimum_withdraw DECIMAL(10.3),
    pusher_channel VARCHAR(32),
    taker_fee DECIMAL(5.2),
    maker_fee DECIMAL(5.2),
    low_market_bid DECIMAL(10.3),
    high_market_ask DECIMAL(10.3),
    volume_24h DECIMAL(15.8),
    last_price_24h DECIMAL(10.3),
    last_traded_price DECIMAL(10.3),
    last_traded_quantity DECIMAL(12.8),
    quoted_currency VARCHAR(4),
    base_currency VARCHAR(4),
    exchange_rate DECIMAL(22.20),
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE zaifs (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    last DECIMAL(10.3),
    high DECIMAL(10.3),
    low DECIMAL(10.3),
    vwap DECIMAL(10.3),
    volume DECIMAL(15.8),
    bid DECIMAL(10.3),
    ask DECIMAL(10.3),
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE btcboxs (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    high DECIMAL(10.3),
    low DECIMAL(10.3),
    buy DECIMAL(10.3),
    sell DECIMAL(10.3),
    last DECIMAL(10.3),
    vol DECIMAL(15.8),
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE krakens (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    buy DECIMAL(10.3),
    buy_size DECIMAL(8.3),
    sell DECIMAL(10.3),
    sell_size DECIMAL(8.3),
    last DECIMAL(10.3),
    last_size DECIMAL(8.3),
    vol DECIMAL(15.8),
    vol_24 DECIMAL(15.8),
    vwap DECIMAL(10.3),
    vwap_24 DECIMAL(10.3),
    low DECIMAL(10.3),
    low_24 DECIMAL(10.3),
    high DECIMAL(10.3),
    high_24 DECIMAL(10.3),
    open DECIMAL(10.3),
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);


CREATE TABLE bitbanks (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sell DECIMAL(10.3),
    buy DECIMAL(10.3),
    high DECIMAL(10.3),
    low DECIMAL(10.3),
    last DECIMAL(10.3),
    vol DECIMAL(15.8),
    timestamp INT,
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);</pre><p></p>
<h3><i class="fa fa-check-circle"></i><span>Modelを焼く</span></h3>
<p>テーブルを作成できたので<br />
bakeでModelを焼けないか調べてみます。</p>
<p>するとやっぱりありました。</p>
<p>「bin/cake bake」で焼けるようです。</p>
<p>とりあえず「bin/cake bake」と打つと<br />
以下のように表示されます。</p>
<p></p><pre class="crayon-plain-tag">$ bin/cake bake

Welcome to CakePHP v3.1.14 Console
---------------------------------------------------------------
App : src
Path: /home/hoge/src/
PHP : 5.4.16
---------------------------------------------------------------
The following commands can be used to generate skeleton code for your application.

Available bake commands:

- all
- behavior
- cell
- component
- controller
- fixture
- form
- helper
- mailer
- migration
- migration_diff
- migration_snapshot
- model
- plugin
- seed
- shell
- shell_helper
- template
- test

By using `cake bake [name]` you can invoke a specific bake task.</pre><p></p>
<p>今回はモデルを作りたいので、<br />
bin/cake bake model と打ちます。</p>
<p></p><pre class="crayon-plain-tag">$ bin/cake bake model

Welcome to CakePHP v3.1.14 Console
---------------------------------------------------------------
App : src
Path: /home/hoge/src/
PHP : 5.4.16
---------------------------------------------------------------
Choose a model to bake from the following:
- Bitbanks
- Bitflyers
- Btcboxs
- Coinchecks
- Krakens
- Quoines
- Zaifs</pre><p></p>
<p>bin/cake bake model [モデル名]<br />
と打てばよいようです。</p>
<p></p><pre class="crayon-plain-tag">bin/cake bake model Bitbanks
bin/cake bake model Bitflyers</pre><p></p>
<p>など、作成したテーブル分だけ実行します。</p>
<h3><i class="fa fa-check-circle"></i><span>シェルの作成</span></h3>
<p>モデルができたので、<br />
次はシェルを作ります。</p>
<p>最初のひな型もbakeで作ります。</p>
<p></p><pre class="crayon-plain-tag">$ bin/cake bake shell

Welcome to CakePHP v3.1.14 Console
---------------------------------------------------------------
App : src
Path: /home/hoge/src/
PHP : 5.4.16
---------------------------------------------------------------
Error: You must provide a name to bake a shell</pre><p></p>
<p>シェルを焼くときには、<br />
シェルの名前を指定するようです。</p>
<p></p><pre class="crayon-plain-tag">$ bin/cake bake shell bitflyer</pre><p></p>
<p>とすれば、シェルファイルが自動で作成されます。</p>
<h3><i class="fa fa-check-circle"></i><span>ソースを編集</span></h3>
<p>bakeで焼いたソースは<br />
srcフォルダ以下にあります。</p>
<p>bakeで焼いたシェルファイルを<br />
落としてローカルで開きます。</p>
<p>で、以下のように各ビットコイン<br />
取引所ごとに作成していきます。</p>
<p>bitFlyerの情報取得</p>
<p></p><pre class="crayon-plain-tag">&lt;?php
namespace App\Shell;

use Cake\Console\Shell;

/**
 * Bitflyer shell command.
 */
class BitflyerShell extends Shell
{

    public function initialize()
    {
        parent::initialize();
        $this-&gt;loadModel('Bitflyers');
    }

    /**
     * main() method.
     *
     * @return bool|int Success or error code.
     */
    public function main() 
    {
        $url = "https://api.bitflyer.jp/v1/ticker?product_code=BTC_JPY";

        $conn = curl_init();

        curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($conn, CURLOPT_URL, $url);

        $result = curl_exec($conn);

        curl_close($conn);

        $ticker = json_decode($result);

        $bitflyer = $this-&gt;Bitflyers-&gt;newEntity();
        if (!empty($ticker)) {
            $bitflyer-&gt;product_code = $ticker-&gt;product_code;
            $bitflyer-&gt;timestamp = $ticker-&gt;timestamp;
            $bitflyer-&gt;tick_id = $ticker-&gt;tick_id;
            $bitflyer-&gt;best_bid = $ticker-&gt;best_bid;
            $bitflyer-&gt;best_ask = $ticker-&gt;best_ask;
            $bitflyer-&gt;best_bid_size = $ticker-&gt;best_bid_size;
            $bitflyer-&gt;best_ask_size = $ticker-&gt;best_ask_size;
            $bitflyer-&gt;total_bid_depth = $ticker-&gt;total_bid_depth;
            $bitflyer-&gt;total_ask_depth = $ticker-&gt;total_ask_depth;
            $bitflyer-&gt;ltp = $ticker-&gt;ltp;
            $bitflyer-&gt;volume = $ticker-&gt;volume;
            $bitflyer-&gt;volume_by_product = $ticker-&gt;volume_by_product;
            $bitflyer-&gt;created = date('Y-m-d H:i:s');
            if ($this-&gt;Bitflyers-&gt;save($bitflyer)) {
            } else {
                $this-&gt;out("Error!");
            }
        }
    }
}</pre><p></p>
<p>coincheckの情報取得</p>
<p></p><pre class="crayon-plain-tag">&lt;?php
namespace App\Shell;

use Cake\Console\Shell;

/**
 * Coincheck shell command.
 */
class CoincheckShell extends Shell
{

    public function initialize()
    {
        parent::initialize();
        $this-&gt;loadModel('Coinchecks');
    }

    /**
     * main() method.
     *
     * @return bool|int Success or error code.
     */
    public function main()
    {
        $url = "https://coincheck.com/api/ticker";

        $conn = curl_init();

        curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($conn, CURLOPT_URL, $url);

        $result = curl_exec($conn);

        curl_close($conn);

        $ticker = json_decode($result);

        $coincheck = $this-&gt;Coinchecks-&gt;newEntity();
        if (!empty($ticker)) {
            $coincheck-&gt;last = $ticker-&gt;last;
            $coincheck-&gt;bid = $ticker-&gt;bid;
            $coincheck-&gt;ask = $ticker-&gt;ask;
            $coincheck-&gt;high = $ticker-&gt;high;
            $coincheck-&gt;low = $ticker-&gt;low;
            $coincheck-&gt;volume = $ticker-&gt;volume;
            $coincheck-&gt;timestamp = $ticker-&gt;timestamp;
            $coincheck-&gt;created = date('Y-m-d H:i:s');
            if ($this-&gt;Coinchecks-&gt;save($coincheck)) {
            } else {
                $this-&gt;out("Error!");
            }
        }
    }
}</pre><p></p>
<p>QUOINEの情報取得</p>
<p></p><pre class="crayon-plain-tag">&lt;?php
namespace App\Shell;

use Cake\Console\Shell;

/**
 * Quoine shell command.
 */
class QuoineShell extends Shell
{

    public function initialize()
    {
        parent::initialize();
        $this-&gt;loadModel('Quoines');
    }

    /**
     * main() method.
     *
     * @return bool|int Success or error code.
     */
    public function main()
    {
        $url = "https://api.quoine.com/products/5";

        $conn = curl_init();

        curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($conn, CURLOPT_URL, $url);

        $result = curl_exec($conn);

        curl_close($conn);

        $ticker = json_decode($result);

        $quoine = $this-&gt;Quoines-&gt;newEntity();
        if (!empty($ticker)) {
            $quoine-&gt;product_type = $ticker-&gt;product_type;
            $quoine-&gt;code = $ticker-&gt;code;
            $quoine-&gt;name = $ticker-&gt;name;
            $quoine-&gt;market_ask = $ticker-&gt;market_ask;
            $quoine-&gt;market_bid = $ticker-&gt;market_bid;
            $quoine-&gt;indicator = $ticker-&gt;indicator;
            $quoine-&gt;currency = $ticker-&gt;currency;
            $quoine-&gt;currency_pair_code = $ticker-&gt;currency_pair_code;
            $quoine-&gt;symbol = $ticker-&gt;symbol;
            $quoine-&gt;fiat_minimum_withdraw = $ticker-&gt;fiat_minimum_withdraw;
            $quoine-&gt;pusher_channel = $ticker-&gt;pusher_channel;
            $quoine-&gt;taker_fee = $ticker-&gt;taker_fee;
            $quoine-&gt;maker_fee = $ticker-&gt;maker_fee;
            $quoine-&gt;low_market_bid = $ticker-&gt;low_market_bid;
            $quoine-&gt;high_market_ask = $ticker-&gt;high_market_ask;
            $quoine-&gt;volume_24h = $ticker-&gt;volume_24h;
            $quoine-&gt;last_price_24h = $ticker-&gt;last_price_24h;
            $quoine-&gt;last_traded_price = $ticker-&gt;last_traded_price;
            $quoine-&gt;last_traded_quantity = $ticker-&gt;last_traded_quantity;
            $quoine-&gt;quoted_currency = $ticker-&gt;quoted_currency;
            $quoine-&gt;base_currency = $ticker-&gt;base_currency;
            $quoine-&gt;exchange_rate = $ticker-&gt;exchange_rate;
            $quoine-&gt;created = date('Y-m-d H:i:s');

            if ($this-&gt;Quoines-&gt;save($quoine)) {
            } else {
                $this-&gt;out("Error!");
            }
        }
    }
}</pre><p></p>
<p>Zaifの情報取得</p>
<p></p><pre class="crayon-plain-tag">&lt;?php
namespace App\Shell;

use Cake\Console\Shell;

/**
 * Zaif shell command.
 */
class ZaifShell extends Shell
{

    public function initialize()
    {
        parent::initialize();
        $this-&gt;loadModel('Zaifs');
    }

    /**
     * main() method.
     *
     * @return bool|int Success or error code.
     */
    public function main()
    {
        $url = "https://api.zaif.jp/api/1/ticker/btc_jpy";

        $conn = curl_init();

        curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($conn, CURLOPT_URL, $url);

        $result = curl_exec($conn);

        curl_close($conn);

        $ticker = json_decode($result);

        $zaif = $this-&gt;Zaifs-&gt;newEntity();
        if (!empty($ticker)) {
            $zaif-&gt;last = $ticker-&gt;last;
            $zaif-&gt;high = $ticker-&gt;high;
            $zaif-&gt;low = $ticker-&gt;low;
            $zaif-&gt;vwap = $ticker-&gt;vwap;
            $zaif-&gt;volume = $ticker-&gt;volume;
            $zaif-&gt;bid = $ticker-&gt;bid;
            $zaif-&gt;ask = $ticker-&gt;ask;
            $zaif-&gt;created = date('Y-m-d H:i:s');

            if ($this-&gt;Zaifs-&gt;save($zaif)) {
            } else {
                $this-&gt;out("Error!");
            }
        }
    }
}</pre><p></p>
<p>BtcBoxの情報取得</p>
<p></p><pre class="crayon-plain-tag">&lt;?php
namespace App\Shell;

use Cake\Console\Shell;

/**
 * Btcbox shell command.
 */
class BtcboxShell extends Shell
{

    public function initialize()
    {
        parent::initialize();
        $this-&gt;loadModel('Btcboxs');
    }

    /**
     * main() method.
     *
     * @return bool|int Success or error code.
     */
    public function main()
    {
        $url = "https://www.btcbox.co.jp/api/v1/ticker/";

        $conn = curl_init();

        curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($conn, CURLOPT_URL, $url);

        $result = curl_exec($conn);

        curl_close($conn);

        $ticker = json_decode($result);

        $btcbox = $this-&gt;Btcboxs-&gt;newEntity();
        if (!empty($ticker)) {
            $btcbox-&gt;high = $ticker-&gt;high;
            $btcbox-&gt;low = $ticker-&gt;low;
            $btcbox-&gt;buy = $ticker-&gt;buy;
            $btcbox-&gt;sell = $ticker-&gt;sell;
            $btcbox-&gt;last = $ticker-&gt;last;
            $btcbox-&gt;vol = $ticker-&gt;vol;
            $btcbox-&gt;created = date('Y-m-d H:i:s');

            if ($this-&gt;Btcboxs-&gt;save($btcbox)) {
            } else {
                $this-&gt;out("Error!");
            }
        }
    }
}</pre><p></p>
<p>Krakenの情報取得</p>
<p></p><pre class="crayon-plain-tag">&lt;?php
namespace App\Shell;

use Cake\Console\Shell;

/**
 * Kraken shell command.
 */
class KrakenShell extends Shell
{

    public function initialize()
    {
        parent::initialize();
        $this-&gt;loadModel('Krakens');
    }

    /**
     * main() method.
     *
     * @return bool|int Success or error code.
     */
    public function main()
    {
        $url = "https://api.kraken.com/0/public/Ticker?pair=XXBTZJPY";

        $conn = curl_init();

        curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($conn, CURLOPT_URL, $url);

        $result = curl_exec($conn);

        curl_close($conn);

        $ticker = json_decode($result);
        var_dump($ticker-&gt;result-&gt;XXBTZJPY);

        $kraken = $this-&gt;Krakens-&gt;newEntity();
        if (!empty($ticker)) {
            $kraken-&gt;buy = $ticker-&gt;result-&gt;XXBTZJPY-&gt;a[0];
            $kraken-&gt;buy_size = $ticker-&gt;result-&gt;XXBTZJPY-&gt;a[2];
            $kraken-&gt;sell = $ticker-&gt;result-&gt;XXBTZJPY-&gt;b[0];
            $kraken-&gt;sell_size = $ticker-&gt;result-&gt;XXBTZJPY-&gt;b[2];
            $kraken-&gt;last = $ticker-&gt;result-&gt;XXBTZJPY-&gt;c[0];
            $kraken-&gt;last_size = $ticker-&gt;result-&gt;XXBTZJPY-&gt;c[1];
            $kraken-&gt;vol = $ticker-&gt;result-&gt;XXBTZJPY-&gt;v[0];
            $kraken-&gt;vol_24 = $ticker-&gt;result-&gt;XXBTZJPY-&gt;v[1];
            $kraken-&gt;vwap = $ticker-&gt;result-&gt;XXBTZJPY-&gt;p[0];
            $kraken-&gt;vwap_24 = $ticker-&gt;result-&gt;XXBTZJPY-&gt;p[1];
            $kraken-&gt;low = $ticker-&gt;result-&gt;XXBTZJPY-&gt;l[0];
            $kraken-&gt;low_24 = $ticker-&gt;result-&gt;XXBTZJPY-&gt;l[1];
            $kraken-&gt;high = $ticker-&gt;result-&gt;XXBTZJPY-&gt;h[0];
            $kraken-&gt;high_24 = $ticker-&gt;result-&gt;XXBTZJPY-&gt;h[1];
            $kraken-&gt;open = $ticker-&gt;result-&gt;XXBTZJPY-&gt;o;
            $kraken-&gt;created = date('Y-m-d H:i:s');

            if ($this-&gt;Krakens-&gt;save($kraken)) {
            } else {
                $this-&gt;out("Error!");
            }
        }
    }
}</pre><p></p>
<p>Bitbankの情報取得</p>
<p></p><pre class="crayon-plain-tag">&lt;?php
namespace App\Shell;

use Cake\Console\Shell;

/**
 * Bitbank shell command.
 */
class BitbankShell extends Shell
{

    public function initialize()
    {
        parent::initialize();
        $this-&gt;loadModel('Bitbanks');
    }

    /**
     * main() method.
     *
     * @return bool|int Success or error code.
     */
    public function main()
    {
        $url = "https://public.bitbank.cc/btc_jpy/ticker";

        $conn = curl_init();

        curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($conn, CURLOPT_URL, $url);

        $result = curl_exec($conn);

        curl_close($conn);

        $ticker = json_decode($result);

        $bitbank = $this-&gt;Bitbanks-&gt;newEntity();
        if (!empty($ticker)) {
            $bitbank-&gt;sell = $ticker-&gt;data-&gt;sell;
            $bitbank-&gt;buy = $ticker-&gt;data-&gt;buy;
            $bitbank-&gt;high = $ticker-&gt;data-&gt;high;
            $bitbank-&gt;low = $ticker-&gt;data-&gt;low;
            $bitbank-&gt;last = $ticker-&gt;data-&gt;last;
            $bitbank-&gt;vol = $ticker-&gt;data-&gt;vol;
            $bitbank-&gt;timestamp = $ticker-&gt;data-&gt;timestamp;
            $bitbank-&gt;created = date('Y-m-d H:i:s');
            if ($this-&gt;Bitbanks-&gt;save($bitbank)) {
            } else {
                $this-&gt;out("Error!");
            }
        }
    }
}</pre><p></p>
<p>以上で各ビットコイン取引所のTicker情報を<br />
取得するシェルが完成しました。</p>
<h3><i class="fa fa-check-circle"></i><span>シェルの実行</span></h3>
<p>シェルを実行するには、以下のコマンドを実行します。</p>
<p></p><pre class="crayon-plain-tag">bin/cake kraken</pre><p></p>
<p>これで各シェルを定期的に実行すれば<br />
各ビットコイン取引所のTicker情報を<br />
DBに保存できます。</p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/03/27/bitcoin-ticker-cakephp3.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">414</post-id>	</item>
		<item>
		<title>ビットコインの裁定取引用自動売買プログラムでウェイウェイするはずが・・・</title>
		<link>https://fx.ichizo.biz/2017/03/25/bitcoin-arbitrage.html</link>
					<comments>https://fx.ichizo.biz/2017/03/25/bitcoin-arbitrage.html#comments</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Fri, 24 Mar 2017 16:12:34 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[システムトレード]]></category>
		<category><![CDATA[ビットコイン]]></category>
		<category><![CDATA[bitcoin]]></category>
		<category><![CDATA[裁定取引]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=411</guid>

					<description><![CDATA[ビットコインの裁定取引を行う自動売買プログラムを作ってみたけれど 裁定取引というのは、アービトラージともいって 同一の価値を持つ商品の一時的な価格差を利用して 高い方を売り、安い方を買ってその価格差で ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<h2>ビットコインの裁定取引を行う自動売買プログラムを作ってみたけれど</h2>
<p>裁定取引というのは、アービトラージともいって<br />
同一の価値を持つ商品の一時的な価格差を利用して<br />
高い方を売り、安い方を買ってその価格差で<br />
利益を得るというものです。</p>
<p>ご存知の通りビットコインの取引所はいくつか存在しています。<br />
同じ1BTCでも、取引所ごとに取引されている価格というのは<br />
若干異なります。</p>
<p>各取引所で取引される価格<br />
bidは売値、askは買値であり、<br />
各取引所ごとにbidとaskの価格が<br />
設定されています。</p>
<p>それぞれの取引所では当然の事ながら<br />
スプレッドがあり、<br />
ask（買値）はbid（売値）よりも<br />
高くなっています。</p>
<p>ところが取引所が複数あることによって<br />
買値が売値よりも高いという関係性が<br />
崩れることがあります。</p>
<p>同じ1BTCに対して、<br />
売値の方が買値よりも高いということが起こります。</p>
<p>例えば、同じタイミングで<br />
QUOINEでaskが114,007円<br />
coincheckでbidが114,325円<br />
というようなことが起こりえます。</p>
<p>この場合、<br />
114,007円で買い<br />
114,325円で売る<br />
ということになります。</p>
<p>差額の318円が利益になるという訳ですね。</p>
<p>将来のビットコインの値動きなど<br />
予想する必要もなく、<br />
取引所間に価格差さえあれば利益を得られる訳です。</p>
<p>「絶対に儲かるじゃん！」<br />
「ビットコインでウェイウェイできるぞ！」<br />
と喜び勇んで自動売買プログラムを作りました。<br />
（ウェイウェイの例：http://kabumatome.doorblog.jp/tag/%E3%82%AA%E3%83%97%E3%82%B6%E3%82%A4%E3%83%AB）</p>
<p>このブログで紹介したビットコイン取引所のAPIを<br />
呼び出すプログラムも、この自動売買プログラムで<br />
利用するためのものです。</p>
<p>自動売買プログラムといっても難しいものじゃありません。<br />
各取引所のAPIを呼び出して価格情報を取得します。</p>
<p>そして各ビットコイン取引所の<br />
bid（売値）とask（買値）を比較して<br />
買値よりも売値の方が高くなっている場合、<br />
売注文と買注文を同タイミングで行う訳です。</p>
<p>プログラムを作りながら<br />
各ビットコイン取引所に口座を作りました。</p>
<p>まずはテスト運用をするために<br />
各取引所に5,000円ずつ入金しました。<br />
（5,000円の半分はビットコインで持っておきます）</p>
<p>微調整を行いながら自動売買プログラムを<br />
修正していきました。</p>
<p>修正を繰り返して自動売買ができるところまで完成しました。</p>
<p>ここでふと、いくらつぎ込んだらいくら儲かるのかを<br />
計算してみることにしました。</p>
<p>ずっと気になっていたのは手数料です。<br />
ビットコインの売買手数料だけではなく、<br />
ビットコインの送金手数料、<br />
日本円を引き出すときの手数料等です。</p>
<p>裁定取引は価格差を狙うものなので、<br />
1回の取引で大きな利益を出せるものではありません。</p>
<p>微々たる利益の取引を何度も何度も繰り返すことで<br />
利益を積み重ねていくものです。</p>
<p>ですので、手数料が投資結果に大きく影響してきます。</p>
<p>各ビットコイン取引所の手数料は<br />
<a href="http://fx.ichizo.biz/2017/03/15/bitcoin-fee.html">以前書いた記事</a>を参考にしてください。</p>
<p>これを見ると、売買手数料について<br />
大きな負担にはならないことが分かります。<br />
QUOINEとcoincheckは0<br />
Zaifに至っては-0.01%<br />
bitFlyerの高いものでも0.15%</p>
<p>ビットコインの裁定取引で気を付けなければならないのは<br />
偏りが発生する可能性があることです。</p>
<p>自動売買プログラムを開発はしたのですが、<br />
これまでのところ、まだ手動でしか実行していません。</p>
<p>手動で動かした範囲だけでも偏りがあることが分かりました。<br />
具体的には、QUOINEが他のビットコイン取引所と比べて<br />
低い価格で遷移しているようだということです。</p>
<p>ビットコインの買注文が入る（askの価格が低い）のが<br />
大抵QUOINEになります。</p>
<p>逆の売注文については、coincheckかZaifのどちらかです。<br />
（たまにbitFlyerも入ります）</p>
<p>つまり、買注文に関しては大抵QUOINEで約定するということです。</p>
<p>QUOINEは低い相場で推移しているので、<br />
現状だと売注文になる頻度は低くなります。</p>
<p>QUOINEが買注文ばかりだと、<br />
ここに日本円をどんどん追加していく必要があります。</p>
<p>そしてこの口座にはビットコインが貯まっていきます。</p>
<p>ここで先ほどの<a href="http://fx.ichizo.biz/2017/03/15/bitcoin-fee.html">各ビットコイン取引所ごとの手数料表</a>を<br />
見て頂きたいのですが、非常にありがたいことに<br />
QUOINEのビットコイン出金手数料は0.00%です。</p>
<p>買注文でQUOINEに貯まったビットコインは<br />
ビットコインの送金で他の取引所口座に送金してやります。<br />
そうすると、裁定取引の売注文で使えるようになります。</p>
<p>そのための送金手数料がQUOINEでは0円ということです。<br />
これは非常にありがたいことです。</p>
<p>ここで問題になるのは、日本円をQUOINE口座に<br />
入れ続けなければならないということです。</p>
<p>それには、Zaifやcoincheckなどでビットコインを<br />
売って得た日本円をQUOINE口座に入れる必要があります。</p>
<p>ビットコイン取引所への日本円の入金は、<br />
口座が住信SBIネット銀行のところが多く、<br />
こちらも住信SBIネット銀行の口座を持っていれば<br />
ネットで振り込む際の振込手数料は0円でした。<br />
（QUOINEだけ日本円入金の手続きが済んでいないので<br />
　まだ入金手続きができておらず確認できていません。<br />
　確認でき次第また当ブログで紹介します）</p>
<p>日本円の入金については、「別途銀行手数料」と書いていますが、<br />
多くのビットコイン取引所では実質0円です。<br />
（住信SBIネット銀行を使う前提）</p>
<p>これも非常にありがたいですね。</p>
<p>問題は<strong>日本円を引き出す方</strong>です。</p>
<p>これには1回あたり350円～500円程度かかります。<br />
この金額は、少額で裁定取引を行っている場合には<br />
かなり大きな負担になります。</p>
<p>ちょっとシミュレーションしてみました。</p>
<p>例えば１回 0.05 BTCの単価で裁定取引を行う場合を考えます。<br />
この0.05 BTCは、1 BTCが125,000円の相場のときには6,250円に値します。</p>
<p>次に裁定取引を行う条件を、価格差が1,000円あったときとします。<br />
この場合、価格差の1,000円分が利益に相当します。<br />
ただ、この場合の1,000円の価格差は 1 BTC（125,000円）に対するものです。</p>
<p>0.05 BTCで取引を行う場合は、<br />
1,000円 × 0.05 = 50円<br />
が利益になります。</p>
<p>6,250円の裁定取引で50円の利益になります。<br />
売りと買いでそれぞれ6,250円ずつ、<br />
トータルで12,500円の資産に対して<br />
50円の利益なので、１回の取引での<br />
利益率は0.4%になります。</p>
<p>これはそれほど悪い取引ではなさそうです。</p>
<p>問題は出金手数料です。<br />
１回で50円の利益を得られたとして、<br />
出金手数料の500円を得るためには<br />
10回の裁定取引を行う必要があります。</p>
<p>10回行ってやっと出金手数料分が稼げるという計算です。<br />
ただ、これだと利益0円で取引する意味がなくなってしまいます。</p>
<p>投資として考えるなら、少なくとも<br />
出金手数料の10倍程度を取引単位にしたいことろです。</p>
<p>5,000円の利益が得られたら日本円を１回引き出すイメージです。</p>
<p>50円の利益から5,000円ですから、<br />
少なくとも100回は裁定取引を行う必要があります。</p>
<p>100回の裁定取引自体は、自動売買プログラムを<br />
実行させていれば問題なく達成できる回数でしょう。</p>
<p>問題は投資資金です。<br />
6,250円 × 100 = 625,000円<br />
が片道の投資資金で必要になります。</p>
<p>裁定取引を行うためには、<br />
同じ額のビットコインを持っておく必要がありますので、<br />
少なくとも120万円は投資資金として欲しいところです。</p>
<p>今、手元にビットコインに投資できる<br />
120万円があるかというと・・・</p>
<p>ありません・・・。</p>
<p>私の投資資金は、昨年ほぼ<a href="http://fx.ichizo.biz/2017/02/14/option-kekka.html">オプション取引に突っ込みました</a>。</p>
<p>これは、アメリカの証券会社Firstradeに口座を作って<br />
そこに送金して取引しています。</p>
<p>USDで海外の証券会社に送金しているので、<br />
両替と送金手数料がかかっています。</p>
<p>ですので、そう簡単に手元に戻せません。<br />
（というかしばらく戻す気はありません）</p>
<p>裁定取引を行うための潤沢な資金はありませんが、<br />
せっかく作った自動売買プログラムをそのまま<br />
お蔵入りにさせるのももったいない。</p>
<p>売りと買いが各取引所に万遍なくあれば、<br />
（取引に偏りがなければ）<br />
そもそも資金を移動させる必要性もなくなります。</p>
<p>ということは、資金の偏りのせいで<br />
売買頻度は落ち込むとは思われますが、<br />
その確率は0ではありません。</p>
<p>少額ですがすでに各ビットコイン取引所に<br />
日本円を入金してしまっているということと、<br />
実験の意味も込めて自動取引プログラムを<br />
稼働させてみたいということもあるので、<br />
とりあえずは運用開始してみることにします。</p>
<p>ビットコインが値下がりしなければ<br />
損をすることもないはずなので<br />
（プログラムが意図通りに動けば）<br />
自動裁定取引プログラムを運用しながら<br />
その経過を本ブログで報告していきたいと思います。</p>
<p>と言っても自動実行する環境を用意できていません。<br />
昔、古いパソコンにLinuxをインストールしたものがあったので<br />
それを引っ張り出して環境設定してみようと思っています。</p>
<h2>利用しているビットコイン取引所</h2>
<p><a href="https://bitflyer.jp/Lightning?bf=o5hnpsqk" target="_blank"><img src="https://bitflyer.jp/Images/Affiliate/affi_fxlp_468x60.gif" alt="bitFlyer ビットコインを始めるなら安心・安全な取引所で"></a></p>
<p><a href="https://zaif.jp?ac=byviq7igm0" rel="nofollow"><img src="https://d2p8taqyjofgrq.cloudfront.net/images/affiliate/banner/zaif_A_728x90.png?ac=byviq7igm0" /></a></p>
<p><a href="https://coincheck.com/?c=MJAvMvnu1ms" target="_blank"><img src="https://coincheck.com/images/affiliates/01_cc_banner_201702_480x220.png" alt="日本で一番簡単にビットコインが買える取引所 coincheck bitcoin"></a></p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/03/25/bitcoin-arbitrage.html/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">411</post-id>	</item>
		<item>
		<title>XServer上でPython環境（Anaconda）を使えるように設定したメモ</title>
		<link>https://fx.ichizo.biz/2017/03/24/xserver-python-anaconda.html</link>
					<comments>https://fx.ichizo.biz/2017/03/24/xserver-python-anaconda.html#comments</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Fri, 24 Mar 2017 04:32:09 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Anaconda]]></category>
		<category><![CDATA[XServer]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=407</guid>

					<description><![CDATA[XServer上にPython環境を構築する レンタルサーバーのXServer上で Pythonを実行できるように Anacondaをインストールします。 XServerでは、レンタルサーバーでありな ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<h2>XServer上にPython環境を構築する</h2>
<p>レンタルサーバーのXServer上で<br />
Pythonを実行できるように<br />
Anacondaをインストールします。</p>
<p><a href="https://px.a8.net/svt/ejp?a8mat=2TEN99+A1E8U2+CO4+103AOX" target="_blank" rel="nofollow"><br />
<img border="0" width="728" height="90" alt="" src="https://www21.a8.net/svt/bgt?aid=170324541607&#038;wid=006&#038;eno=01&#038;mid=s00000001642006062000&#038;mc=1"></a><br />
<img border="0" width="1" height="1" src="https://www12.a8.net/0.gif?a8mat=2TEN99+A1E8U2+CO4+103AOX" alt=""></p>
<p>XServerでは、レンタルサーバーでありながら<br />
SSHを使えるので、SSHで接続して<br />
Anacondaのインストールを行います。</p>
<p>とは言っても扱えるのは契約している<br />
ホームディレクトリ以下ですので、<br />
pyenvでPython環境を構築します。</p>
<h3><i class="fa fa-check-circle"></i><span>Gitをインストール</span></h3>
<p>ということで、pyenvを導入したいのですが、<br />
このためにはgitが必要ですので、<br />
最初にgitをインストールします。</p>
<p>ただ、このままではgitをインストールできないので、<br />
この前にgettextとcurlを導入します。</p>
<h4>gettextのインストール</h4>
<p>インストール用に、ホームディレクトリ<br />
直下にtmpとoptディレクトリを作成しておきます。</p>
<p></p><pre class="crayon-plain-tag">mkdir tmp opt</pre><p></p>
<p>tmpに移動して、gettextインストールファイルをダウンロードします。</p>
<p></p><pre class="crayon-plain-tag">wget http://ftp.gnu.org/pub/gnu/gettext/gettext-latest.tar.gz</pre><p></p>
<p>ダウンロードしたら解凍します。</p>
<p></p><pre class="crayon-plain-tag">tar zxvf gettext-latest.tar.gz</pre><p></p>
<p>gettextをインストールします。</p>
<p></p><pre class="crayon-plain-tag">cd gettext-0.19.8.1/
./configure --prefix=/home/[ユーザ名]/opt
make
make install</pre><p></p>
<p>gettextのインストールを確認します。</p>
<p></p><pre class="crayon-plain-tag">~/opt/bin/gettext --version
gettext (GNU gettext-runtime) 0.19.8.1
Copyright (C) 1995-1997, 2000-2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

[参考訳]
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 &lt;http://gnu.org/licenses/gpl.html&gt;
これはフリー・ソフトウェアです. 改変と再配布は自由です.
法で許された範囲内で無保証です.
作者 Ulrich Drepper.</pre><p></p>
<p>gettextにパスを通します。</p>
<p></p><pre class="crayon-plain-tag">cd
vi .bashrc
export PATH=$PATH:$HOME/opt/bin</pre><p></p>
<h4>curlのインストール</h4>
<p>続いてcurlをインストールします。</p>
<p></p><pre class="crayon-plain-tag">cd
cd tmp

wget http://curl.haxx.se/download/curl-7.53.1.tar.gz
tar zxvf curl-7.53.1.tar.gz
cd  curl-7.53.1
./configure --prefix=/home/[ユーザ名]/opt
make
make install</pre><p></p>
<p>インストールを確認します。</p>
<p></p><pre class="crayon-plain-tag">curl -V
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.21 Basic ECC zlib/1.2.7 libidn/1.28 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp 
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets</pre><p></p>
<h4>gitのインストール</h4>
<p>いよいよ本題のgitのインストールです。</p>
<p>gitインストール用ファイルをダウンロードします。</p>
<p></p><pre class="crayon-plain-tag">cd
cd tmp
wget https://github.com/git/git/archive/master.zip</pre><p></p>
<p>ダウンロードしたファイルを解凍します。</p>
<p></p><pre class="crayon-plain-tag">unzip master.zip
cd git-master
autoconf
./configure --prefix=/home/[ユーザ名]/opt --with-curl=/home/[ユーザ名]/opt --with-expat=/home/[ユーザ名]/opt
make -i all
make -i install</pre><p></p>
<p>gitのインストールを確認します。</p>
<p></p><pre class="crayon-plain-tag">git --version
git version 1.8.3.1</pre><p></p>
<h3><i class="fa fa-check-circle"></i><span>pyenvをインストールする</span></h3>
<p>gitをインストールできたので、gitを利用して<br />
pyenvをインストールします。</p>
<p></p><pre class="crayon-plain-tag">git clone git://github.com/yyuu/pyenv.git ~/.pyenv</pre><p></p>
<p>ホームディレクトリにある.bash_profileを編集します。</p>
<p></p><pre class="crayon-plain-tag">cd
vi .bash_profile</pre><p></p>
<p>以下の２行を追加します。</p>
<p></p><pre class="crayon-plain-tag">export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"</pre><p></p>
<h3><i class="fa fa-check-circle"></i><span>anacondaをインストールする</span></h3>
<p>続いてAnacondaをインストールします。<br />
pyenvでインストールできるバージョンを調べます。</p>
<p></p><pre class="crayon-plain-tag">pyenv install -l

Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  2.6.6
  2.6.7
  2.6.8
  2.6.9
  2.7-dev
  2.7
  2.7.1
  2.7.2
  2.7.3
  2.7.4
  2.7.5
  2.7.6
  2.7.7
  2.7.8
  2.7.9
  2.7.10
  2.7.11
  2.7.12
  2.7.13
  3.0.1
  3.1
  3.1.1
  3.1.2
  3.1.3
  3.1.4
  3.1.5
  3.2-dev
  3.2
  3.2.1
  3.2.2
  3.2.3
  3.2.4
  3.2.5
  3.2.6
  3.3.0
  3.3-dev
  3.3.1
  3.3.2
  3.3.3
  3.3.4
  3.3.5
  3.3.6
  3.4.0
  3.4-dev
  3.4.1
  3.4.2
  3.4.3
  3.4.4
  3.4.5
  3.4.6
  3.5.0
  3.5-dev
  3.5.1
  3.5.2
  3.5.3
  3.6.0
  3.6-dev
  3.6.1
  3.7-dev
  anaconda-1.4.0
  anaconda-1.5.0
  anaconda-1.5.1
  anaconda-1.6.0
  anaconda-1.6.1
  anaconda-1.7.0
  anaconda-1.8.0
  anaconda-1.9.0
  anaconda-1.9.1
  anaconda-1.9.2
  anaconda-2.0.0
  anaconda-2.0.1
  anaconda-2.1.0
  anaconda-2.2.0
  anaconda-2.3.0
  anaconda-2.4.0
  anaconda-4.0.0
  anaconda2-2.4.0
  anaconda2-2.4.1
  anaconda2-2.5.0
  anaconda2-4.0.0
  anaconda2-4.1.0
  anaconda2-4.1.1
  anaconda2-4.2.0
  anaconda2-4.3.0
  anaconda3-2.0.0
  anaconda3-2.0.1
  anaconda3-2.1.0
  anaconda3-2.2.0
  anaconda3-2.3.0
  anaconda3-2.4.0
  anaconda3-2.4.1
  anaconda3-2.5.0
  anaconda3-4.0.0
  anaconda3-4.1.0
  anaconda3-4.1.1
  anaconda3-4.2.0
  anaconda3-4.3.0
  ironpython-dev
  ironpython-2.7.4
  ironpython-2.7.5
  ironpython-2.7.6.3
  ironpython-2.7.7
  jython-dev
  jython-2.5.0
  jython-2.5-dev
  jython-2.5.1
  jython-2.5.2
  jython-2.5.3
  jython-2.5.4-rc1
  jython-2.7.0
  jython-2.7.1b1
  jython-2.7.1b2
  jython-2.7.1b3
  miniconda-latest
  miniconda-2.2.2
  miniconda-3.0.0
  miniconda-3.0.4
  miniconda-3.0.5
  miniconda-3.3.0
  miniconda-3.4.2
  miniconda-3.7.0
  miniconda-3.8.3
  miniconda-3.9.1
  miniconda-3.10.1
  miniconda-3.16.0
  miniconda-3.18.3
  miniconda2-latest
  miniconda2-3.18.3
  miniconda2-3.19.0
  miniconda2-4.0.5
  miniconda2-4.1.11
  miniconda3-latest
  miniconda3-2.2.2
  miniconda3-3.0.0
  miniconda3-3.0.4
  miniconda3-3.0.5
  miniconda3-3.3.0
  miniconda3-3.4.2
  miniconda3-3.7.0
  miniconda3-3.8.3
  miniconda3-3.9.1
  miniconda3-3.10.1
  miniconda3-3.16.0
  miniconda3-3.18.3
  miniconda3-3.19.0
  miniconda3-4.0.5
  miniconda3-4.1.11
  pypy-c-jit-latest
  pypy-c-nojit-latest
  pypy-dev
  pypy-stm-2.3
  pypy-portable-2.3.1
  pypy-portable-2.4
  pypy-portable-2.5
  pypy-portable-2.5.1
  pypy-stm-2.5.1
  pypy-portable-2.6
  pypy-portable-2.6.1
  pypy-portable-4.0
  pypy-portable-4.0.1
  pypy-portable-5.0
  pypy-portable-5.0.1
  pypy-portable-5.1
  pypy-portable-5.1.1
  pypy-portable-5.3.1
  pypy-portable-5.4
  pypy-portable-5.4.1
  pypy-portable-5.6.0
  pypy-portable-5.7.0
  pypy-1.5-src
  pypy-1.5
  pypy-1.6
  pypy-1.7-dev
  pypy-1.7
  pypy-1.8-dev
  pypy-1.8
  pypy-1.9-dev
  pypy-1.9
  pypy-2.0-dev
  pypy-2.0-src
  pypy-2.0
  pypy-2.0.1-src
  pypy-2.0.1
  pypy-2.0.2-src
  pypy-2.0.2
  pypy-2.1-src
  pypy-2.1
  pypy-2.2-src
  pypy-2.2
  pypy-2.2.1-src
  pypy-2.2.1
  pypy-2.3-src
  pypy-2.3
  pypy-2.3.1-src
  pypy-2.3.1
  pypy-2.4.0-src
  pypy-2.4.0
  pypy-2.4-beta1-src
  pypy-2.4-beta1
  pypy-2.5.0-src
  pypy-2.5.0
  pypy-2.5.1-src
  pypy-2.5.1
  pypy-2.6.0-src
  pypy-2.6.0
  pypy-2.6.1-src
  pypy-2.6.1
  pypy-4.0.0-src
  pypy-4.0.0
  pypy-4.0.1-src
  pypy-4.0.1
  pypy-5.0.0-src
  pypy-5.0.0
  pypy-5.0.1-src
  pypy-5.0.1
  pypy-5.1-src
  pypy-5.1
  pypy-5.1.1-src
  pypy-5.1.1
  pypy-5.3-src
  pypy-5.3
  pypy-5.3.1-src
  pypy-5.3.1
  pypy-5.4-src
  pypy-5.4
  pypy-5.4.1-src
  pypy-5.4.1
  pypy-5.6.0-src
  pypy-5.6.0
  pypy-5.7.0-src
  pypy-5.7.0
  pypy2-5.3-src
  pypy2-5.3
  pypy2-5.3.1-src
  pypy2-5.3.1
  pypy2-5.4-src
  pypy2-5.4
  pypy2-5.4.1-src
  pypy2-5.4.1
  pypy2-5.6.0-src
  pypy2-5.6.0
  pypy2-5.7.0-src
  pypy2-5.7.0
  pypy3-dev
  pypy3-portable-2.3.1
  pypy3-portable-2.4
  pypy3-portable-5.7.0
  pypy3-2.3.1-src
  pypy3-2.3.1
  pypy3-2.4.0-src
  pypy3-2.4.0
  pypy3.3-5.2-alpha1-src
  pypy3.3-5.2-alpha1
  pypy3.3-5.5-alpha-src
  pypy3.3-5.5-alpha
  pypy3.5-c-jit-latest
  pypy3.5-5.7-beta-src
  pypy3.5-5.7-beta
  pyston-0.5.1
  pyston-0.6.0
  pyston-0.6.1
  stackless-dev
  stackless-2.7-dev
  stackless-2.7.2
  stackless-2.7.3
  stackless-2.7.4
  stackless-2.7.5
  stackless-2.7.6
  stackless-2.7.7
  stackless-2.7.8
  stackless-2.7.9
  stackless-2.7.10
  stackless-2.7.11
  stackless-2.7.12
  stackless-3.2-dev
  stackless-3.2.2
  stackless-3.2.5
  stackless-3.3-dev
  stackless-3.3.5
  stackless-3.4.1
  stackless-3.4.2</pre><p></p>
<p>anaconda3-4.3.0をインストールします。</p>
<p></p><pre class="crayon-plain-tag">pyenv install anaconda3-4.3.0

Downloading Anaconda3-4.3.0-Linux-x86_64.sh...
-&gt; https://repo.continuum.io/archive/Anaconda3-4.3.0-Linux-x86_64.sh
Installing Anaconda3-4.3.0-Linux-x86_64...
Installed Anaconda3-4.3.0-Linux-x86_64 to /home/hoge/.pyenv/versions/anaconda3-4.3.0</pre><p></p>
<p>anaconda3-4.3.0を使用するように設定します。</p>
<p>プロジェクト用のディレクトリを作成して、<br />
ここで使用するバージョンを指定します。</p>
<p></p><pre class="crayon-plain-tag">cd
mkdir testenv
cd testenv
pyenv local anaconda3-4.3.0</pre><p></p>
<p>バージョンの確認</p>
<p></p><pre class="crayon-plain-tag">pyenv version
anaconda3-4.3.0 (set by /home/hoge/testenv/.python-version)</pre><p></p>
<p>以上でXServer上でAnacondaが使えるようになりました。</p>
<p><a href="https://px.a8.net/svt/ejp?a8mat=2TEN99+A1E8U2+CO4+103AOX" target="_blank" rel="nofollow"><br />
<img border="0" width="728" height="90" alt="" src="https://www21.a8.net/svt/bgt?aid=170324541607&#038;wid=006&#038;eno=01&#038;mid=s00000001642006062000&#038;mc=1"></a><br />
<img border="0" width="1" height="1" src="https://www12.a8.net/0.gif?a8mat=2TEN99+A1E8U2+CO4+103AOX" alt=""></p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/03/24/xserver-python-anaconda.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">407</post-id>	</item>
		<item>
		<title>Zaifのマイナス手数料が魅力的！ビットコインの手数料をまとめてみた</title>
		<link>https://fx.ichizo.biz/2017/03/15/bitcoin-fee.html</link>
					<comments>https://fx.ichizo.biz/2017/03/15/bitcoin-fee.html#respond</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Wed, 15 Mar 2017 01:19:47 +0000</pubDate>
				<category><![CDATA[ビットコイン]]></category>
		<category><![CDATA[bitcoin]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=402</guid>

					<description><![CDATA[ビットコインの各取引所ごとの手数料をまとめてみた 現在、ビットコインの売買ができる 取引所はいくつかありますが、 その手数料は結構バラバラです。 今回は各取引所ごとに 手数料がどのように設定されている ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>ビットコインの各取引所ごとの手数料をまとめてみた</p>
<p>現在、ビットコインの売買ができる<br />
取引所はいくつかありますが、<br />
その手数料は結構バラバラです。</p>
<p>今回は各取引所ごとに<br />
手数料がどのように設定されているか<br />
確認してみました。</p>
<p>注：2017年3月15日現在の情報です。<br />
手数料は変動する可能性がありますので、<br />
取引の際には必ず各取引所にて<br />
ご確認の上実施するようにしてください。</p>
<table width="900">
<tbody>
<tr>
<td width="106"></td>
<td width="168">Zaif</td>
<td width="152">bitFlyer</td>
<td width="168">QUOINE</td>
<td width="138">coincheck</td>
<td width="168">BTCBOX</td>
</tr>
<tr>
<td>取引手数料</td>
<td>-0.01%</td>
<td width="152">0.15%（※１）</td>
<td>0.00%</td>
<td>0.00%</td>
<td>0.20%</td>
</tr>
<tr>
<td>入金手数料</td>
<td width="168">銀行振込手数料を負担</td>
<td width="152">銀行振込手数料を負担<br />
（クイック入金は324 円(税込)/件）</td>
<td>銀行振込手数料を負担</td>
<td width="138">銀行振込手数料を負担</td>
<td>銀行振込手数料を負担</td>
</tr>
<tr>
<td>出金手数料</td>
<td width="168">350円（50万円未満）<br />
756円（50万円以上）</td>
<td width="152">432円（3万円以上）<br />
216円（3万円未満）<br />
※三井住友銀行</td>
<td>500円</td>
<td>400円</td>
<td width="168">出金額の0.5%<br />
最低400円(税込)</td>
</tr>
<tr>
<td width="106">ビットコイン<br />
出金手数料</td>
<td>0.0002BTC</td>
<td>0.0002BTC</td>
<td>0.00%</td>
<td>0.0005BTC</td>
<td>0.001BTC</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>※１　bitFlyer Lightning 現物で、<br />
直近30日間の取引量が10万円未満の場合<br />
取引量が増えると手数料は下がっていき<br />
最低で0.01%（5億円以上）です。<br />
ビットコイン販売所、Lightning FXは無料です。</p>
<h3><i class="fa fa-check-circle"></i><span>売買手数料</span></h3>
<p>一番気になるのはやはり<br />
ビットコインの売買時にかかる<br />
取引手数料でしょう。</p>
<p>まず驚くのはZaifの「<strong>-0.01%</strong>」です。<br />
手数料がマイナスというのは初めてみました・・・。</p>
<p>取引すると、余分に0.01%付くということですよね。<br />
すごいです。</p>
<p>ただこれもキャンペーン的に期間限定で<br />
行っているという可能性もありますので<br />
お得なのは今のうちだけかもしれません。</p>
<p>QUOINEとcoinchekは0%です。</p>
<p>売買に手数料はかかりません。<br />
これも非常にうれしいですね。</p>
<p>高頻度で取引を行う時に<br />
売買手数料がかかるのは<br />
ボディブローのように効いてきますから。</p>
<p>あとは、bitFlyerが0.15%です。<br />
直近30日間の取引量が増えると<br />
手数料率も下がっていきます。<br />
これが取引量が50万円を超えると<br />
0.12%まで下がります。</p>
<p>最低は0.01%ですが、<br />
取引量5億円以上と途方もない金額です。</p>
<p>BTCBOXは0.2%です。<br />
十分低いようにも思えますが、<br />
150,000円で1BTCを購入した場合、<br />
手数料は300円になります。<br />
これは結構痛いですね。</p>
<h3><i class="fa fa-check-circle"></i><span>入金手数料</span></h3>
<p>ビットコインを購入するためには<br />
一度日本円を取引所に入金しないといけません。</p>
<p>入金時の手数料ですが、<br />
通常の銀行振込であれば<br />
取引所の方で手数料を取るところはありません。<br />
ただし、銀行側の振込手数料は自己負担です。</p>
<p>ネット証券とかだと提携している<br />
金融機関からの入金手数料は無料<br />
（証券会社側が負担）のところもありますが、<br />
これまで取引所に負担させるのは<br />
さすがに酷でしょうか。</p>
<h3><i class="fa fa-check-circle"></i><span>出金手数料</span></h3>
<p>ビットコイン取引で運よく儲かったら<br />
日本円で引き出す必要があります。</p>
<p>これはまあ、手数料取るでしょ普通、<br />
ということで各取引所とも大体近い金額です。</p>
<p>気になるのはBTCBOXの出金額の0.5%、<br />
最低400円(税込)というところですね。</p>
<p>少額だと400円ですみますが、<br />
80,000円を超えると400円以上になります。</p>
<p>大きな金額を出したいときは嫌ですね。</p>
<h3><i class="fa fa-check-circle"></i><span>ビットコイン出金手数料</span></h3>
<p>ビットコインを他の取引所に送る場合にも<br />
手数料がかかります。</p>
<p>QUOINEの0%は良心的で魅力的ですね。</p>
<p>他はZaifとbitFlyerが0.0002BTC<br />
coincheckが0.0005BTCと<br />
まあ近い金額です。</p>
<p>BTCBOXは0.001BTCとここだけ1桁違います。<br />
ここは日本円で出金するときは0.5%で<br />
ビットコインで出金するときも<br />
手数料が余計に取られますね・・・。</p>
<h2>まとめ</h2>
<p>手数料を見るだけでも各取引所の特徴が分かりますね。</p>
<p>一番魅力的なのはZaifの取引手数料<strong>「-0.01%」</strong>です。<br />
期間限定のキャンペーン的な意味合いもありそうですが、<br />
0%でもなかなか魅力できです。</p>
<p><a href="https://zaif.jp?ac=byviq7igm0" rel="nofollow"><img src="https://d2p8taqyjofgrq.cloudfront.net/images/affiliate/banner/zaif_A_728x90.png?ac=byviq7igm0" /></a></p>
<p>次はQUOINEで、取引手数料とビットコイン出金手数料が無料です。<br />
取引手数料とビットコイン出金手数料の両方が無料<br />
というのは非常にうれしいですね。<br />
費用がかかるのは日本円での出金ぐらいですが、<br />
スプレッドで儲けているのでしょうか？<br />
<a href="https://www.quoine.com/?lang=ja" target="_blank">QUOINE</a></p>
<p>この次は、coincheckの取引手数料無料です。<br />
ビットコイン出金手数料が若干高いですが、<br />
取引手数料が無料と考えれば<br />
それほど悪いレートではありません。</p>
<p><a href="https://coincheck.com/?c=MJAvMvnu1ms" target="_blank"><img src="https://coincheck.com/images/affiliates/01_cc_banner_201702_480x220.png" alt="日本で一番簡単にビットコインが買える取引所 coincheck bitcoin"></a></p>
<p>その次はbitFlyerです。<br />
bitFlyerは、CMもやっていて、QUICK、三菱UFJキャピタル、<br />
三井住友キャピタル、電通デジタル、リクルート、GMOなど<br />
有名企業から出資を受けているという<br />
今日本で一番有名な取引所と言えるでしょう。</p>
<p>bitFlyerでビットコインの現物取引を行う場合は、<br />
上記のようにそこまで魅力的ではありませんが、<br />
実はbitFlyerではビットコインのFX取引ができて、<br />
そちらは売買手数料が無料で<br />
外為取引と同じように売りから<br />
入ることもできるので、<br />
こちらの方がおススメです。<br />
（レバレッジもかけられます）</p>
<p><a href="https://bitflyer.jp/Lightning?bf=o5hnpsqk" target="_blank"><img src="https://bitflyer.jp/Images/Affiliate/affi_fxlp_468x60.gif" alt="bitFlyer ビットコインを始めるなら安心・安全な取引所で"></a></p>
<p>残るはBTCBOXですが、<br />
取引手数料も高いし出金手数料も高いと<br />
ここで取引するメリットはなさそうです。<br />
レートがかなり違うということがあれば別ですが・・・。</p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/03/15/bitcoin-fee.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">402</post-id>	</item>
		<item>
		<title>QUOINEのAPIを使ってビットコインの板情報、資産情報を取得してみたよ</title>
		<link>https://fx.ichizo.biz/2017/03/13/quoine-api.html</link>
					<comments>https://fx.ichizo.biz/2017/03/13/quoine-api.html#comments</comments>
		
		<dc:creator><![CDATA[一蔵]]></dc:creator>
		<pubDate>Mon, 13 Mar 2017 13:15:51 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[システムトレード]]></category>
		<category><![CDATA[ビットコイン]]></category>
		<category><![CDATA[bitcoin]]></category>
		<guid isPermaLink="false">http://fx.ichizo.biz/?p=397</guid>

					<description><![CDATA[QUOINEのAPIを使ってビットコインの板情報、資産情報を取得 bitFlyer、coincheck、Zaifに引き続いて QUOINEのAPIを使ってビットコインの 板情報、資産情報を取得、 また ... <p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<h2>QUOINEのAPIを使ってビットコインの板情報、資産情報を取得</h2>
<p>bitFlyer、coincheck、Zaifに引き続いて<br />
QUOINEのAPIを使ってビットコインの<br />
板情報、資産情報を取得、<br />
また新規注文を出す処理を実装してみました。</p>
<p><a href="http://fx.ichizo.biz/2017/03/12/bitcoin-api-pandas.html">前回</a>の記事でQUOINEのAPIへの接続が上手くいかないと書きましたが、<br />
本日再度試したところ何事もなく接続できました。</p>
<p>特にソースコードを書き換えることなく<br />
「どういうエラーが出てたっけ？」<br />
ということを確認するために<br />
動かしてみたら接続できてしまったという経緯です。</p>
<p>ということでソースコードです。</p>
<p></p><pre class="crayon-plain-tag"># -*- coding: utf-8 -*-
"""
Created on Thu Mar  9 12:00:27 2017

@author: ichizo
"""

import json
import requests
import time
import jwt
import util

class quoineApi:
    def __init__(self):
        self.token_id = 'トークンID'
        self.api_secret = 'APIシークレット'
        self.api_endpoint = 'https://api.quoine.com'

    def get_api_call(self,path):
        timestamp = str(int(time.time()))
        auth_payload = {
                'path': path,
                'nonce': timestamp,
                'token_id': self.token_id
        }
        sign = jwt.encode(auth_payload, self.api_secret, algorithm='HS256')
        request_data=requests.get(
            self.api_endpoint+path
            ,headers = {
                'X-Quoine-API-Version': '2',
                'X-Quoine-Auth': sign,
                'Content-Type': 'application/json'
            })
        return request_data

    def post_api_call(self,path,body):
        body = json.dumps(body)
        timestamp = str(int(time.time()))
        auth_payload = {
                'path': path,
                'nonce': timestamp,
                'token_id': self.token_id
        }
        sign = jwt.encode(auth_payload, self.api_secret, algorithm='HS256')
        request_data=requests.post(
            self.api_endpoint+path
            ,data = body
            ,headers = {
                'X-Quoine-API-Version': '2',
                'X-Quoine-Auth': sign,
                'Content-Type': 'application/json'
            })
        return request_data

    def get_board(self):
        api = quoineApi()
        result = api.get_api_call('/products/5/price_levels').json()
        bids = util.util.list_to_pd(result['buy_price_levels'],'qo',False)
        asks = util.util.list_to_pd(result['sell_price_levels'],'qo',True)
        return bids,asks

    def get_balance(self):
        api = quoineApi()
        result = api.get_api_call('/accounts/balance').json()
        data = {}
        for row in result:
            if (row['currency'] == 'JPY'):
                data['jpy_amount'] = float(row['balance'])
                data['jpy_available'] = float(row['balance'])
            elif (row['currency'] == 'BTC'):
                data['btc_amount'] = float(row['balance'])
                data['btc_available'] = float(row['balance'])
        return data
    
    def order(self,data):
        api = quoineApi()
        result = api.post_api_call('/orders/',data).json()
        return result</pre><p> </p>
<p>Copyright &copy; 2020 <a href="https://fx.ichizo.biz">FX・ビットコイン・オプションのシステムトレード開発と取引録</a> All Rights Reserved.</p>]]></content:encoded>
					
					<wfw:commentRss>https://fx.ichizo.biz/2017/03/13/quoine-api.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">397</post-id>	</item>
	</channel>
</rss>
