★ビットコイン自動売買BOT作成 その1:きっかけ~現在価格を一定時間毎にチェックするプログラム
この記事の読了目安は約 6 分です。
目次
この記事で作成するBOTのイメージ動画
この記事のBOTはビットフライヤーLightning用です。登録がまだの方は下のバナーからどうぞ。
自動売買BOT作成に挑戦したきっかけ
プログラミングには前から興味はあったけど難しそうで腰が重かった
プログラミングには前から興味はあって、PHPとかの知識があればこのウェブページも自在にアレンジできるだろうなと思ってました。プログラミングができるようになったらいろいろ便利になりそうというイメージでした。
メリットがあるとは思ってましたが、それ以上に習得に手間がかかると思って習得するには腰が重かったです。「プログラミングを習得する手間」<「習得して得られるメリット」となる状況に今までなってませんでした。
BOTによる自動化で期待できるメリット
メリット①:感情に左右されないトレード
裁量でトレードを実際にやってみて、メンタル的な難しさを実感しました。感情に流されなかったらもっとうまく取引できたのになって思うことが何度もありました。冷静になればどういう風にすればいいかって見えてくると思うんですけど、その時には感情に流されてしまってうまくできないというようなことがよくありました。
この問題の解決のアプローチとしては、感情に流されないように自己を鍛えると言うか訓練するという自己改善のアプローチと、そもそも感情持たない自動売買プログラムを作って自動BOT化するアプローチがあると思います。
ガチホではなくて、トレードもしたいけど、手動トレードは感情に流されてしまってうまくいかないという人におススメです。
メリット②:自動化による時間節約
手動トレードにかかる時間をプログラム活用で、トレード以外の自由時間を増やしたいなと思いました。外国為替は土日は休みですが、仮想通貨は24時間365日相場に休みはありません。フルタイム勤務のサラリーマンだとトレードできない時間帯が多いです。
自由時間はとにかくトレードしたいという人なら別ですが、もっと時間を使いたいことが他にあるので、トレードに消費する時間を節約できるのはメリットです。
メリット③:短期売買による複利効果
複利の効果って凄いと思います。単純計算ですが、日利1%で365日運用すると約37倍です。
BOTで24時間相場をウォッチして、1日に何十回何百回と細かくトレードして、1日に1%ずつ元金を増やしていくことができれば・・・1年後には複利効果でお金持ちになれるかもと期待します(笑)うまくいくかは分かりませんが。
メリット④:自動売買以外への応用
自動売買にとどまらず勉強してプログラミングの力量が上がれば、いろんなことに応用ができると思います。
サンプルプログラム確認とカスタム
プログラミングの初心者が挑戦
やってみようと決めたのはいいんですが、プログラミングの初心者です(笑)。ビットコインの自動売買ソフトとか自動売買アプリなんてのも販売されているようですが、この機会にプログラムを勉強しようと思ったので自作することにしました。自作する分にはソフト代金とかも不要です。
何から始めたらいいのか分かりません。まずはビットフライヤーのAPIプレイグラウンドで提供されているサンプルプログラムをクリックして動かしてみるところから始めました。
まずはサンプルプログラムをWeb上で動かしてみる
Web上でサンプルプログラムをクリックして実行すると、実行結果が画面に表示されました。いろんなAPIコマンドが用意されてて、注文や証拠金などのプライベートな情報についてはAPIキーを作成して入力すれば実行されて結果が見れました。下にあるサンプルプログラムを見てみたら、思ったよりプログラムの行数が少なかったし、公開されているサンプルプログラムを組み合わせたらなんとかなるかもと。
サンプルプログラムは、C言語、Perl、Ruby、JavaScriptとあって、調べってみてプログラミング初心者の自分でもとっつきやすそうなRubyで自動売買BOTを作ってみようと決めました。
パソコン上でサンプルプログラムをそのまま動かしてみる
APIプレイグラウンド上で動作を確認したので、次は自分のパソコン上でサンプルプログラムを動かしてみようと思いました。
Rubyコミュニティのサイトに説明があったRubyInstallerのサイトからインストーラーをダウンロードしてさっとインストールできたので、早速サンプルプログラムを実行してみました。
require 'net/http' require 'uri' uri = URI.parse("https://api.bitflyer.jp") uri.path = '/v1/getboard' uri.query = '' https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response = https.get uri.request_uri puts response.body
上記の価格の板情報をチェックする「getboard」のサンプルプログラムをWindows付属のコマンドプロンプトを使ってパソコン上で動かしてみると、下記の結果になりました。
E:\btcfx>ruby btcfx.rb {"mid_price":937261.0,"bids":[{"price":937042.0,"size":0.06602},{"price":937017. 0,"size":0.00000265},{"price":937001.0,"size":0.07648782},{"price":937000.0,"siz e":5.666},{"price":936956.0,"size":0.3329},{"price":936576.0,"size":0.0161},{"pr ice":936519.0,"size":0.19},{"price":936501.0,"size":0.09999448},{"price":936500. 0,"size":1.0},{"price":936284.0,"size":0.001},{"price":936276.0,"size":0.0223643 }, (以下略)
一回で取得する価格の文字数が多いのでPAUSEボタンで止めて確認してみたら、APIプレイグラウンドと同じように値段が表示されました。まぁ当たり前ですね(笑)。
現在価格(中値)を抽出するプログラムにカスタム
”mid_price”に売り注文と買い注文の中値が表示されていて、その後に「”bids”:[{“price”:937042.0,”size”:0.06602},{“price”:937017.0,”size”:0.00000265},・・・」と売り注文の値段と注文量の板情報が確認できます。
現在価格として”mid_price”の値段だけを抽出したいと思いました。調べてみると、JSON.parse()
メソッドでJSON形式の文字列からハッシュ形式へ変換すると簡単に抽出できるみたいなので、こんな感じに#マークの部分のプログラムをカスタムしました。
require 'net/http' require 'uri' require 'json' #JSONメソッド呼出し uri = URI.parse("https://api.bitflyer.jp") uri.path = '/v1/getboard' uri.query = 'product_code=FX_BTC_JPY' #FX_BTC_JPYを選択。空欄の場合は"BTC_JPY(現物)" https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response = https.get uri.request_uri #puts response.body #抽出前の文字列は出力しない response_hash = JSON.parse(response.body) #JSON.parse()メソッドでJSON形式の文字列からハッシュ形式へ変換 puts response_hash["mid_price"] #ハッシュから中値("mid_price")のみ抽出
実行してみると、下記のような感じで、”mid_price”の値段だけを抽出できました。もちろん実行するタイミングで抽出される値段は刻々と変わっていきます。
E:\btcfx>ruby btcfx.rb 926802.0
これで欲しい現在価格(中値)を取得できました。
一定時間毎に現在価格をチェックするプログラムにカスタム
つぎに一定時間毎に現在価格をチェックするプログラムにカスタムしました。while(true) ~ end
で無限ループにして、sleep()
で待機時間を設定して下記のようなプログラムになりました。
#################################################################################################### #「① 一定時間毎に現在価格をチェックするプログラム」 # https://soutai.info/how-to-make-bitcoin-trade-bot-01/ #################################################################################################### require 'net/http' require 'uri' require 'json' #JSONメソッド呼出し puts "10秒毎に現在価格をチェックするプログラム @soutai.info" while(true) #無限ループ(始) uri = URI.parse("https://api.bitflyer.jp") uri.path = '/v1/getboard' uri.query = 'product_code=FX_BTC_JPY' #FX_BTC_JPYを選択。空欄の場合は"BTC_JPY(現物)" https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response = https.get uri.request_uri response_hash = JSON.parse(response.body) #JSON.parse()メソッドでJSON形式の文字列からハッシュ形式へ変換 puts response_hash["mid_price"] #ハッシュから中値のみ抽出 sleep(10) #10秒待機 end #無限ループ(終)
実行してみると、下記のような感じで、10秒毎に1行ずつ増えていくのでOKです。
注文を出すためのサンプルプログラムも公開されているので、組み合わせたらなんとかなりそうな気がしました。一定時間毎に価格をチェックして、設定条件を満たせば、注文を出すというイメージです。
初心者の自分でもなんとかできそうです。プログラミング面白いです^^。
続きはこちら
↓↓続きのその2では「シンプルな指値注文を出すプログラム」を作成してみます。↓↓
br>
関連リンク集
この記事のBOTはビットフライヤーLightning用です。登録がまだの方は下のバナーからどうぞ。
この記事について
仮想通貨の利益の投資先について
ビットコインをはじめとする仮想通貨は基本的にハイリスクハイリターンのキャピタルゲイン型の投資ですので、利益をそのまま仮想通貨へ再投資するとリスクも増大していきます。利益を再投資して「ガンガンいこうぜ」ってアツくなる気持ちを抑えて、仮想通貨の利益はできるだけソーシャルレンディング等のミドルリスクミドルリターンのインカムゲイン型の投資へ回すという投資方針でいこうと考えています。
ハイリスクハイリターンな投資はアーリーリタイアを目指すため
そもそもなぜ、ハイリスクハイリターンの投資も並行して行っているかといえば、それはアーリーリタイアを目指しているためです。インカムゲイン型の投資の中で比較的利回りの良いソーシャルレンディングですが、アーリーリタイアの資金をソーシャルレンディングだけの投資で回すと時間がかかり過ぎて、リタイア資金が貯まった頃には、定年が近づいてきてあまりアーリーではなくなってしまうのです(笑)
ということで、アーリーリタイアが目的ではなく、今の収入+αで生活にゆとりを得るために投資を考えている人でしたら、ソーシャルレンディング等のミドルリスクミドルリターンのインカムゲイン型の投資をオススメします。仮想通貨取引よりも損失を出すリスクはぐっと低くなります。
ソーシャルレンディング会社の情報については下記(ソーシャルレンディングのカテゴリー)をご覧ください。
注意事項
- 仮想通貨取引は、法定通貨取引(FX取引)よりもハイリスクハイリターンです。
- リスク対策として、他の案件にも資金を分散して投資することをおすすめします。
- 投資は自己責任で行ってください。
.
Category:アーリーリタイア(FIRE)の記事一覧
- 「タイは物価が安くて日本より優雅なリタイア生活ができる」というのが過去の話になった件
- 年金受給開始「75歳とか、もっと延ばしてもいい」 内閣府の検討会で意見が!
- 待ちに待った休暇とアーリーリタイア
- 65歳定年延長とアーリーリタイア
- 【投資実績公開】 会社依存度編:2017年上半期は、投資の利益が給与収入を上回り、会社依存度は38%
- 人生における豊かさとは何か?価値観は人それぞれ【私の価値観】
- 投資資金と生活資金に対するスタンス;生活還元型と生活分離型【私の投資資金スタンス】
- 「普通の人が老後まで安心して暮らすためのお金の話」を読んで
- 投資ライフバランス(方針の見直し)
Tweet