Skip to content

Repository files navigation

Trade

中文 | English

Trade 是一个用Golang语言开发的量化交易库。支持tick级别数字币期货平台的回测和实盘。实盘与回测无缝切换,无需更改代码。

回测

示例 @backtest

交易结果

主要特性

  • 使用简单
  • Tick级别回测
  • 实盘、回测公用策略代码
  • 支持 WebSocket 共有和私有订阅
  • 支持期货、现货回测
  • 支持期货双向合约,正反向合约

支持交易所

Trade库当前支持以下8个加密货币交易市场和交易API

logoidnameverwsdoc
binancebinancefuturesBinance Futures1NAPI
bitmexbitmexBitMEX1YAPI
deribitderibitDeribit2YAPI
bybitbybitBybit2YAPI
huobihbdmHuobi DM1YAPI
huobihbdmswapHuobi Swap1YAPI
okexokexfuturesOKEX Futures3YAPI
okexokexswapOKEX Swap3YAPI

示例

package main
import (
. "github.com/516310460/trade-api""github.com/516310460/trade-api/exchanges""log""time"
)
typeBasicStrategystruct {
StrategyBase
}
func (s*BasicStrategy) OnInit() error {
returnnil
}
func (s*BasicStrategy) OnTick() error {
currency:="BTC"symbol:="BTC-PERPETUAL"balance, err:=s.Exchange.GetBalance(currency)
iferr!=nil {
log.Fatal(err)
}
log.Printf("balance: %#v", balance)
s.Exchange.GetOrderBook(symbol, 10)
s.Exchange.OpenLong(symbol, OrderTypeLimit, 5000, 10)
s.Exchange.CloseLong(symbol, OrderTypeLimit, 6000, 10)
//Trailing Stop Market Order - Binance - sell stop loss order for long positioncallbackRate:=5.0// from 0.1% until 5% alloweds.Exchange.PlaceOrder(symbol, Sell, OrderTypeTrailingStopMarket, 0.0, 10,
OrderCallbackRateOption(callbackRate), OrderActivationPriceOption(5000.0), // optional - default as the latest priceOrderReduceOnlyOption(true),
)
s.Exchange.PlaceOrder(symbol,
Buy, OrderTypeLimit, 1000.0, 10, OrderPostOnlyOption(true))
s.Exchange.GetOpenOrders(symbol)
s.Exchange.GetPositions(symbol)
returnnil
}
func (s*BasicStrategy) Run() error {
// run loopfor {
s.OnTick()
time.Sleep(1*time.Second)
}
returnnil
}
func (s*BasicStrategy) OnExit() error {
returnnil
}
funcmain() {
exchange:=exchanges.NewExchange(exchanges.Deribit,
ApiProxyURLOption("socks5://127.0.0.1:1080"), // 使用代理//ApiAccessKeyOption("[accessKey]"),//ApiSecretKeyOption("[secretKey]"),ApiTestnetOption(true))
s:=&BasicStrategy{}
s.Setup(TradeModeLiveTrading, exchange)
s.OnInit()
s.Run()
s.OnExit()
}

WebSocket 示例

package main
import (
. "github.com/516310460/trade-api""github.com/516310460/trade-api/exchanges""log"
)
funcmain() {
ws:=exchanges.NewExchange(exchanges.OkexFutures,
ApiProxyURLOption("socks5://127.0.0.1:1080"), // 使用代理//ApiAccessKeyOption("[accessKey]"),//ApiSecretKeyOption("[secretKey]"),//ApiPassPhraseOption("[passphrase]"),ApiWebSocketOption(true)) // 开启 WebSocketmarket:=Market{
Symbol: "BTC-USD-200626",
}
// 订阅订单薄ws.SubscribeLevel2Snapshots(market, func(ob*OrderBook) {
log.Printf("%#v", ob)
})
// 订阅成交记录ws.SubscribeTrades(market, func(trades []*Trade) {
log.Printf("%#v", trades)
})
// 订阅订单成交信息ws.SubscribeOrders(market, func(orders []*Order) {
log.Printf("%#v", orders)
})
// 订阅持仓信息ws.SubscribePositions(market, func(positions []*Position) {
log.Printf("%#v", positions)
})
select {}
}

回测数据

1. 标准 CSV 数据格式

  • 列定界符: , (逗号)
  • 换行标记: \n (LF)
  • 日期时间格式: Unix 时间戳 (ms)

时间格式

列名描述
tUnix 时间戳 (ms)
asks[0-X].price卖单价(升序)
asks[0-X].amount卖单量
bids[0-X].price买单价(降序)
bids[0-X].amount买单量

样本数据示例

t,asks[0].price,asks[0].amount,asks[1].price,asks[1].amount,asks[2].price,asks[2].amount,asks[3].price,asks[3].amount,asks[4].price,asks[4].amount,asks[5].price,asks[5].amount,asks[6].price,asks[6].amount,asks[7].price,asks[7].amount,asks[8].price,asks[8].amount,asks[9].price,asks[9].amount,bids[0].price,bids[0].amount,bids[1].price,bids[1].amount,bids[2].price,bids[2].amount,bids[3].price,bids[3].amount,bids[4].price,bids[4].amount,bids[5].price,bids[5].amount,bids[6].price,bids[6].amount,bids[7].price,bids[7].amount,bids[8].price,bids[8].amount,bids[9].price,bids[9].amount1569888000143,8304.5,7010,8305,60,8305.5,1220,8306,80,8307,200,8307.5,1650,8308,68260,8308.5,120000,8309,38400,8309.5,8400,8304,185750,8303.5,52200,8303,20600,8302.5,4500,8302,2000,8301.5,18200,8301,18000,8300.5,90,8300,71320,8299.5,3101569888000285,8304.5,7010,8305,60,8305.5,1220,8306,80,8307,200,8307.5,1650,8308,68260,8308.5,120000,8309,38400,8309.5,8400,8304,185750,8303.5,52200,8303,20600,8302.5,4500,8302,2000,8301.5,18200,8301,18000,8300.5,5090,8300,71320,8299.5,3101569888000307,8304.5,7010,8305,60,8305.5,1220,8306,80,8307,200,8307.5,11010,8308,68260,8308.5,120000,8309,38400,8309.5,8400,8304,185750,8303.5,52200,8303,20600,8302.5,4500,8302,2000,8301.5,18200,8301,18000,8300.5,5090,8300,71320,8299.5,3101569888000309,8304.5,7010,8305,60,8305.5,1220,8306,80,8307,200,8307.5,20370,8308,68260,8308.5,120000,8309,38400,8309.5,8400,8304,185750,8303.5,52200,8303,20600,8302.5,4500,8302,2000,8301.5,18200,8301,18000,8300.5,5090,8300,71320,8299.5,3101569888000406,8304.5,7010,8305,60,8305.5,1220,8306,80,8307,8960,8307.5,11010,8308,68260,8308.5,120000,8309,38400,8309.5,8400,8304,185750,8303.5,52200,8303,20600,8302.5,4500,8302,2000,8301.5,18200,8301,18000,8300.5,5090,8300,71320,8299.5,3101569888000500,8304.5,7010,8305,60,8305.5,1220,8306,80,8307,200,8307.5,20370,8308,68260,8308.5,120000,8309,38400,8309.5,8400,8304,185750,8303.5,52200,8303,20600,8302.5,4500,8302,2000,8301.5,18200,8301,18000,8300.5,5090,8300,71320,8299.5,3101569888000522,8304.5,10270,8305,60,8305.5,1220,8306,80,8307,200,8307.5,20370,8308,68260,8308.5,120000,8309,38400,8309.5,8400,8304,185750,8303.5,52200,8303,20600,8302.5,4500,8302,2000,8301.5,18200,8301,18000,8300.5,5090,8300,71320,8299.5,3101569888000527,8304.5,10270,8305,60,8305.5,1220,8306,80,8307,200,8307.5,20370,8308,68260,8308.5,120000,8309,38400,8309.5,8400,8304,185010,8303.5,52200,8303,20600,8302.5,4500,8302,2000,8301.5,18200,8301,18000,8300.5,5090,8300,71320,8299.5,310

2. MongoDB (推荐)

  • Database. for example: tick_db
  • Collection. for example: deribit:BTC-PERPETUAL
  • Document: t: timestamp (ms) a: asks Array [[ask_price_0,ask_amount_0],[ask_price_1,ask_amount_1],...] b: bids Array [[bid_price_0,ask_amount_0],[bid_price_1,bid_amount_1],...]
{"_id":{"$oid":"5eb946d88316c7a9c541705c"},"t":{"$numberLong":"1569888000143"},"a":[[8304.5,7010],[8305,60],[8305.5,1220],[8306,80],[8307,200],[8307.5,1650],[8308,68260],[8308.5,120000],[8309,38400],[8309.5,8400]],"b":[[8304,185750],[8303.5,52200],[8303,20600],[8302.5,4500],[8302,2000],[8301.5,18200],[8301,18000],[8300.5,90],[8300,71320],[8299.5,310]]}

数据处理示例

Example of importing data into a database:

cd ./cmd/deribit-data-to-db
go build
./deribit-data-to-db

TODO

  • Paper trading.

捐赠

METHODADDRESS
BNB0x8662dA867c245e737afde7bC7C355a6d04746470

LICENSE

MIT ©coinrust

About

A Golang cryptocurrency trading API & Library. Support Binance, BitMEX, Deribit, Bybit, Huobi DM, OKEX Futures and more.

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages