あれ、どうやったっけ

(たぶん)テキストサイト風blog。文が安定するまで書き直しあるからメンゴ。

真面目に「取得額」を計算するなら XXX → BTC → USDT → JPY 位の計算しないと言い訳立たなくね?  【API引き途中まで編】

昨年掘って今年にかけてガチホの人限定

昨年の12月に仮想通貨に関する税金の扱いのお達しあったじゃないですか。

マイニングしたときの取得額は時価として雑所得につけなさいとのお達し。ですけどZaifCoinCheckBitFlyerだと取得時価わからないよね? という疑問があるわけで(だって約定してるんじゃないもの)。

税理士さんにも聞いたものの「良く分からんけど時価としか言えない、分からない場合は……まあ開始値終値? 自信ないけど」という悲しみにあふれる話。

マイニングしたタイミングと取引所の約定価格は連動していないというか無からコインがポップしてんだよ(PoWなら)という辺りに配慮した税務署の通達ではないですね。金融取引を下敷きとして適当に文章書きやがったなってことになります。

なお時価っつってもミリ秒レベルの約定のどれ? って話になってくるとは思うのですが。

「マイニングのため取得時価が算定困難な際は場合は特定取引所の午前0時での金額とする」だったらみんな楽になれたと思うんですが、今年の確定申告は大物が釣れそうなので大変です。誰かは分からんが一回は見せしめとして新聞に載る奴が出るだろう。

……まあモナコイン101円程度でも一度当事者になってみると意味がわかるものだな。いや計算が絶対めんどくさいからXMR掘れないというのでお試しでモナコインにしただけなんですけどね。

所得計算で税務署に説明できる論拠の目途が立たんと外国取引所でXMRチャレンジできないとでもいうか。

とりあえずガチで計算するならBinanceでXXX → BTC → USDT (をUSDと見做す)→ JPY で何とかって話にしないと厳しい?

https://api.binance.com/api/v1/aggTrades?symbol=[通貨ペア]&startTime=[開始時間、ミリ秒単位のUNIX時間]&endTime=[ミリ秒単位のUNIX時間]APIでその時間帯に合った取引のIDが分かります。正確には大体1IDが複数ポンポンとjsonで帰ってくるんですが、IDが複数一塊の可能性もあるので要注意。

つまりこうですか。ごめん今クッソ眠いからゴミしか書けんぞ。

require 'time'
require 'uri'
require 'net/http'
require 'json'
require 'pp'

APPEND_MILLISEC = 1000

# 特定の秒で実施された取引ID取得
# 現状のBinanceのAPIでは「特定の秒でのXXX-BTCトレード価格を出すやつ」はない
def get_certain_trade_id_list(base_time, pair)
  backward_sec = 0
  result_list = []

  while result_list.empty?
    # 1秒間に取引なかったらもっと前みるしかねえ
    start_time = base_time - backward_sec
    end_time = base_time + 1

    # パラメータは秒単位じゃなくてミリ秒単位
    start_time = start_time.to_i * APPEND_MILLISEC
    end_time = end_time.to_i * APPEND_MILLISEC

    time_uri = "https://api.binance.com/api/v1/aggTrades?symbol=#{pair}&startTime=#{start_time}&endTime=#{end_time}"
    
    #p time_uri

    result_json = Net::HTTP.get URI.parse(time_uri)
    result_list = JSON::parse result_json
    
    backward_sec += 1
  end
  
  all_id_list = []
  
  # 1秒に2件以上同時に取引あったらどーなるかなー
  result_list.each {|trade_hash| all_id_list += ((trade_hash["f"])..(trade_hash["l"])).to_a }
  
  return all_id_list
end

base_time = Time.now # 実際はマイニング成功の時間、Timeクラスで秒単位Unix時間に変換した奴を入れれ

trade_id_list = get_certain_trade_id_list(base_time, "XMRBTC")
p trade_id_list

みたいな感じで取引があったIDはわかるわけですね。とにかくここではXMRとBTCにしてますが、BTC - USDTでもできます。

まあ1秒単位にしたら時価とは言えると思いますがミリ秒単位で複数件の取引のこともありますので。

とにかく個々のIDから金額(複数)を引っ張り、通貨ペアのうち最も高いモノを1秒時点での時価として扱えば「秒単位以下のどれとかムリじゃん! 約定じゃなくて虚空からコインがポップしてるんやから秒単位計測で勘弁して!」とは言えるかも。

まあとにかくXMR → BTCの額、BTC → USDTの額が分かれば、後はどっかの日本のAPIから「USDTは1USDと同じ扱いに一応なってるのでUSD換算として、そっから為替レートでJPYにしたものが収入だ」とは言えるかも、という話。

簡単に言うと「マイニング時の収入を後日計算」ってのを自動化するという話ですね。まだこれ中途半端ですが今日はもう寝ないとダメだ……。

API Keyが必要なAPIで詰む

で、取引IDから金額を引くAPIに問題あり。カギが必要 orz

https://api.binance.com/api/v1/historicalTrades?symbol=XMRBTC&limit=1&fromId=xxxxxxxx

僕Binanceのアカウント持ってないからAPI Key振り出されてないわけで……っていうか最近早起きやから眠い。もう寝ていい? いつもみたいなパワー押し出来へんので、中途半端でごめんね。明日か明後日かやるわ……。

なお売っちゃった人は

その額が雑所得になるのでそのまま載せるだけでOKかと。ホールドしてる分がアウト。