soy-curd's blog

The blog is written about maebashi or sake or beer or program. [https://twitter.com/soycurd1]

Ubuntu16.04でgolangのechoを使う

まとめ

Ubuntu16.04 LTSはデフォルトでインストールされるgolangのバージョンが1.6のため、最新のechoを実行することができないので、golangのバージョンを上げる必要がある。

事象

echoがgolang1.7から入ったcontextパッケージに依存しているため、インストールに失敗する。

対処

# apt-getのリポジトリ更新
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go # -> 1.8が入る
go get -u github.com/labstack/echo

以上です。

Ubuntu16.04でgolangの開発環境Goglandのインストール

インストーラーの入手

https://www.jetbrains.com/go/download/#section=linux

JetBrainsのサイトからGoglandをダウンロードします。2017年6月時点では、EAP 9, 171.4694.35が入手できました。

インストー

tarで固められたファイルが手に入るので、解凍してください。Ubuntu16.04の場合、ダブルクリックでArchive Managerが起動しますので、Extractを実行して解凍してください。

その後、terminalを立ち上げ、解凍したディレクトリに入ってから、gogland.shを実行します。

cd {YourLikeDir}/cd Gogland-171.4694.35/bin/
./gogland.sh

その後、GUIの画面が立ち上がります。今回は初めてのインストールでしたので、Do not import settingsを選択しました。

f:id:soy-curd:20170610205622p:plain

これでインストールは完了です。

golangの設定

golangをインストールしていない場合は、まずそこから始めましょう。

sudo apt-get install golang

# bashにgopathの設定
mkdir ~/{YourLikeDir}/go
echo "export GOPATH=$HOME/Project/go" >> ~/.bashrc
echo "export PATH=$GOPATH/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

これで設定は完了です。

Goglandを使ってみる

File > New > Projectから、新規プロジェクトを作成します。 その後、Projectファイルを右クリックして、New > GoFileでgolangのソースファイルを作成します。

f:id:soy-curd:20170610213320p:plain

そして、Configure GOPATHから、GoglandにもGOPATHの設定を行います。

次に、Run > Edit configuretionsから、実行環境の設定を行います。 左上の+を押し、Go Applicationを選択してください。その後、Fileに先ほど作ったファイルを設定します。

f:id:soy-curd:20170610213045p:plain

あとは、Runを押して下のコンソールに実行結果が表示されたらOKです。

みんなのGo言語[現場で使える実践テクニック]

みんなのGo言語[現場で使える実践テクニック]

0からwindows10にPython3.6環境を構築する方法(2017/6版)

mac OSXやlinuxにはデフォルトでPythonがインストールされていますが、windowsにはインストールされていません。 今回はPythonを初めて使うwindowsユーザーがお試しですぐ触れるよう、 windowsで0からPython3.6の環境を構築する方法をまとめてみました。

環境

1. Anacondaのインストー

いきなり、判断が難しいところなのですが、windows 10ではAnacondaを用いてPythonをインストールするのが 最も手軽だという結論に至りました。

Anacondaは数値解析や科学計算のライブラリを含んだ形で配布されているPython環境なのですが、 非常に手軽にPythonを実行することができます。(環境変数の設定さえ必要ありません)

また、windowsにおいてハマるポイントとして、C言語のライブラリを含んだパッケージの導入があるかと思われます。 numpy、matplotlibなどを特にハマらずにインストールするためには、Anacondaの導入が手っ取り早いです。 (Django等を使ってwebサーバを建てたい、という方には関係ないですが)

https://www.continuum.io/downloads

リンク先にPython3.6のインストーラーがありますので、そこからダウンロードしてください。 f:id:soy-curd:20170603230920p:plain

ダウンロードが終わったら、インストーラーを実行してください。 何個か選択肢がありますが、 特にこだわりがなければ、すべてNextを押せば問題ありません。

f:id:soy-curd:20170603231146p:plain

2. Pythonの実行

Anacondaのインストールに成功したら、すぐにPythonを使うことができます。 おそらくスタートメニューには、以下のようなものがインストールされているはずです。

f:id:soy-curd:20170603231855p:plain

この中からAnaconda Promptを選んで、起動してください。

すると、以下のようにプロンプトが立ち上がるはずです。

f:id:soy-curd:20170603232350p:plain

あとはプロンプト内でpythonと入力してください。Pythonが立ち上がります。

それでは、試しになにか実行してみましょう。

f:id:soy-curd:20170604000230p:plain

Pythonが無事に動いたことが確認できました。

3. ライブラリを利用する

今回はAnacondaを利用してPythonをインストールしたので、そのままの状態で、すでにたくさんのライブラリを使うことができます。

どのようなライブラリがインストールされているかは、pip freezeというコマンドで確認することができます。

試しにこの中に入っているmatplotlibという作図ライブラリを使用してみましょう。

まずは先ほどと同じように、pythonを起動してください。 そして、

import matplotlib.pyplot as plt
import random
xs = range(100)
ys = [random.randint(0, x) for x in xs]
plt.plot(xs, ys)
plt.show()

のように、実行してみてください。すると、

f:id:soy-curd:20170603234058p:plain

上記のような画像が表示されたかと思います。このように、Pythonを使うことでグラフの描画も簡単に行うことができます。

4. おわりに

以上、windowsで0からPythonの環境を構築する方法を示しました。 このように、Pythonは非常に簡単に始めることができますので、 windowsユーザーの方も、ぜひ一度最近はやりのPythonを触ってみてください。

みんなのPython 第4版

みんなのPython 第4版

実践力を身につける Pythonの教科書

実践力を身につける Pythonの教科書

『入門ビットコインプログラミング〜Pythonによるビットコインの売買〜』をpdf販売します

第二十四回文学フリマ東京で頒布した『入門ビットコインプログラミング〜Pythonによるビットコインの売買〜』を、pdf形式で販売します。内容としては、直近で本ブログに上げた内容 + ブレイクアウト手法によるプログラミング法についての内容を追加しました。Pythonで記述されているので、Pythonを始めたばかりの方の練習になるかもしれません。興味が有る方は、購入してみてください。

(現状、ビットコイン支払いのみ可能です。日本円にして¥250円くらいになるように、システム側で調整されています。)

f:id:soy-curd:20170514105320p:plain

f:id:soy-curd:20170514105541p:plain

ビットコインで支払う

↑ここから購入可能です。

簡単安心!ビットコイン取引所 coincheck

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

ビットコインの入手は、ここ(coincheck)やzaif、bitflyerが有名です。

実践Pythonビットコイン売買プログラミング その2

第4章 ビットコインの売買をプログラムしてみよう

セットアップ

長い前準備でしたが、それではPythonを用いたプログラミングを始めましょう。

まずは、Python3.5の実行環境を用意してください。筆者はMac OSXにて実行しました。

coincheckは、api越しにビットコインの売買ができるようにapiを公開しています(https://coincheck.com/ja/documents/exchange/api)。 取引所APIは、認証の不要なPublic APIと、認証に必要なPrivate APIが用意されています。 Private APIを利用するには、APIキーページ(https://coincheck.com/ja/api_settings)にて、アクセスキーとシークレットキーを作成する必要があります。これらの情報を用いると決済等の機能が外部から可能になってしまうので、絶対に外部に漏らしてはいけません。また、誤動作を防いだり、外部にキーが漏れた場合に影響範囲を狭くしたりするため、編集リンクからAPIパーミッションを設定することができます。ここでは、自分が使う最低限の機能のみを有効にしておくべきです。

まずは、実行環境にPython用のcoincheck apiラッパーをインストールしましょう。

pip install coincheck

そして、Pythonスクリプトファイルを作成し、以下のように記述してください。

from coincheck import market

m = market.Market()
result = m.ticker()
print(result)

これを実行すると、

{'ask': 179809, 'volume': '25692.25624239',
'timestamp': 1493995535, 'bid': 179711,
'last': 179711, 'high': 186762, 'low': 163384}

というような出力が得られたかと思います。これはティッカー、つまり取引時間中のビットコインの値段を表しています。この得られた値について、coincheckのドキュメントでは以下のように説明されています。

last 最後の取引の価格

bid 現在の買い注文の最高価格

ask 現在の売り注文の最安価格

high 24時間での最高取引価格

low 24時間での最安取引価格

volume 24時間での取引量

timestamp 現在の時刻

例えば、askに注目してみましょう。この値は、179809でした。この単位は円なので、「1BTCを179809円で売りたい人がいて、その値段は全ての売りたい人の中で最安値である」ということです。つまり私たちが、179809円以上の値段で買い注文を入れたら、(売り注文の数量を超えない分は)179809円で決済させることができるということです。

常に市場のティッカーは変動しているため、定期的にこれを監視することで、その動きを知ることができます。例えばデイトレードなどで直近の値動きが知りたい場合は、bid(買い)とadk(売り)を知りたくなるでしょう。しかし、週に1、2度売買をするのみだったら、highとlowのみを知れれば良いかもしれません。暴落と暴騰のみ知りたいなら、volumeが急増したタイミングだけアラートするというやりかたも考えられます。

以下では単純に、「売値がある一定の値段になったら買い注文を入れる」というプログラムを書いてみます。

売買

coincheckにおいて、取引を行うAPIはPrivate APIなので、アクセスキーとシークレットキーを使用する必要があります。以下のプログラムにおいて、access_keyとsecret_keyの箇所は実行前にあらかじめ編集しておいてください。

from coincheck import market, order
import time

m = market.Market()
o = order.Order(
    access_key="your access key",
    secret_key="your secret key"
)

rate = 177466  # 買いたい額 ----(1)

while True:
    ticker = m.ticker()
    ask = ticker["ask"]

    # 売値が基準値を下回ったら買い
    print("ask: {}, rate: {}".format(ask, rate))
    
    # 売値が基準値を上回っている場合はスリープして待つ
    if ask >= rate:  ----(2)
        time.sleep(60)  # 60秒スリープ
        continue  # ループの最初に戻る

    result = o.buy_btc_jpy(rate=rate, amount=0.005)  # ----(3)
    if "error" in result.keys():
        print("注文が失敗しました: " + result["error"])
    else:
        print(str(rate) + "yen買い注文しました")

    break  # 注文終了

このプログラムでは、(1)において指定した額を、whileループの中の(2)でチェックしています。売値が(1)を上回っている場合、その値段では買えないのでループの最初に戻ります。売値が(1)を下回っている場合、その値段で買える可能性があるので注文を出します(4)。このようにして、売値がある一定の値段になったら買い注文をプログラムを記述することができます。

なお、(3)において、買値を指定する指値注文をしているため、実際には注文が成立しない場合があります。それが嫌な場合は、rateを指定しない成り行き注文にしてください。その時点での最低額の値段で買うことができます。ただし、rateを指定しないため予想とは異なる値で売買が成立することもあるので、注意してください。

おわりに

上のプログラムは単に指値注文をした場合とほとんど同じ挙動を示しますが、注文タイミングを制御しているため、大量に購入することをあまり他の参加者に知られたくない場合に有効かもしれません。また、制御を工夫すれば、チャートに応じて逆指値レートを上げ下げしたり、注文量を変更したりすることもできるでしょう。効率よくビットコインを売買するプログラムを作成すれば、自分の資産を増やすことも夢ではありません(もちろん、値動きによっては減ってしまうかもしれませんが)。

この記事が読者のビットコイン生活の糧となりましたら幸いです。

簡単安心!ビットコイン取引所 coincheck

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

実践Pythonビットコイン売買プログラミング その1

(以下、文学フリマで売る予定の実践Pythonビットコイン売買プログラミング(仮題)の原稿です。本記事はビットコイン初心者向けの記事になっており、記事を鵜呑みにするとビットコイン相場が崩壊した場合にfxで有り金全部溶かした顔の人状態になる可能性があります。実践する際は十分にお気をつけください。有り金全部溶かしても筆者は責任を取りかねます。)

目次

第1章 ビットコインとは

ビットコインは、Nakamoto Satoshiという人物によって考案されたとされる、暗号通貨のひとつです。 ビットコインには大きく次の3つの特徴があります。

  1. 物理的な貨幣の不在
  2. 匿名性
  3. 分散決済システム

まず、ビットコインには基本的に物理的な貨幣が存在しません。これが、仮想通貨と言われる所以です。 全ては単なる情報として存在します。ビットコインは紙に印刷することもできますが(ペーパーウォレット)、 それも秘密鍵とアドレス情報を示す文字列でしかありません。 これはコピーして他の紙に印刷すればいくらでも複製することができます。そして複製しても、ビットコイン自体が増えることはありません。つまりビットコインは、物理的実体に全く依存していないということです。

次に匿名性です。ビットコインはウォレットと呼ばれるビットコインの保管場所のアドレスさえわかれば送信することができますが、ビットコインのシステム上、アドレスと個人情報は紐付いていません。

最後に、分散決済システムです。上でビットコインのシステムと行っているものは、ブロックチェーンという技術によって実現されています。なぜこのようなものが必要なのかというと、ビットコインには全ての取引を処理する唯一のサーバ、というようなものが存在しないからです。そのかわり、ネットワークに存在する全てのユーザーの取引の履歴が、システム上に積み上がっていきます。これをブロックチェーンと言います。この取引については、数多く存在する有償のボランティアが取引の真正性を検証しています。ボランティアへの支払いはビットコインで行われ、これはビットコインのシステムから提供されます。これによって、ビットコインを取引するユーザーは、ほとんど手数料がかからなくて済みます。

それでは次の章では、実際にビットコインを入手してみましょう。

第2章 暗号通貨をマイニングしてみよう

ビットコインを入手するためのひとつの方法として、マイニング(採掘)があります。前章で有償のボランティアが取引の検証をしている、と記述しましたが、まさにその作業のことをマイニングと呼びます。しかし、ビットコイン自体のマイニングはすでに大規模な業者が大量のリソースを使って行うものとなっており、個人でマイニングすることは非常に困難です。ですので、ここでは簡単にできるビットコインに類似した他の暗号通貨をマイニングしてみましょう。

もしAndroid端末をお持ちでしたら、minergateというアプリで暗号通貨をマイニングすることができます。アプリをインストールしたら、まずはサインアップをしてください。マイニングにはネットワークの帯域を使うので、wifiでの接続が必要です。その後、好きな通過を選んで、startボタンを押すだけで、マイニングがはじまります。(下の画像では、Moneroという通貨をマイニングしています。)

f:id:soy-curd:20170505154309j:plain

マイニングをしていると、端末が熱を持つことがわかります。これはMoneroが取引の真正性を検証するために、大量の計算を行っているからです。

なお、筆者の環境ではPCで一晩マイニングしたら約0.01XMR(Moneroの単位)マイニングできました。2017/05/05現在1XMR = 3009.7 JPYなので、30円程マイニングできたことになります。

第3章 ビットコインを売買してみよう

ビットコインをもっとたくさん入手するためには、日本円で買ってしまうのが手っ取り早いです。ビットコインは、ビットコイン取引所で購入することができます。日本語が使えるサイトとしては、bitfyer, zaif, coincheck等があります。今回は取引apiが公開されているcoincheckを例として使ってみます。

coincheckでのアカウント作成

まずは、coincheckでアカウントを作ってみましょう(https://coincheck.com/?c=h1tKmxCORSY ※このリンクはアフィリエイトリンクになっていますので、こちらから登録していただけると、作者にいくらかのビットコインが還元されます。) coincheckでは、ビットコインの売買までに、本人確認書類の提出が必要になります。その後、住所確認用にハガキが自宅に送られていきます。それを受け取ると、coincheckの全ての機能が使えるようになります。金銭を扱うサイトですので、アカウント作成時は、二段階認証を設定しましょう。

ビットコインの購入

まず、日本円入金ページ(https://coincheck.com/ja/deposits)にアクセスしてください。そこに、振込先の口座が記載されていますので、それどおりに任意の額を入金してください。数千円もあれば、十分です。振込後、しばらく経つとサイトに金額が反映されます。

次に、ビットコイン購入ページ(https://coincheck.com/ja/buys)にアクセスしてください。レートという項目に、現在のビットコインの相場が書いてあります。2017/05/05時点では、182,700BTC/JPYという値でした。これは、ビットコインを1つ買うのに、182000円かかるということを意味しています。coincheckでは、0.005BTCから購入可能なので、執筆時点では最低912円で購入できました。この画面での購入は成行購入と行って、細かい値段の調整はできませんが、すぐビットコインを購入することができます。

ビットコインの使用

ビットコインは、他のビットコインのアドレスに送ることができます。coincheckでは、コインを送るページ(https://coincheck.com/ja/send)からビットコインを送金することができます。例えば筆者のビットコインウォレットのアドレスは1Mb6Vm7LxCmC3gX4yzP3qrVfiqwaMYhKySですが、これを先程のページの宛先欄に入力し、金額を指定するだけで、すぐ送金ができてしまいます。

ビットコインはこのように個人間で送る以外にも、ビットコインで品物が購入できるサイト(Bitcoinmall等)を使って、買い物もすることができます。また、ビットコインの値段は変動しますので、ビットコインの値段が上昇してからビットコインを売り、その差額を得ることもできます。(値段が下がったら損しますが。)

昨今、Line PayやBase等の決済アプリが流行の兆しを見せていますが、ビットコインを持つことでもそれに準じることができてしまいます。

第4章 ビットコインの売買をプログラムしてみよう

(続きはこちら)

soy-curd.hatenablog.com

簡単安心!ビットコイン取引所 coincheck

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

pythonのビットコイン取引ライブラリをasync/awaitで使えるようにした

coincheckというビットコイン取引所が存在していて、そこで公開されているアフィリエイトリンクを他人に踏ませることでビットコインを入手することができる。なので、coincheckが公開しているapiを使って記事を書き、ビットコインをアフィで稼ぐことにした。(coincheckに登録すると注文系のapiを使用することができるようになる)

何をしたか

最初はノンブロッキングが使いやすいnodeを選ぼうとしていたが、fxや株方面でのライブラリ、Pythonが充実しているっぽいので、Pythonを選んだ。

とりあえず先人がcoincheck apiPythonライブラリを公開していたので、それをasync/awaitを用いてノンブロッキングapiを叩けるように改造してみた。

github.com

環境

Python3.5

インストール手順

pip install aiohttp 
pip install git+https://github.com/soy-curd/aiocoincheck

サンプル

import asyncio
from coincheck import market

async def main():
    m1 = market.Market()
    result = await m1.ticker()  # await を使う場合はpython3.5以上必須
    print(result)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

{‘low’: 161305, ‘timestamp’: 1493830153, ‘volume’: ‘13704.78199805’, ‘bid’: 165964, ‘high’: 170000, ‘last’: 166024, ‘ask’: 166077}

例えばticker関数を用いると、最新のcoincheck取引所でのbid(買い)・ask(売り)等の情報を得ることができる。

補足

まだ試していないけれど、並列実行できるようになったので、売買戦略を複数並行で動かすときに、GILとかスレッドとか気にしなくてもよくなっているはず。async/awaitとaiohttpの組合せはまだ触り始めたばかりなので、今後ハマリどころがあったら追記する気がする。

他、使用方法は本家の

GitHub - kmn/coincheck: Coincheck API Library for Python

と、coincheckのapiドキュメントを眺めてください。

以下アフィリンク

簡単安心!ビットコイン取引所 coincheck

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin