ビットコイントレード日誌【2018年4月3日】

f:id:nepio:20180403231524p:plain

BTC底打ちの空気を感じたのでいつもよりポジション重めでロング。

f:id:nepio:20180403232122p:plain

明日以降どうなるのかよくわからないので一旦放置。

しばらく上目線なので軽めのポジションでロングから入ります。

ビットコイントレード日誌【2018年4月1日】

f:id:nepio:20180401234809p:plain

昨晩のお試しロングが昼頃ストップに引っかかりマイナスからのスタート。そこからはショートに切り替え。

f:id:nepio:20180401235028p:plain

取れた利益に対してストップによる損失の割合がでかいのが反省点・・・。

とはいえ最近のBTCの値動きだと、あまり近いところにストップ置いて放置していると確実に損するので、

ある程度耐える前提で大きな方向を決め打ちしていくしかない気も。

今日は、下の方で軽めにロングの指値入れておやすみなさい。

明日起きて指値刺さらずに上の方にいたらショート入れます。刺さってたら短期ではロング目線の予定だけど、その後のことはまた考えます。

個人的に気にしているのが、最近のgoogleの検索トレンドの変化。

bitcoinの検索ボリューム。

f:id:nepio:20180401235940p:plain

ビットコインの検索ボリューム。

f:id:nepio:20180402000023p:plain

なんとなくそろそろ検索ボリュームは一旦底なのではないかという予感。

これまでは、検索ボリュームの上下に値動きが比例したわけだけど、検索ボリュームはヨコヨコなのにビットコインは暴落・・・となるんでしょうか?

ビットコイントレード日誌【2018年3月31日】

昨年度トレードした後、取引所にそのまま残しておいた仮想通貨が結構あったので、これを機にbitflyer FXを趣味として嗜むことにした。

そのトレード履歴を残そうと思う。

f:id:nepio:20180331225159p:plain

200MAと50MAがデッドクロス。一般には長期の下げトレンドの兆候だが、一旦ここでロングを入れてみる。

ストップは過去24時間の最安値の73500円に設定。

ポジションは軽く0.1BTCのみなのでストップを割らず上に行けば積み増し、割れば下げ目線継続。

4月に入り税務や決算などの節目になりがちなのでここらでトレンド転換・・・・となって欲しい。

少なくとも国内では仮想通貨市場への新規参入者はかなり減少しており、単純に考えれば下げ相場継続だけど・・・。

もう国内の新規が抜けきったところで海外起点で上げてくれることを願うしかない気も。

FXは難しくてかなり損をしてしまったので、勝てるようになるまでは建玉をかなり減らしていこうと思う。

【solidity入門】第1回:Truffleを使ってEthereum(イーサリアム)のスマートコントラクトでお手軽Hello worldしてみよう

f:id:nepio:20180205031038p:plain

本記事では、今非常に仮想通貨界隈で注目を集めているEthereumのスマートコントラクト開発入門、第一回としてTruffleによるHello Worldまで解説しようと思います。

仮想通貨面白い!Ethereum面白い!Dapps作ってみたい!でもプログラミングしたことない!という方でも、本記事を読めばEthereumのスマートコントラクトでHello Worldできるようになります。

今日からあなたも、はじめてのプログラミング言語はsolidityでしたという新人類です。それでは、夢と冒険とスマートコントラクトの世界へレッツゴー!

Ethereumとは?

Ethereumとは、ビットコインに魅せられたロシアの青年Vitalik Buterinが開発した仮想通貨です。

ビットコインは、通貨として利用されることを想定されているのに対して、Ethereumは通貨以外のことが色々できます。

ビットコインではブロックチェーン技術を通貨の取引残高の記録にのみ利用しているのですが、Ethereumではユーザが独自に定義した変数の書き換え記録などに拡張しています。

これによってEthereumは、分散コンピューティング基盤としての機能を持っています。

まあ、難しいことは抜きにして簡単にいえば下記のようなものです。

  • Ethereumはプログラムを書き込むことができる分散ネットワーク
  • Ethereumの通貨、Etherはプログラムの書き込みや実行に使うことができる  

つまり、Ethereumは分散ネットワークで、その分散ネットワーク上にプログラムを公開したり実行したりするために使う通貨がEtherです。

Truffleとは?

Truffleとは、Ethereum上にプログラムを公開するのをとても簡単にしてくれる便利なツールです。

Ethereum上にプログラムを書き込むには、

  • solidityと呼ばれる独自の言語でコードを書く
  • EVM (Ethereum Virtual Machine) が実行可能なバイナリコードにコンパイルする
  • Ethereum上にコードを公開するためのトランザクションを発行する

という手順が必要です。

Truffleを使うと、2と3のステップを自動化してくれる上に、設定を書き換えるだけで公開先をテスト用に立ち上げたローカル環境にするのか、Testnetと呼ばれる開発版ネットワーク環境にするのか、Mainnetと呼ばれるEthereumの本番環境にするのかを簡単に切り替えることができます。

つまり、1のコード各作業に集中して残りの部分は設定一つで切り替え可能になるので超捗る!というわけなのです。

実際に試してみよう

というわけで早速、実際に試してみましょう。

必要な環境は、

  • node.jsの動くPC環境

のみです。

node.js自体は、WindowsでもLinuxでもMacでも動作するため、ようは普通のPCがあればOKです。

準備:node.jsの環境設定

node.jsはバージョンアップのスピードが早いので、個人的には、nvmなどのバージョン管理ツールを利用することをオススメしますが、

初めて触る人は直接インストールしたほうが簡単かも知れません。

Windowsの場合は下記

qiita.com

Macの場合は下記を参照するといいと思います。

qiita.com

無事にインストールが終われば、

$ node -v
v8.9.0

などと表示されるはずです。

truffleのインストール

truffleのインストールはnodeのインストールが完了していれば、コマンド一つで終わります。

github.com

公式サイトにも説明がありますが、インストールは下記のコマンド一発です。

$ npm install -g truffle

truffleの使い方

以上設定が終われば、truffleコマンドを利用することが可能になります。

今回は、開発用ローカル環境で、truffleのデプロイを行うための手順を3段階に分けて説明します。

  • solidityのコードを書く&コンパイル
  • migrationのコードを書く&デプロイ
  • 動作確認

まず最初にtruffleのディレクトリ構成を初期化します。

$ truffle init

solidityのコードを書く&コンパイル

solidityのコードを書きます。

今回はHello worldなので以下のようなコードです。

pragma solidity ^0.4.18;

contract HelloWorld {
    function get() public pure returns (string ret) {
        return "Hello World!!";
   }
}

これをcontracts/HelloWorld.solとして保存します。

HelloWorldという名前のコントラクト(Ethereum上で公開可能なプログラムの単位のこと)を作成し、 HelloWorldコントラクトには、"Hello Wold!!"という文字列を返す関数が定義されている・・・。という形になります。

全くのプログラミング初心者の方には謎かもしれませんが、習うより慣れろです。まずは一通り動かしてみましょう。

$ truffle compile

としてエラーがでなければ成功です。

migrationのコードを書く&デプロイ

上記のプログラムをEthereumにどのように書き込むかを決めるためにmigrationファイルというものを作成します。

const HelloWorld = artifacts.require('./HelloWorld.sol')

module.exports = (deployer) => {
  deployer.deploy(HelloWorld);
}

このコードは、先程作成したプログラムを読み込んでEthereumネットワークに書き込む、という内容です。

2_deploy.js といった名前で保存します。

では、実際に以下のコマンドを打ってローカル環境に公開してみましょう。

$ truffle develop

そうすると以下のような文字列が画面が表示されるので、migrateと打ち込みましょう。

Truffle Develop started at http://localhost:9545/

Accounts:
(0) 0x627306090abab3a6e1400e9345bc60c78a8bef57
(1) 0xf17f52151ebef6c7334fad080c5704d77216b732
(2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef
(3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544
(4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2
(5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e
(6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5
(7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5
(8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc
(9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de

Private Keys:
(0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3
(1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f
(2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8ad91193c05875ef1
(3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd85da83b71f772aa6c
(4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d0868337519f97bede61418
(5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bdf89de078917abc63
(6) 82d052c865f5763aad42add438569276c00d3d88a2d062d36b2bae914d58b8c8
(7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a87b08f39395618b7
(8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07700d8669ff12b7c4
(9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362dcae9012b548b1e5

Mnemonic: candy maple cake sugar pudding cream honey rich smooth crumble sweet treat

truffle(develop)>

migrateと打ち込んで以下のような文字列が表示されれば成功です。

Using network 'develop'.

Running migration: 1_initial_migration.js
  Replacing Migrations...
  ... 0x443b009f2a1b4bcf0aed1c0a211ba17b0efe23e9188c4a6d4256297f879a4d55
  Migrations: 0x8cdaf0cd259887258bc13a92c0a6da92698644c0
Saving successful migration to network...
  ... 0xd7bc86d31bee32fa3988f1c1eabce403a1b5d570340a3a9cdba53a472ee8c956
Saving artifacts...
Running migration: 2_helloworld_migration.js
  Replacing HelloWorld...
  ... 0x66f81cb04c405fb11f9ffb31d49516aa481368db231d202d559d36879aefe15e
  HelloWorld: 0x345ca3e014aaf5dca488057592ee47305d9b3e10
Saving successful migration to network...
  ... 0xf36163615f41ef7ed8f4a8f192149a0bf633fe1a2398ce001bf44c43dc7bdda0
Saving artifacts...

下記のようなエラーが発生する場合、ファイル名がクラス名と一致しているか確認しましょう。(大文字小文字は別と判定されます)

Error: Could not find artifacts for ./helloworld.sol from any sources

動作確認

先程実行したプログラムを、コンソール上でhelloという変数に代入します。

truffle(develop)> hello = HelloWorld.at(HelloWorld.address)
...

そしてget関数を実行してみましょう!

truffle(develop)> hello.get()
'Hello World!!'

と表示されるはずです。

以上の手順により

  • Hello World!!と返事を返すコントラクトのコードを作成
  • Ethereumネットワークにデプロイ
  • 実行してみる

が一通り実現できました!

まとめ

  • Ethereumはビットコインとことなりプログラムを書き込んで実行することができる
  • truffleというツールを使うとプログラムの書き込み&実行が非常に簡単になる
  • 実際にsolidityでコードを書いてHello Worldしてみよう!

この記事にて、初めてのプログラムはsolidityでした!という新人類が誕生することを期待します!

エンジニアでEthereumに興味があるけど、まだEthereumは持ってない!って人はzaifで購入することをオススメします。手数料安いので。

これがないと本番環境にデプロイできません。

ビットコインの自動取り引きbotを作ってみた話

今流行りのビットコイン。儲かるならちょっと手を出してみるか〜〜〜〜と思って仮想通貨取引所zaifに登録してみました。仮想通貨取引所というのは、お金をコインに交換して株のように売買できるネットサービスです。

最初はシステムがよくわからなかったので200円ほどのコインを売ったり買ったりして0.05円儲かった!とかで喜んでいたのですが、次第に人の欲望はエスカレートしていきます。

 少しずつ取引額を増やしながら遊んでいたのですが、zaifのアカウントページを詳しく見るとなんとapi keysの項目があるではないですか

え、これってもしかしてお手軽にプログラムを書いて取り引きし放題なんですか!?神かビットコイン神サービスか?

botが毎日少しでもお金を増やしてくれるなら私は数年後には億万長者やで!!!!!!とすっかり興奮してしまい、自動取引botを作ることになるのでした。

 

結論からいうと自動取引は儲かるのか? 

私の実力では儲かりませんでした。儲かったらこんな記事書いてません。

あ、儲からないとは言っても、ここ数日の仮想通貨界隈はバブルで爆上げ状態でしたので、ある程度は儲かりましたよ。もちろん。

コインを買ってただずっと持ってるというスタイルに一週間近くbotを回して及ばなかった、という意味です。大変悲しい。

もちろん私が実装できなかっただけで、うまくやれば儲かる方法はあると思いますが。

 

そもそも市場が単調増加の時、最適な行動はただ持っていること

 大した成果が挙げられなかった原因の一つに、私がbotを動かし続けている間、ビットコインがほぼ毎日高値を更新する単調増加状態だったことがあるように思います。

値段が毎日あがるなら、ずっと持っているのが一番です。細かく売り買いしても、タイミングを逃せば売った時より高く買うだけになってしまいますから。

結構上下はしていましたけど、かなり値上がりしていたので、ただ持っているだけが十分効率的だったという気がします。

 

試したアルゴリズム1:コスト平均法

一日1%利益が得られれば、一年間で何倍になるでしょうか?1.01の365乗≒38です。10万円で初めても380万円になります。2%なら1億3000万円になります。

やばい。夢がある。人生勝組への道はここにあったか・・・・。ということで、一日1%から2%の利益率を目標に、アルゴリズムを試しました。

  •  手持ちの資産を24*60=1440分割して、毎分ビットコインを購入する
  • 2%値段が上がったら売却する

これだけです。非常に単純。ただし、このアルゴリズムだと一日にどれだけビットコインが値上がりしても最大で2%しか資産を増やすことができません。

また、このアルゴリズムで大金持ちになるためには、ビットコインの値段が一年間毎日ずっと2%程度上昇していかなければなりません。

一年間でビットコインの値段が今の1.02の365乗≒1300倍になることは到底有り得そうもない。

そこで、下記のように変更しました。

  • 手持ちの資産を4*60=480分割して、毎分ビットコインを購入する
  • 0.33%値段が上がったら売却する

このアルゴリズムは以下のような仮定をおいてます。

  • ビットコインの値段は一年間毎日約0.33%程度ずつ上昇し続ける
  • 一日に6回程度大きく値段を上下する

年間せいぜい0.33%上昇しても、年間で3.3倍程度にしかならない。一年でビットコインの値段が3倍・・・・ないとも言い切れない・・・。夢を見る程度の価値はあります。

でも毎日相場が爆アゲしてる今試すアルゴリズムじゃねーよなーーーーーーーということでボツ。超長期的に見るなら、資産を線形じゃなくて指数で増やすことができるので有効ですけど、目の前の大きな利益を捨てて試すことじゃあない。

試したアルゴリズム2:とにかく全力で売り買い

自分の持っている全資産を常に全つっぱで売り買いする男気あふれるアルゴリズム。試して見て思ったのですがアルゴリズム1よりは成績がいいです。

でも、ずっと持ってるだけのほうがもっとよかったです。南無。

ランダムに売り買いする非常に雑なアルゴリズムを組んでしまったため、市場が単調増加の時は、買いそびれる確率が高くて危険です。

いずれにしてもある瞬間に値段があがるのか、下がるのかを一定以上の精度で予測できない限り、ずっと持ってるだけ戦術には勝てない気がします。

試したアルゴリズム3:とにかく細かく上下に売り買い

これが一番可能性がある気がします。ビットコインって手数料が非常に安くて、0.01%とかだったりします(zaifの場合はなんと-0.01%)。

今の相場って手数料の割に値段の細かい上下が激しいんですよね。

少しでも値段が上下すれば、売り買いをするという取り引きを超高スピードで回せば、いくらでも利益を出すことが理論上可能・・・・・・・なはず・・・・・。

でしたが、売りそこねたり買いそこねたりした不良債権が溜まっていくせいで、資産の回転率が低くて全然ダメでした。

それにAPIをやたらと叩きまくるのあんまり好きじゃないしね。

まとめ

上記アルゴリズムはすごくシンプルなので、もう少し改善できないかと思っていくつか調整をしてみたりしましたが、結局ずっと持ってるほうが強いという結論は変わりませんでした

今はまだ、上がり調子下がり調子がすごくはっきりしてるしね。

ある程度の精度で値段の上下を予測する仕組みがないと、単純なルールベースじゃ無理なんじゃないかなーという気がしています(3の方法はもしかしたらその限りではないかもしれないけど)。

 

まあ、まだ他にもいくつかやってみたいことはあるのですが、とりあえず自分の中で結論がでるまで書きません。