ビットコイン自動売買BOT作成 その5:「一定時間毎に現在価格をチェックし、売り目標まで下落で成行売り、買い目標まで上昇で成行買いプログラム」の作り方
この記事の読了目安は約 7 分です。

目次
前回の記事はこちら
前回の記事(その4)は、「現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りがセットのOCO注文)」の作り方の記事でした。
今回の目標;「一定時間毎に現在価格をチェックし、売り目標まで下落で成行売り、買い目標まで上昇で成行買いプログラム」の作成
記事その4で作った「現在価格から一定額下落で指値買い、一定額上昇で指値売りプログラム(買いと売りがセットのOCO注文)」では、下落したら買い&上昇したら売りの逆張りタイプのOCO注文プログラムですが、今回は下落したら成行売り&上昇したら成行買いの順張りタイプのプログラムを作りたいと思います。
レンジ相場から上抜けしたら買い注文、下抜けしたら売り注文を出して、トレンドフォローをしたい時に使うイメージのプログラムです。
プログラム作成の流れ
下記の記事その1で作った「① 一定時間毎に現在価格をチェックするプログラム」と記事その2で作った「② シンプルな指値注文を出すプログラム」をベースに作成を開始します。
####################################################################################################
#「① 一定時間毎に現在価格をチェックするプログラム」
# 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 = '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 #無限ループ(終)
####################################################################################################
#「② シンプルな指値注文を出すプログラム」
# 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
上記の2つのプログラムを組みあわて、現在価格と目標価格を比較する条件分岐に下記のif~elsif~endの条件分岐を使います。
#if~elsif~endの条件分岐 if 条件A 条件Aがtrueの場合に実行するプログラム elsif 条件B 条件Bがtrueの場合に実行するプログラム else その他の場合に実行するプログラム end
条件A:「現在価格>買い目標価格」の場合は、買いの成行注文
条件B:「現在価格<売り目標価格」の場合は、売りの成行注文
その他の場合は、注文する条件外なので何もせずスルー。
####################################################################################################
#「⑤ 一定時間毎に現在価格をチェックし、売り目標まで下落で成行売り、買い目標まで上昇で成行買いプログラム」
# https://soutai.info/how-to-make-bitcoin-trade-bot-05/
####################################################################################################
#冒頭に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から呼出し
loopcount = 0 #ループカウント設定
while(true) #無限ループ(始)
#発注する価格の設定(始)
puts "買いの目標価格の設定(buy_price)↓"
puts buy_price = 800000 #80万円で順張りの成行買い注文
puts "売りの目標価格の設定(sell_price)↓"
puts sell_price = 700000 #70万円で順張りの成行売り注文
#発注する価格の設定(終)
#現在価格チェック(始)
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」で整数に変換
#現在価格チェック(終)
#現在価格と目標価格を比較する条件分岐(始)
if check_price > buy_price #「現在価格>買いの目標価格」の場合
puts "「現在価格>買いの目標価格」なので、買いの成行注文を実行します。"
#買いの成行注文を出す(始)
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": "MARKET",
"side": "BUY",
"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
#買いの成行注文を出す(終)
elsif check_price < sell_price #「現在価格<売りの目標価格」の場合
puts "「現在価格<売りの目標価格」なので、売りの成行注文を実行します。"
#売りの成行注文を出す(始)
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": "MARKET",
"side": "SELL",
"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
#売りの成行注文を出す(終)
else #その他の場合
puts "その他の注文する条件外なので、何もせずスルーします。"
end
#現在価格と目標価格を比較する条件分岐(終)
loopcount = loopcount + 1 #ループカウント+1回
puts "↑以上で、#{loopcount}回目のループ終了"
puts " "
sleep(60) #60秒待機
end #無限ループ(終)
実行してみるとプログラムどおり動きました^^。注文が出せたのでAPI の承認 ID(“JRF********-******-******”)が返ってきてます。
今回は「一定時間毎に現在価格をチェックし、売り目標まで下落で成行売り、買い目標まで上昇で成行買いプログラム」を作成しました。
初心者の自分でもなんとかできそうです。Rubyプログラミング面白いです^^。
続きはこちら
↓↓続きのその6では「Lightning FX における最小発注数量の改定」の対応をしてみます。↓↓
br>
関連リンク集
この記事のBOTはビットフライヤーLightning用です。登録がまだの方は下のバナーからどうぞ。

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

