ZaifSwift 0.3.1

ZaifSwift 0.3.1

测试已测试
Lang语言 SwiftSwift
许可证 MIT
Released上次发布2017年5月
SPM支持SPM

kyotaw 维护。



 
依赖关系
CryptoSwift>= 0
Alamofire~> 4.0
SwiftWebSocket= 2.6.5
SwiftyJSON>= 0
 

ZaifSwift 0.3.1

  • kyotaw

Swift的Zaif交易所API(版本1.05.01)包装器

要求

  • Swift 2.2
  • Alamofire 3.4或更高版本
  • CryptoSwift 0.5或更高版本
  • SwiftyJSON
  • SwiftWebSocket

安装

您可以使用CocoaPods安装ZaifSwift。
Podfile

platform :ios, '9.0'
use_frameworks!

target 'MyProj' do
    pod 'ZaifSwift'
end

私有API

  • 创建私有api实例

私有api需要您的自己的API密钥。如果您没有密钥,请访问Zaif网站(《https://zaif.jp/》)并生成您的密钥。

let privateApi = PrivateApi(apiKey: myKey, secretKey: mySecret)
  • get_info
privateApi.getInfo() { (err, res) in
  if let info = res {
    let jpy = info["return"]["deposit"]["jpy"].doubleValue
    let btc = info["return"]["deposit"]["btc"].doubleValue
    let mona = info["return"]["deposit"]["mona"].doubleValue
  }
}

其中,res是SwiftyJSON的JSON对象。以下其他ZaifSwift回调函数的res值也如此。

  • trade

有创建每个货币对订单的工厂。

// buy bitcoin in yen
let buyBtcOrder = Trade.Buy.Btc.In.Jpy.createOrder(60000, amount: 0.0001)
privateApi.trade(buyBtcOrder) { (err, res) in
  // process responce
}

// sell bitcoin for yen
let sellBtcOrder = Trade.Sell.Btc.For.Jpy.createOrder(80000, amount: 0.0001)
privateApi.trade(sellBtcOrder)

// buy monacoin in yen
let buyMonaOrder = Trade.Buy.Mona.In.Jpy.createOrder(5.0, amount: 1)
privateApi.trade(buyMonaOrder)

// sell monacoin for yen
let sellMonaOrder = Trade.Sell.Mona.For.Jpy.createOrder(7.0, amount: 1)
privateApi.trade(sellMonaOrder)

// buy monacoin in bitcoin
let buyMonaBtcOrder = Trade.Buy.Mona.In.Btc.createOrder(0.00000001, amount: 1)
privateApi.trade(buyMonaBtcOrder)

// sell monacoin for bitcoin
let sellMonaBtcOrder = Trade.Sell.Mona.For.Btc.createOrder(6.0, amount: 1)
privateApi.trade(sellMonaBtcOrder)

这些嵌套命名空间将有助于明确您正在订购哪种货币对,并防止误订单。如果您觉得它们是多余的,可以直接调用每个订单的构造器。

// buy bitcoin in yen
let buyBtcOrder = BuyBtcInJpyOrder(price: 60000, amount: 0.0001, limit: 60005)
privateApi.trade(buyBtcOrder)

// sell bitcoin for yen
let sellBtcOrder = SellBtcForJpyOrder(price: 80000, amount: 0.0001)
privateApi.trade(sellBtcOrder)

// buy monacoin in yen
let buyMonaOrder = BuyMonaInJpyOrder(price: 5.0, amount: 1)
privateApi.trade(buyMonaOrder)

// sell monacoin for yen
let sellMonaOrder = SellMonaForJpyOrder(price: 7.0, amount: 1)
privateApi.trade(sellMonaOrder)

// buy monacoin in bitcoin
let buyMonaBtcOrder = BuyMonaInBtcOrder(price: 0.00000001, amount: 1)
privateApi.trade(buyMonaBtcOrder)

// sell monacoin for bitcoin
let sellMonaBtcOrder = SellMonaForBtcOrder(price: 6.0, amount: 1)
privateApi.trade(sellMonaBtcOrder)
  • trade_history
let query = HistoryQuery(currencyPair: .BTC_JPY, order: .ASC, from: 0, count: 10)
privateApi.tradeHistory(query) { (err, res) in
  print(res)
}
/*
Optional({
  "return" : {
    "6366798" : {
      "currency_pair" : "btc_jpy",
      "action" : "ask",
      "amount" : 0.017,
      "your_action" : "bid",
      "price" : 75500,
      "bonus" : 0.1,
      "fee" : 0,
      "fee_amount" : 0,
      "timestamp" : "1465831143",
      "comment" : ""
    },
*/    
  • active_orders
// btc_jpy
privateApi.activeOrders(.BTC_JPY) { (err, res) in
  print(res)
}
/*
Optional({
  "return" : {
    "38342891" : {
      "amount" : 2.55,
      "currency_pair" : "btc_jpy",
      "timestamp" : "1467988800",
      "price" : 67000,
      "comment" : "",
      "action" : "ask"
    }
  },
  "success" : 1
})
*/

// mona_jpy
privateApi.activeOrders(.MONA_JPY) { (err, res) in
  print(res)
}

// mona_btc
privateApi.activeOrders(.MONA_BTC) { (err, res) in
  print(res)
}

// xem_jpy
privateApi.activeOrders(.XEM_JPY) { (err, res) in
  print(res)
}

// all pairs
privateApi.activeOrders() { (err, res) in
  print(res)
}
  • cancel_order
let orderId = 3343718
privateApi.cancelOrder(orderId) { (err, res) in
  print(res)
}
/*
Optional({
  "return" : {
    "funds" : {
      "jpy" : 173871.5225,
      "btc" : 0.00004212,
      "mona" : 17
    },
    "order_id" : 3343718
  },
  "success" : 1
})
*/
  • withdraw
  • deposit_history
  • withdraw_history

公共API

  • last_price
// btc_jpy
PublicApi.lastPrice(.BTC_JPY) { (err, res) in
  print(res)
}
/*
Optional({
  "last_price" : 67775
})
*/

// mona_jpy
PublicApi.lastPrice(.MONA_JPY) { (err, res) in
  print(res)
}

// mona_btc
PublicApi.lastPrice(.MONA_BTC) { (err, res) in
  print(res)
}

// xem_jpy
PublicApi.lastPrice(.XEM_JPY) { (err, res) in
  print(res)
}
  • ticker
// btc_jpy
PublicApi.ticker(.BTC_JPY) { (err, res) in
  print(res)
}
/*
Optional({
  "last" : 70015,
  "bid" : 70015,
  "low" : 66560,
  "volume" : 6171.2024,
  "ask" : 70040,
  "vwap" : 68672.34390000001,
  "high" : 70670
})
*/

// mona_jpy
PublicApi.ticker(.MONA_JPY) { (err, res) in
  print(res)
}

// mona_btc
PublicApi.ticker(.MONA_BTC) { (err, res) in
  print(res)
}

// xem_jpy
PublicApi.ticker(.XEM_JPY) { (err, res) in
  print(res)
}
  • trades
// btc_jpy
PublicApi.trades(.BTC_JPY) { (err, res) in
  print(res)
}
/*
Optional([
  {
    "amount" : 0.5967,
    "trade_type" : "ask",
    "tid" : 7190072,
    "currency_pair" : "btc_jpy",
    "price" : 68470,
    "date" : 1467817624
  },
  ...
*/

// mona_jpy
PublicApi.trades(.MONA_JPY) { (err, res) in
  print(res)
}

// mona_btc
PublicApi.trades(.MONA_BTC) { (err, res) in
  print(res)
}

// xem_jpy
PublicApi.trades(.XEM_JPY) { (err, res) in
  print(res)
}
  • depth
// btc_jpy
PublicApi.depth(.BTC_JPY) { (err, res) in
  print(res)
}
/*
Optional({
  "asks" : [
    [
      65035,
      0.3033
    ],
    [
      65045,
      4
    ],
  ...
  "bids" : [
    [
      65020,
      0.0617
    ],
    [
      65000,
      0.0101
    ],
  ...
*/

// mona_jpy
PublicApi.depth(.MONA_JPY) { (err, res) in
  print(res)
}

// mona_btc
PublicApi.depth(.MONA_BTC) { (err, res) in
  print(res)
}

// xem_jpy
PublicApi.depth(.XEM_JPY) { (err, res) in
  print(res)
}

##流式API

// open streaming
let stream = StreamingApi.stream(.BTC_JPY) { _,_ in
  print("opened btc_jpy streaming")
}

// recieve data
stream.onData() { (_, res) in
  print(res)
}
/*
Optional({
"asks": [[69490.0, 1.3131], ... ,
"last_price": {"action": "ask", "price": 69485.0},
...
"trades": [{"currenty_pair": "btc_jpy", "trade_type": "ask", "price": 69485.0, "currency_pair": "btc_jpy", 
...
*/

// close streaming
stream.close() { (_, res) in
  print(res)
}

// reopen streaming
stream.open() { (_, _) in
  print("reopened")
}

// handle errors
stream.onError() { (err, _) in
  print(err)
}