💰

PoloniexのAPIを使って、指定した金額になったら取引する(IFD)プログラム

2017/06/12に公開

背景

  • Poloniex で仮想通貨を取引していますが、法定通貨がUSDTしか無い。
  • ETH/BTCとかUSDT/BTCがメイン。JPYは存在しない。

問題と解決

  • 「日本円で指定金額になったら注文する」というユースケースを実現できない。
  • 例えば、「ETHが50000円になったら、51000円で指し値注文してETHを売ってBTCを買う」という注文が出来ない。
  • PoloniexでAPIが公開されているのでプログラム書いた

仕様

  • Stop Limit Orderを行っています。
    • 1分に1回レートを取得
    • 指定の金額になったらmacOSのnotification centerに通知を表示
    • 一応、1分待つ。
    • 1%高い所で指値(Limit order)を入れる。
    • プログラムが終了
  • 24時間稼働させたいならサーバで動かしておけば良い。

スクリーンショット

Screen Shot 2017-06-12 at 15.50.41.png

ソースコード

https://github.com/matsubo/poloniex_order/blob/master/main.rb

require 'rubygems'
require 'bundler/setup'

Bundler.require(:default)
Dotenv.load

Poloniex.setup do |config|
  config.key = ENV['POLONIEX_KEY']
  config.secret = ENV['POLONIEX_SECRET']
end

check_currency_pair = 'USDT_ETH'
sell_currency_pair = 'ETH_BTC'

usd_jpy = 110.24

sell_amount = 0.1

loop do
  ticker = Poloniex.ticker
  usdt_btc = JSON.parse(ticker)[check_currency_pair]['last']

  jpy_btc = usdt_btc.to_f * usd_jpy

  puts Time.now.to_s + "\t" + jpy_btc.to_s

  if jpy_btc > 38_000
    contents = jpy_btc
    title = 'Rate alert'
    system('osascript -e \'display notification "%s" with title "%s" \'' % %w[contents title])

    # execute order
    sleep 60
    rate = JSON.parse(ticker)['BTC_ETH']['lowestAsk'].to_f * 1.01
    Poloniex.sell(sell_currency_pair, rate, sell_amount)

    contents = rate
    title = 'Placed and selling order'
    system('osascript -e \'display notification "%s" with title "%s" \'' % %w[contents title])

    break
  end

  sleep 60
end

Happy FX life!

Discussion