やっていくログ(仮)

やっていきましょう

Twitter apiを使うためにDeveloper accountを申請する

2018/7からTwitter apiの使用が厳しくなり、ちょっと検索apiを叩こうにもDeveloper accountを作らなければならなくなったよう。

apiに関するつぶやきを検索してみると、この厳格化に対する嘆きが散見される。

しかし、やりたいことがちょっと思いついてしまったので、やるしかない。

 

とりあえず申請。

"Twitter api"でサーチすると(たぶん)一番上に出てくるDeveloperページからapplyを選択し、順に次のような項目を入力。

 

・User profile

 どのアカウントと連携させるか?

・Account details

 組織or個人(非商用)の選択

・Use case details

 どのような目的でapiを利用するのか選択

 さらに300文字以上の英作文

  1.apiの使用目的

  2.コンテンツの分析の有無と分析手法

  3.自発的なツイート・リツイート・いいねの有無

  4.取得したデータを具体的に表示するか統計的に処理して表示するか

 

申請が通ったら更新する。


追記

1時間もしないうちに許可された わいわい!

f:id:calpeace:20181203043603j:plain

 

cryptactの未分類取引と格闘する(不定期更新)

・はじめに

 cryptactは、仮想通貨取引における煩雑な税金計算をアシストしてくれる無料ツール。各取引所が提供する取引履歴をアップロードしていけば、自動で各年の収支をはじき出してくれる。

 ただ、実際には未分類取引、すなわちエラーが発生する場合があり、正確に計算するためには、そうした未分類取引をなるべく解消しなければならない。

 以下に、使っていて気付いた留意点を書きとめておく。現在進行形でまだ不明なエラーがあるので、時々更新したい。

 

Zaif

・コイン積立

 2018/11/24現在、cryptactはZaifのコイン積立に対応していないので、カスタムファイルを作って補完しなければならない。カスタムファイルのフォーマットはcryptactのサポートページから手に入る。またコイン積立の履歴はZaifのユーザーページから見ることができるが、csvなどでダウンロードできるわけではないので、手でデータを採取してくるしかない。

  

・簡単売買

 BitFlyerの販売所などの場合、販売所の売買履歴もcsvとして手に入る。しかし、zaifの簡単売買は、簡単売買のページに飛んでそこで履歴を手動で取得してこないといけない。取得した履歴をカスタムファイルに追記すると反映される。

 

Twitterチップ

 チャットチップの送受信履歴はcsvでダウンロードできるが、Twitterチップの履歴はそうではないらしい。ソーシャル設定→プロフィールと進んで履歴を取得しないといけない。しかも最新の履歴数件しか表示されていないよう。総受取チップは表示されているので、時期は不明になるが一応総額は把握できる。

 

・残額調整履歴

 ハッキングを受けたMONAやBCHの返却が11月末ごろから始まった。場合によってはハッキング時の保有コイン数の数割を日本円で返金している模様で、その履歴は残額調整履歴のところに載っている。この分もカスタムデータで調整しておかないと未分類にされてしまう。

 

・端数が怪しい

 他の取引所の履歴や送金、チップの収支、取引ボーナス、コイン積立などを補完しても消えない未分類取引がチラホラある。金額的にはごくわずかだが、ちょっと気になる。手数料計算のあたりで誤差が積もり積もっているのか…?

 

BitFlyer

・Lightning 取引履歴

 Lightningの履歴を普通にダウンロードしてくると、最近の65535件しか記載されていない。仕方がないのでデータ取得の日付範囲を指定して取得する。高頻度系botをやっている人は特に大変だと思う。また、特殊注文では、Parent orderとChild orderがそろっている取引でないと計算に含まれないようなので、それを確認しつつデータを採取しなければならない。

 

・bitbank

・取引履歴

 デフォルトの取引履歴は直近48時間分から最大500件まで取得可能。それ以前の履歴は "2日(48時間)以前のデータはこちらから検索できます" というところから同様のページに飛べるが、ここでも500件ごとにしか取得できない。高頻度系botをやっている人はめちゃくちゃ大変だと思う。

 

Pythonの浮動小数点処理とdecimalモジュール

・はじめに

cryptocurrency bot制作でしばらく悩まされていた不具合の原因が小数計算にあることに気づき、Pythonにおける浮動小数点処理を調べる必要に迫られた。decimalモジュールを利用する際の備忘録として以下にまとめる。付け焼刃なので間違っているかも。

・とりあえず使うために

まずはインポート

from decimal import * 

Decimal()の引数に数値か文字列を与える。数値で与えるとfloatと同じ。文字列で与えると10進数同様の取り扱いができる。こうすれば四則演算は普通に行ってよい。

a=Decimal(0.1) #floatとおなじ
b=Decimal('0.1') #10進数扱い
c=0.1 #float
d=Decimal(str(c)) #10進数扱い

丸め処理は.quantize()を用いる。roundingを指定することでいくつかの丸め処理が可能。とりあえずゼロ丸めだけしたかったのでその例のみ記す。quantizeの第1パラメータには揃えたい桁数を有する値をDecimal形式で与える。1E-4などで与えてもよい。第2パラメータにはroundingを指定する。指定しなければDecimalのデフォルトの丸め形式が実行される。

Decimal('0.01283').quantize(Decimal('0.01'),rounding=ROUND_DOWN) #0.01
Decimal('0.314155').quantize(Decimal('1E-2'),rounding=ROUND_DOWN) #0.31

つの丸め処理しかしない場合はデフォルトの丸め形式を指定しておくと楽そう。またデフォルトの有効桁数を指定することもできるようである。

getcontext().prec=24 #24桁にする
print(Decimal('0.00000038471942')/Decimal('0.0000312413')) #0.0123144497828195369590894
getcontext().rounding=ROUND_DOWN #切り捨てに設定
getcontext().prec=10 #10桁にする
print(Decimal('0.00000038471942')/Decimal('0.0000312413')) #0.01231444978

なお、decimalで得た数値を他の関数に与えるなどの場合はintやfloatにキャストしてあげないといけない。

・速度を調べる

floatで計算したときより速度が遅いらしいので、雑に速度を比較した。以下のようにひたすら小数を足し上げるのにかかる時間を測定。

import time
from decimal import *

start=time.time()
sum1=Decimal('0')
for i in range(1000):
    sum1+=Decimal('0.1111')
end=time.time()
print(sum1,end-start)

start2=time.time()
sum2=0
for i in range(1000):
    sum2+=0.1111
end2=time.time()
print(sum2,end2-start2)

値と実行時間の結果は以下の通り。

float合計 decimal合計 float実行時間 decimal実行時間
100回 11.110000000000026 11.1100 0.0009992123 0.0009994507
1000回 111.0999999999974 111.1000 0.0010001659 0.0009992123
10000回 1110.9999999999386 1111.0000 0.0019972324 0.0049958229
100000回 11110.00000000701 11110.0000 0.0129878521 0.0489549637
1000000回 111099.99999810797 111100.0000 0.1228837967 0.4615705013
10000000回 1110999.9999210974 1111000.0000 1.1908910275 4.4668421745

単純な足し算だからか、実行時間はほぼ線形に増加した。floatで扱ったときとdecimalで扱った時では約4倍の開きがあった。計算がより複雑になると変わってくるかもしれないが、まあメチャクチャ遅いって感じはしない。

Win10PCだけインターネットにつながらなくなった話

タイトルの通りの事案が起きた。

今後も起きるかもしれないので完全に個人的なメモ。

 

スマホは通常通り元気にWi-Fi接続できていたので、PCの問題らしかった。

再起動やら既知のネットワーク情報の削除やらをこなしてみたが復活しない。

最終的に「設定→ネットワーク→ネットワークのリセット」で接続周りの再インストールを実行すると復活した。

 

回線の速度がたいして出ないので、安物のルータを使っているが、そのあたりもそろそろ寿命が来そうでこわい。まあ情報系学生じゃないしいいかと言い訳しつつ。

iPod nano(5th edition)を初期化する回

家で眠っていたiPod nanoを某フリマアプリで売ることにした。

初期化にあたり、すんなりといかなかったのでメモ。

 

・問題

 iTunesに接続して復元(初期化)しようとすると、iPod更新プログラムをインストールすると言われるも、そのインストールが途中で失敗する。何度か繰り返しても打開しない。

 

・解決策?

 iTunesを最新版にアップデートする ←最終的にこれが有効だった模様

 ウィルスソフトを一時的に無効化する

 

どこかで同じように困っている人に捧ぐ(いるのか…?)。

仮想通貨取引所用ライブラリ ccxt を導入する

仮想通貨取引botを細々といじるにあたり、今までは取引所ごとに異なるライブラリを用いていた(e.g. pybitflyer, zaifapi)が、海外取引所などもまとめて一つのライブラリccxtで扱えるらしいので、それぞれの環境に導入した。

 

・at AWS Cloud9

 ターミナルで $sudo pip-3.6 install ccxt とすればモリモリインストールされる。

 

・at jupyter notebook

 Anaconda prompt で $pip install ccxt とすればモリモリインストールされる。あるいは白紙のnotebookで !pip install ccxt としても可能。

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools"

って怒られたので、visual studio build tools 2017 を拾ってきてから再度試したらモリモリインストールが完了した。

入門Python3 [1] [読書ログ]

・範囲

 1,2章

・概要

 型、数値、文字列、スライス、文字列組み込み関数

・メモや感想

 サクサクと読み進める。入門と銘打っているが、全くの初学者にはとっつきにくいかもしれないと感じた。より入門的な書籍はたくさんありそう。

 Windowsではcd ..で親ディレクトリに行ける(cd - の代わり)。

・不明点等

 特になし