この度、仮想通貨のOHLCデータをCryptoWatchから取ってくるコードをjuliaで書いたのでここに記しておきます。
環境:
Julia 1.6.3
DataFrames v1.3.3
HTTP v0.8.19
JSON3 v1.9.4
取引所Bitflyerにおける通貨BTCJPYのOHLCデータは次のURLに対応しています。 https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc
# HTTP通信 using HTTP # JSON形式のデータを扱う using JSON3 # データフレーム using DataFrames # 日付関係 using Dates # APIのURL const url = "https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc" # ローソク足のデータを格納する構造体 struct Candle time::DateTime open::Float64 high::Float64 low::Float64 close::Float64 volume::Float64 quote_volume::Float64 end function get_candles() # getメソッドでAPIにリクエストを投げる res = HTTP.get(url, query=Dict("periods" => "60")) # HTTPレスポンスbodyにJSONが返ってくるのでparseする body = String(res.body) data = JSON3.read(body) # dictとしてparseしてくれるのでデータを格納している値を取り出す rows = data["result"]["60"] # 配列 # Candle型の空の配列を用意 candles = Candle[] for row in rows # rowはベクトルでtimestamp, open, high, low, close, volume, quote_volumeを要素に持つ timestamp, open, high, low, close, volume, quote_volume = row # 展開 time = Dates.unix2datetime(row[1]) # timestampをDates.DateTime型に変換 candle = Candle(time, open, high, low, close, volume, quote_volume) push!(candles, candle) end return candles end
上記のように簡単にローソク足のデータを取得する関数を作成できました。 小ネタとしては、返り値としてのcandlesのopenだけ取ってきたいときは次のようにしてのようにして取得することができます。
candles = fetch_candles() opens = getfield.(candles, :open)
これが煩わしい場合はDataFrameに変換するのが手っ取り早いです。
# Vector{Candle} => DataFrameに変換する方法 # fieldnames(Type)で構造体のフィールド名をタプルで取得します # 内包表記を使ってDataFrame(:field1 => val1, :field2 => val2, ...)のように渡しています df = DataFrame((field => getfield.(candles, field) for field in fieldnames(Candle))...) df.open # openのベクトル