前提・実現したいこと
今Rubyを使ってbitflyerの自動売買ソフトを作っていますが下記のエラーに悩まされておりmethod.rbに定義したものをまとめてbitcon.rbで動かそうとしていますがどう編集していいのかわからない状態です
発生している問題・エラーメッセージ
Traceback (most recent call last):
bitcoin.rb:13:in <main>': undefined method
>' for nil:NilClass (NoMethodError)
該当のソースコード
Ruby
bitcoin.rb
require './method'
get_my_money("BTC")
get_my_money("JPY")
ifdoneOCO
while(1)
current_price = get_price
puts current_price
buy_price = 826000
sell_price = 8300000
if (current_price > sell_price) && (get_my_money("BTC")[amount] > 0.001)
puts "売ります"
order("SELL",sell_price,0.001)
elsif (get_price < buy_price) && (get_my_money("BTC")[amount] > 0.001)
puts "買います"
order("BUY",buy_price,0.001)
else
puts "何もしません"
end
sleep(1)
end
method.rb
def get_price
uri = URI.parse("https://api.bitflyer.jp") #このURLにアクセスすればいろんなデータを受け取れる
uri.path = '/v1/getboard' #板情報リクエストはv1/getboardに指定
uri.query = '' #どの取引を指定する部分
https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true #http通信の設定 response = https.get uri.request_uri #取得してきたデータの結果をレスポンスの中に入れる response_hash = JSON.parse(response.body) #json形式で書かれたresponse.bodyをhashに格納 puts response_hash ["mid_price"] #売りと買いの中間の値段のラベルがついたものを表示
end
def order(side,price,size)
key = API_KEY
secret = API_SECRET
timestamp = Time.now.to_i.to_s method = "POST"
uri = URI.parse("https://api.bitflyer.com")
uri.path = "/v1/me/sendchildorder"
body = '{
"product_code": "BTC_JPY",
"child_order_type": "LIMIT",
"side": "'+ side +'",
"price":' + price + ',
"size": ' + size + ',
"minute_to_expire": 10000,
"time_in_force": "GTC"
}'
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
end
def get_my_money(coin_name)
key = API_KEY
secret = API_SECRET
timestamp = Time.now.to_i.to_s method = "GET" uri = URI.parse("https://api.bitflyer.com") uri.path = "/v1/me/getbalance" text = timestamp + method + uri.request_uri sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, text) options = Net::HTTP::Get.new(uri.request_uri, initheader = { "ACCESS-KEY" => key, "ACCESS-TIMESTAMP" => timestamp, "ACCESS-SIGN" => sign, }); https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response = https.request(options) response_hash = JSON.parse(response.body) response_hash.find {|n| n["currency_code"] == coin_name}
end
==============================================
試したこと
エラー文を読んでcurrent_priceのところが定義されていないと思い
get_price に変えて記述しましたが同じエラーです
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/29 11:22