読者です 読者をやめる 読者になる 読者になる

仮想通貨で遊ぶ日記

リスクは低く! 志も低く。そんな仮想通貨の遊び方

DashCoinには疾風怒濤の季節はやってこない?

 高値に釣り上げられてからの売り浴びせでDashCoinを高掴みさせられて、しばらく塩漬けかと萎びていたところビットコインが暴落している模様。なんでもくすぶっていた分裂騒動に大きな動きがあったみたいで、先行き不安からのポジション解消や他のコインへの持ち替えがされているのでしょう。

 相対的にDashCoinの値が上がりまくるのか、と思いきやメジャーなアルトコインが急騰しているにもかかわらず通常営業中。さすがDashCoin。投機目的で売買されているものとはワケが違うぜ。似た名前のDASHは爆上がりなのにな!

 

 開発の方は機械学習用のライブラリ、scikit-learnでできることを調べているので進捗ナシです。

 なんとか日本語のサイトだけで済ませたいのですが、どうなるんでしょうね。英語のドキュメントを読むのは大変なのですが避けられないような気がします。

 それでも情報収集をするのは、自前で苦労して書いたものがすでに実装されていたりするのを防止するためなのでやらざるをえない。ガクっと力が抜けますからね、実際にそういったことになってしまうと。

 

 しかし、機械学習ではチャートは読めても外的要因はどうしようもないんだよなぁ。そういう事態を避けるために仮想通貨取引をプログラムにやらせようとしていたのに。

 それに計算コストが高くなってくると予定が狂ってきちゃうんですよね。

 最初、そこそこ動くようになったら年額15$くらいの超激安VPSにでも突っ込んで走らせようとしていたのですよ。月額2$稼げばペイしちゃうぜー、とか低レベルな皮算用をしていたわけです。

 ところが大量の計算を要するようになると明らかにスペックが足りなくなってくる。下手をすればかなりの高スペックなものが必要になってくるかもしれないんですよね。

 

 先のことなんて心配していても仕方がないのかなぁ。実際にどんな取引プログラムができるか、もしくは完成するかもまだ分からんのに。

 余計なことは考えても仕方がないのでせこせこと開発を進めます。

機械学習でポンコツくん(仮称)がおりこうになる可能性

 使うプログラム言語を選定している際に、Python機械学習やら科学計算がが云々という説明をちらほらと見かけたのです。
 機械学習なんて言われてもチャットボットくらいしか思いつかないので、ちょっと調べてみたところデータマイニング分野の最前線に位置する技術のようで。

 もしかして過去のマーケット情報を食わせたら値動きの予想とかしてくれるのではないか、と思いつくのも自然なことです。ぐぐれば同じことをやってみた人は大勢いて自分の思いつきが後押しされているようで心強い。
 更には取り扱うのが株式やら為替ではなく、余計な外的要因が絡みづらい仮想通貨だというのもプラスに働くのではないか、という目論見もあります。
 それに、元々はごちゃごちゃと条件式を書いていく予定だったことを考えたら楽ができそうですしね。プログラムの書き方を思い出すところから始めなくてはいけない私にとっては大変助かるのです。

 問題があるとすれば、

 機械学習について私が何も知らない

 ことなんですよね。色々読んでみても触りの部分しか分からんでやんの。
 でも、まぁそれでも一応機械学習をさせてみることはできました。
 まだHitBTCからのデータ取得が手付かずなので、何か別の、簡単にデータが用意できて学習効果が分かりやすいサンプルについて考えた結果、

 足し算を教えてみた!

 何言ってんだこのバカ、と思うかもしれません。ですが単純にans = a + b;とか書いて結果が出るものでも、経験則から答えを導き出すってすごいことじゃないですか。
 小学校に入っておはじきなんかで覚えたことが一瞬でできちゃうわけですよ。
 そんなわけで実践。

 まずは足し算に使うランダムな数字とその答えをCSVで10件程度用意します。整数2ケタと小数点1ケタの足し算です。これを学習器に食わせ、同じケタでは芸がないので学習用データよりも大きな数の計算をさせるわけですが、どうなるのでしょうね。

0.0〜99.9までの数字二つとその和

9.0,73.3,82.3
19.6,86.5,106.1
0.2,48.1,48.3
5.0,94.6,99.6
92.2,55.1,147.3
30.2,38.7,68.9
39.5,80.6,120.1
72.3,82.3,154.6
78.1,99.8,177.9
58.6,99.2,157.8

 
学習データよりも桁の多い計算をさせてみる

# coding:utf-8

import pandas;
import random;
from sklearn.linear_model import LinearRegression as scimodel

# [[a, b, ans], ...]
data = pandas.read_csv('b.csv');

# 計算対象と答えを分離
samples = [];
targets = [];
for line in data.get_values():
    samples.append(line[:-1]);
    targets.append(line[-1]);

# 学習器を教育
ponkotsu = scimodel().fit(samples, targets);

# 計算させてみる
random.seed();
for i in range(0, 10):
    a = random.randrange(0, 100000) / 100;
    b = random.randrange(0, 100000) / 100;
    c = round(a + b, 2);
    predict = ponkotsu.predict([[a, b]]);
    print(str(a)+' + '+str(b)+' = '+str(predict[0])+'('+str(c)+')');

 さて、これを走らせるとどうなるか。カッコの中は普通に計算した正答になります。

:~/test$ python3 b.py
978.09 + 999.21 = 1977.3(1977.3)
183.6 + 516.79 = 700.39(700.39)
149.92 + 528.56 = 678.48(678.48)
380.26 + 270.02 = 650.28(650.28)
39.48 + 985.59 = 1025.07(1025.07)
295.65 + 8.53 = 304.18(304.18)
367.84 + 745.36 = 1113.2(1113.2)
196.29 + 184.56 = 380.85(380.85)
189.76 + 864.25 = 1054.01(1054.01)
170.29 + 821.14 = 991.43(991.43)

 なんてお利口さん! あの少ないデータから完璧に足し算をマスターしているよ。

 自分で書いたプログラムの方が合っているか分からないけどすごい!

 足し算をマスターさせたくらいでいい気になっていますが本来処理したいデータはもっと複雑です。それに私が機械学習について全く分からないのが致命的なんですよね。
 色々と調べていきながらどのように使えるか考えていく必要があります。

リアルタイムで売買データをもらってくる

 HitBTCでは外部アプリ開発のためにAPIを公開しているので、これを利用してみます。
 プログラム言語はJAVAでいいかなぁと最初思ったのですが、プログラムを書くなんてひっさしぶりすぎて、それまで覚えてきたことを確認するのも面倒なのでPythonを使ってみることに。
 簡略化記法の言語はそれに慣れてしまうと他に戻れないような気がして手を出してこなかったのですが、キーを叩く量が格段に減ってなかなかにステキ。
 
 さて、自動売買ということでリアルタイムに売買情報が受信できなければいけません。といったわけでWebSocketでの取引情報の受信をしてみました。過去のデータについては別途RESTでもらってこい、ということのようなので今回はパス。

  • プログラム
# coding: UTF-8

import websocket;

class SocketClient(object):
    def __init__(self):
        websocket.enableTrace(False);
        self.__ws = websocket.WebSocketApp("ws://api.hitbtc.com:80",
                                    on_message = self.__on_message,
                                    on_error = self.__on_error,
                                    on_close = self.__on_close);
        self.__ws.on_open = self.__on_open;
        #ws.run_forever();
    
    def run(self):
        self.__ws.run_forever();

    def __on_open(self, ws):
        print("connect");
    
    def __on_message(self, ws, message):
        print("msg: " + message);
    
    def __on_error(self, ws, error):
        print(error);
    
    def __on_close(self, ws):
        print("closed");

client = SocketClient();
client.run();
  • データ(ほんの一部)
:~/test$ python3 a.py 
connect
msg: {"MarketDataIncrementalRefresh":{"seqNo":1160560,"symbol":"LTCUSD","exchangeStatus":"working","ask":[],"bid":[{"price":"3.998","size":3}],"trade":[],"timestamp":1489590054594}}
msg: {"MarketDataIncrementalRefresh":{"seqNo":10306685,"symbol":"LTCBTC","exchangeStatus":"working","ask":[{"price":"0.00340","size":0}],"bid":[],"trade":[],"timestamp":1489590054678}}
msg: {"MarketDataIncrementalRefresh":{"seqNo":10306686,"symbol":"LTCBTC","exchangeStatus":"working","ask":[{"price":"0.00342","size":13}],"bid":[],"trade":[],"timestamp":1489590054784}}
msg: {"MarketDataIncrementalRefresh":{"seqNo":11362727,"symbol":"DASHBTC","exchangeStatus":"working","ask":[{"price":"0.078358","size":90350},{"price":"0.078359","size":0}],"bid":[{"price":"0.078355","size":0},{"price":"0.078354","size":1000},{"price":"0.078195","size":0},{"price":"0.078194","size":145350}],"trade":[],"timestamp":1489590054831}}

 実行すればでろでろとデータが流れてきます。未整形なので見づらいのは後でプログラム側で取り込んでなんとでもできるのですが、データを眺めていて気づいた。

 DashCoinに関するデータが全然流れてこないの。

 書いたプログラムがおかしいとかハブられているってわけじゃなくて、単に売買量も回数もすっくないから。色々な仮想通貨の売買ができるものだから、そっちのデータがほとんどなんですよ。
 DASHBTCとかいう通貨ペアはもりもり出てくるんだけど、残念ながらこいつは似た名前の別モノ。
 つまりは、ちまちまとDashCoinの売買だけをするつもりでこのAPIからデータをもらっても、99%以上の割合でそのまま捨てることになってしまうのですよね。過去データをRESTでもらってくるとか、socket.io Market Dataとやらではできるようでも、こちらは特に絞ってもらってくることはできない?

 どうせならビットコインをベースにして他のアルトコインの売買もすればいいんじゃないか、とも思うのですが、運転資金がそれだけ必要になってくるんですよね。

 ぶっちゃけ、お金をぶっこむ勇気がありません。

 これから作る予定のポンコツくん(仮称)がポンコツを脱するようなことがあれば検討してもいいんですが、なんだかもりもりとお金をドブに捨ててくれる未来しか見えこないんですよね。
 まぁ、APIのドキュメントをちゃんと読むのが一番先でしょうね。英語わっかんねーんだけどさ。

 といったわけで、当面の目標はデータの貰い方と、その分析部分になります。実際の売買なんて当分先になるでしょう。おっかなくてできないって。

そうだ、自動売買をしよう

 1$程度でトレードなんかができるもんか、と思うのが普通なわけですが、仮想通貨には妙に値上がりをして盛り上がっているビットコインの他にも、似たような仕組みで動いているものが掃いて捨てるほどあるのです。

 私はその中の一つである、DashCoin(DSH)というものとビットコインのトレードをやっていますが、今現在取引所として利用しているHitBTCでは1DSHで0.000006829BTC。最小単位で書けば682.9Satoshi。日本円では計算してみたらだいたい0.97円ということでした。

 

 1円以下ですってよ!

 

 少し前まではもっと安かったのですが、ある意味わかりやすい値段になったこともあって遊びやすい仮想通貨ではあります。

 

 問題があるとすれば、取引量がものすごく少ないことでしょうか。1時間に1取引あるかないか、なんてこともあるくらい市場規模が小さいんです。おそらくは他のDashCoinを売買している人も、私と同じようにマイニングで手に入れたもので試しにトレードの真似事をしているだけなのでしょう。

 はっきり言って、増えるのは楽しいのですが取引画面を眺めていても暇なんですよね。売買一往復で利ざやが数円とか良くても数十円というのも結構あほらしくなってきます。

 そこで思いついた。

 

 プログラムに売買させればいいじゃないか!

 

 手動での取引だと一日中張り付いているわけにもいかないので取引量は伸び悩みますが、プログラムであれば24時間営業も可能なわけです。珍しく相場が動いている場面も見逃さないのではないでしょうか。万が一にもそんな高性能なプログラムを完成させられたら、毎月ビール数本分くらいは稼いでくれるのではないかと思ったのです。

 

 ただ、そんなことを決心した矢先、HitBTCのDashCoin市場に明らかに自動売買みたいな動きがありまして、取引量が少ないからほんとわかりやすいんですよね。数秒間隔で売買を繰り返していたのですが、

 

 延々と高値で買って安値で売っていたんです!

 

 その時に丁度張り付いていたのが私だけだったらしく、10分程度で2$くらい儲けましたよ。そのポンコツプログラムを動かしていた人の損もその程度だったということではありますが。

 そういった失敗をしないように気をつけなければいけませんが、それ以前の問題で、取引関連の知識が全くないというのもあったりもします。何を指標にして値動きの予想をするか、自分が知らなければプログラムも書けないのです。

 

 そのへんも含めて、追々やっていくつもりなのですが、前途多難だな。

 

仮想通貨で小遣いを稼ぐことはできるのか

 と思って投げ込んだ数千円は返ってきませんでした。

 さすがに毎日数パーセントの利率が、なんて怪しいものでは本当に儲かるわけがないだろうと、たいした金額を入れなかったのが幸いではあったのですが。

 そういったわけでHYIPとか呼ばれるうんこには見切りをつけ、ちょろちょろとマイニングをしていたアルトコインとかいう、ビットコイン以外の有象無象の仮想通貨を取引所に持っていってトレードを初めてみたのです。

 すごいですよ。数日やってみただけなのですが、めちゃくちゃ儲かるんです、これが。

 

 投入資金がなんと四倍以上になっています!

 

 しかしまぁ、だからと言ってその金で祝杯を挙げられるのかというと、話は変わってきます。

 

 1$ちょいが4$半ばになっただけだから。

 

 ビール一本買ったら終わっちゃうし、出金が現在のレートでいうところの6$ちょいからってことで自由に使うこともできません。

 でも、この資金が増えていくって感覚がなんだか楽しくなってきたので、このまま端金で遊んでいるのも悪くはないような気もしているのです。

 それに、1$を4$にできるなら、4$を16$に、更に増やすこともできそうな気がしてきたので、その方法を模索しながら、万が一そんな具合で資金が増えるようなことがあれば、仮想通貨での支払いで色々試していく予定です。

 

 最初で躓いて資金を失ったら笑うしかないけどな!