ビットコイン自動売買BOT作成 その3:「現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りが独立した指値注文)」の作り方
この記事の読了目安は約 6 分です。

目次
前回の記事はこちら
前回の記事(その2)では、「シンプルな指値注文を出すプログラム」の作り方を記事でした。
今回の目標;「現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りが独立した指値注文)」の作成
記事その1で作った「現在価格をチェックするプログラム」と、記事その2で作った「シンプルな指値注文を出すプログラム」を組み合わせて、「現在価格に応じた注文を出すプログラム」の第1弾として「現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りが独立した指値注文)」を作成したいと思います。
プログラム作成の流れ
このプログラムの場合は、買い注文と売り注文が独立しているので、買い注文が約定しても、売り注文は残ります。
まずは、記事その1で作った「現在価格をチェックするプログラム」と、記事その2で作った「シンプルな指値注文を出すプログラム」をとりあえず合体させます。
requireで呼び出す部分を先頭に持って行って重複しているコードを削除して整理します。その後、api-key.rbで呼び出す部分を続けます。
次に、「現在価格をチェックするプログラム」で取得した現在価格をcheck_priceと定義して、check_priceから一定額(10万円)を差し引いた金額をbuy_priceと定義します。
「シンプルな指値注文を出すプログラム」の"price": ******の部分にbuy_priceを代入します。代入するときに整数値(Integer)のまま入れると下記のエラー(TypeError)が出ました。
E:\btcfx>ruby btcfx.rb
現在価格チェック↓
756842.0
発注する価格の計算↓
556842
btcfx.rb:39:in `+': no implicit conversion of Integer into String (TypeError)
from btcfx.rb:39:in `'
エラー(TypeError)が出たので、buy_priceの後に.to_sを付けて文字列(String)に変換するような下記のプログラムにしたらOKになりました。
#冒頭にrequire等呼び出し関係列挙
require 'net/http'
require 'uri'
require 'json' #JSONメソッド呼出し
require "openssl"
require './api-key' #同じディレクトリのapi-key.rbから呼出し
key = API_KEY #api-key.rbから呼出し
secret = API_SECRET #api-key.rbから呼出し
#現在価格チェック(始)
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 "現在価格チェック↓"
puts check_price = response_hash["mid_price"].to_i #ハッシュから中値("mid_price")のみ抽出。「.to_i」で整数に変換
#現在価格チェック(終)
#発注する価格の計算(始)
puts "発注する価格の計算(buy_price)↓"
puts buy_price = check_price - 100000
#発注する価格の計算(終)
#注文を出す(始)
timestamp = Time.now.to_i.to_s
method = "POST"
uri = URI.parse("https://api.bitflyer.jp")
uri.path = "/v1/me/sendchildorder"
body = '{
"product_code": "FX_BTC_JPY",
"child_order_type": "LIMIT",
"side": "BUY",
"price": ' + buy_price.to_s + ',
"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 "注文の承認ID↓"
puts response.body
#注文を出す(終)
買い注文がうまく動いたので、売り注文側も同様に下記のとおり追記しました。
####################################################################################################
#「③ 現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りが独立した指値注文)」
# https://soutai.info/how-to-make-bitcoin-trade-bot-03/
####################################################################################################
#冒頭にrequire等呼び出し関係列挙
require 'net/http'
require 'uri'
require 'json' #JSONメソッド呼出し
require "openssl"
require './api-key' #同じディレクトリのapi-key.rbから呼出し
key = API_KEY #api-key.rbから呼出し
secret = API_SECRET #api-key.rbから呼出し
#現在価格チェック(始)
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 "現在価格チェック↓"
puts check_price = response_hash["mid_price"].to_i #ハッシュから中値("mid_price")のみ抽出。「.to_i」で整数に変換
#現在価格チェック(終)
#発注する価格の計算(始)
puts "発注する価格の計算(buy_price)↓"
puts buy_price = check_price - 100000 #現在価格マイナス10万円で買い注文
puts "発注する価格の計算(sell_price)↓"
puts sell_price = check_price + 100000 #現在価格プラス10万円で売り注文
#発注する価格の計算(終)
#買い注文を出す(始)
timestamp = Time.now.to_i.to_s
method = "POST"
uri = URI.parse("https://api.bitflyer.jp")
uri.path = "/v1/me/sendchildorder"
body = '{
"product_code": "FX_BTC_JPY",
"child_order_type": "LIMIT",
"side": "BUY",
"price": ' + buy_price.to_s + ',
"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 "買い注文の承認ID↓"
puts response.body
#買い注文を出す(終)
#売り注文を出す(始)
timestamp = Time.now.to_i.to_s
method = "POST"
uri = URI.parse("https://api.bitflyer.jp")
uri.path = "/v1/me/sendchildorder"
body = '{
"product_code": "FX_BTC_JPY",
"child_order_type": "LIMIT",
"side": "SELL",
"price": ' + sell_price.to_s + ',
"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 "売り注文の承認ID↓"
puts response.body
#売り注文を出す(終)
実行してみるとうまく注文が出せました^^。注文が出せたのでAPI の承認 ID(“JRF********-******-******”)が返ってきました。
今回は「現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りが独立した指値注文)」を作成しました。
初心者の自分でもなんとかできそうです。Rubyプログラミング面白いです^^。
それでは、続きはまた後日(^^)ノ
続きはこちら
↓↓続きのその4では「現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りがセットのOCO注文)」を作成してみます。↓↓
br>
関連リンク集
この記事のBOTはビットフライヤーLightning用です。登録がまだの方は下のバナーからどうぞ。

この記事について
仮想通貨の利益の投資先について
ビットコインをはじめとする仮想通貨は基本的にハイリスクハイリターンのキャピタルゲイン型の投資ですので、利益をそのまま仮想通貨へ再投資するとリスクも増大していきます。利益を再投資して「ガンガンいこうぜ」ってアツくなる気持ちを抑えて、仮想通貨の利益はできるだけソーシャルレンディング等のミドルリスクミドルリターンのインカムゲイン型の投資へ回すという投資方針でいこうと考えています。
ハイリスクハイリターンな投資はアーリーリタイアを目指すため
そもそもなぜ、ハイリスクハイリターンの投資も並行して行っているかといえば、それはアーリーリタイアを目指しているためです。インカムゲイン型の投資の中で比較的利回りの良いソーシャルレンディングですが、アーリーリタイアの資金をソーシャルレンディングだけの投資で回すと時間がかかり過ぎて、リタイア資金が貯まった頃には、定年が近づいてきてあまりアーリーではなくなってしまうのです(笑)
ということで、アーリーリタイアが目的ではなく、今の収入+αで生活にゆとりを得るために投資を考えている人でしたら、ソーシャルレンディング等のミドルリスクミドルリターンのインカムゲイン型の投資をオススメします。仮想通貨取引よりも損失を出すリスクはぐっと低くなります。
ソーシャルレンディング会社の情報については下記(ソーシャルレンディングのカテゴリー)をご覧ください。
注意事項
- 仮想通貨取引は、法定通貨取引(FX取引)よりもハイリスクハイリターンです。
- リスク対策として、他の案件にも資金を分散して投資することをおすすめします。
- 投資は自己責任で行ってください。
.
Category:アーリーリタイア(FIRE)の記事一覧
- 「タイは物価が安くて日本より優雅なリタイア生活ができる」というのが過去の話になった件
- 年金受給開始「75歳とか、もっと延ばしてもいい」 内閣府の検討会で意見が!
- 待ちに待った休暇とアーリーリタイア
- 65歳定年延長とアーリーリタイア
- 【投資実績公開】 会社依存度編:2017年上半期は、投資の利益が給与収入を上回り、会社依存度は38%
- 人生における豊かさとは何か?価値観は人それぞれ【私の価値観】
- 投資資金と生活資金に対するスタンス;生活還元型と生活分離型【私の投資資金スタンス】
- 「普通の人が老後まで安心して暮らすためのお金の話」を読んで
- 投資ライフバランス(方針の見直し)
![]()
Tweet

