ビットコイン自動売買BOT作成 その2:「シンプルな指値注文を出すプログラム」の作り方
この記事の読了目安は約 5 分です。
目次
前回の記事はこちら
前回の記事(その1)では、「一定時間毎に現在価格をチェックするプログラム」を作りました。
今回の目標
今回は「シンプルな指値注文を出すプログラム」をつくりたいと思います。
プログラム作成の流れ
下準備としてAPIキーの取得等
注文実行などの個人毎のプライベートなAPIについては、実行するためにAPIキーが必要になります。ということで、注文プログラムを作成する前に、APIキーを準備が必要になります。
bitFlyer Lightningにログインして、APIの項目でAPIキーを発行します。APIキーとAPIパスワード(SECRET)は他人に知られると他人が注文などを実行可能になるので取扱いには注意が必要です。
api-key.rb
という別のファイルで管理することにし、下記のように、******の部分に自分専用に発行したAPIキーとAPIパスワード(SECRET)を記入します。
#file name;api-key.rb API_KEY = "******" API_SECRET = "******"
注文サンプルプログラムのAPIキー部分を修正
APIプライグラウンドで公開されてる注文のサンプルプログラムは下記のとおりです。
require "net/http" require "uri" require "openssl" key = "{{ YOUR API KEY }}" secret = "{{ YOUR API SECRET }}" timestamp = Time.now.to_i.to_s method = "POST" uri = URI.parse("https://api.bitflyer.jp") uri.path = "/v1/me/sendchildorder" body = '' text = timestamp + method + uri.request_uri + body sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, text) options = Net::HTTP::Post.new(uri.request_uri, initheader = { "ACCESS-KEY" => key, "ACCESS-TIMESTAMP" => timestamp, "ACCESS-SIGN" => sign, "Content-Type" => "application/json" }); options.body = body https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response = https.request(options) puts response.body
APIキーとAPIパスワード(SECRET)については、さきほど作成したapi-key.rb
から呼び出すように修正します。
api-key.rbをプログラム本体と同じディレクトリに置く場合です。
require "net/http" require "uri" require "openssl" require './api-key' #同じディレクトリからapi-key.rb呼出し key = API_KEY #api-key.rbから呼出し secret = API_SECRET #api-key.rbから呼出し timestamp = Time.now.to_i.to_s method = "POST" uri = URI.parse("https://api.bitflyer.jp") uri.path = "/v1/me/sendchildorder" body = '' text = timestamp + method + uri.request_uri + body sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, text) options = Net::HTTP::Post.new(uri.request_uri, initheader = { "ACCESS-KEY" => key, "ACCESS-TIMESTAMP" => timestamp, "ACCESS-SIGN" => sign, "Content-Type" => "application/json" }); options.body = body https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response = https.request(options) puts response.body
とりあえず実行してみると「bodyが空っぽですよ」とエラーが返ってきました。
E:\btcfx>ruby btcfx.rb {"status":-122,"error_message":"Empty request body","data":null}
注文する内容をbodyで指定
つぎに、APIドキュメントの下記を参考にして、bodyで注文の各パラメータを指定します。
product_code: 必須。注文するプロダクトです。マーケットの一覧で取得できる product_code または alias のいずれかを指定してください。
child_order_type: 必須。指値注文の場合は “LIMIT”, 成行注文の場合は “MARKET” を指定します。
side: 必須。買い注文の場合は “BUY”, 売り注文の場合は “SELL” を指定します。
price: 価格を指定します。child_order_type に “LIMIT” を指定した場合は必須です。
size: 必須。注文数量を指定します。
minute_to_expire: 期限切れまでの時間を分で指定します。省略した場合の値は 43200 (30 日間) です。
time_in_force: 執行数量条件 を “GTC”, “IOC”, “FOK” のいずれかで指定します。省略した場合の値は “GTC” です。
対象商品は”FX_BTC_JPY”、注文タイプは指値注文で”LIMIT”、売買のサイドは買いで”BUY”、価格は70万円で”700000″、注文数量は最小単位の0.01BTCを指定する場合のbodyは下記のとおりです。
{ "product_code": "FX_BTC_JPY", "child_order_type": "LIMIT", "side": "BUY", "price": 700000, "size": 0.01, }
上記を注文を出すプログラムのbodyに入れます。
#################################################################################################### #「② シンプルな指値注文を出すプログラム」 # https://soutai.info/how-to-make-bitcoin-trade-bot-02/ #################################################################################################### require "net/http" require "uri" require "openssl" require './api-key' #同じディレクトリのapi-key.rbから呼出し key = API_KEY #api-key.rbから呼出し secret = API_SECRET #api-key.rbから呼出し timestamp = Time.now.to_i.to_s method = "POST" uri = URI.parse("https://api.bitflyer.jp") uri.path = "/v1/me/sendchildorder" #注文する内容をbodyで指定 body = '{ "product_code": "FX_BTC_JPY", "child_order_type": "LIMIT", "side": "BUY", "price": 700000, "size": 0.01, }' text = timestamp + method + uri.request_uri + body sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, text) options = Net::HTTP::Post.new(uri.request_uri, initheader = { "ACCESS-KEY" => key, "ACCESS-TIMESTAMP" => timestamp, "ACCESS-SIGN" => sign, "Content-Type" => "application/json" }); options.body = body https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response = https.request(options) puts response.body
実行してみるとうまく注文が出せました^^。注文が出せたのでAPI の受付 ID(“JRF********-******-******”)が返ってきました。
今回はシンプルな指値注文を出すプログラムを作成しました。
初心者の自分でもなんとかできそうです。プログラミング面白いです^^。
それでは、続きはまた後日(^^)ノ
続きはこちら
↓↓続きのその3では「現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りが独立した指値注文)」を作成してみます。↓↓
br>
関連リンク集
この記事のBOTはビットフライヤーLightning用です。登録がまだの方は下のバナーからどうぞ。
この記事について
仮想通貨の利益の投資先について
ビットコインをはじめとする仮想通貨は基本的にハイリスクハイリターンのキャピタルゲイン型の投資ですので、利益をそのまま仮想通貨へ再投資するとリスクも増大していきます。利益を再投資して「ガンガンいこうぜ」ってアツくなる気持ちを抑えて、仮想通貨の利益はできるだけソーシャルレンディング等のミドルリスクミドルリターンのインカムゲイン型の投資へ回すという投資方針でいこうと考えています。
ハイリスクハイリターンな投資はアーリーリタイアを目指すため
そもそもなぜ、ハイリスクハイリターンの投資も並行して行っているかといえば、それはアーリーリタイアを目指しているためです。インカムゲイン型の投資の中で比較的利回りの良いソーシャルレンディングですが、アーリーリタイアの資金をソーシャルレンディングだけの投資で回すと時間がかかり過ぎて、リタイア資金が貯まった頃には、定年が近づいてきてあまりアーリーではなくなってしまうのです(笑)
ということで、アーリーリタイアが目的ではなく、今の収入+αで生活にゆとりを得るために投資を考えている人でしたら、ソーシャルレンディング等のミドルリスクミドルリターンのインカムゲイン型の投資をオススメします。仮想通貨取引よりも損失を出すリスクはぐっと低くなります。
ソーシャルレンディング会社の情報については下記(ソーシャルレンディングのカテゴリー)をご覧ください。
注意事項
- 仮想通貨取引は、法定通貨取引(FX取引)よりもハイリスクハイリターンです。
- リスク対策として、他の案件にも資金を分散して投資することをおすすめします。
- 投資は自己責任で行ってください。
.
Category:アーリーリタイア(FIRE)の記事一覧
- 「タイは物価が安くて日本より優雅なリタイア生活ができる」というのが過去の話になった件
- 年金受給開始「75歳とか、もっと延ばしてもいい」 内閣府の検討会で意見が!
- 待ちに待った休暇とアーリーリタイア
- 65歳定年延長とアーリーリタイア
- 【投資実績公開】 会社依存度編:2017年上半期は、投資の利益が給与収入を上回り、会社依存度は38%
- 人生における豊かさとは何か?価値観は人それぞれ【私の価値観】
- 投資資金と生活資金に対するスタンス;生活還元型と生活分離型【私の投資資金スタンス】
- 「普通の人が老後まで安心して暮らすためのお金の話」を読んで
- 投資ライフバランス(方針の見直し)
Tweet