Need help with crex?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

coinrust
145 Stars 48 Forks MIT License 319 Commits 1 Opened issues

Description

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

Services available

!
?

Need anything else?

Contributors list

GitHub go.mod Go version license build status

CREX

中文 | English

CREX 是一个用Golang语言开发的量化交易库。支持

tick
级别数字币期货平台的回测和实盘。实盘与回测无缝切换,无需更改代码。

回测

示例 @backtest

交易结果

开源策略

https://github.com/coinrust/trading-strategies

主要特性

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

支持交易所

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

| logo | id | name | ver | ws | doc | | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------- | ------------------------------------------------------------------------- | --- | --- | ----------------------------------------------------------------- | | binance | binancefutures | Binance Futures | 1 | N | API | | bitmex | bitmex | BitMEX | 1 | Y | API | | deribit | deribit | Deribit | 2 | Y | API | | bybit | bybit | Bybit | 2 | Y | API | | huobi | hbdm | Huobi DM | 1 | Y | API | | huobi | hbdmswap | Huobi Swap | 1 | Y | API | | okex | okexfutures | OKEX Futures | 3 | Y | API | | okex | okexswap | OKEX Swap | 3 | Y | API |

示例

package main

import ( . "github.com/coinrust/crex" "github.com/coinrust/crex/exchanges" "log" "time" )

type BasicStrategy struct { StrategyBase }

func (s *BasicStrategy) OnInit() error { return nil }

func (s *BasicStrategy) OnTick() error { currency := "BTC" symbol := "BTC-PERPETUAL"

balance, err := s.Exchange.GetBalance(currency)
if err != 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)

s.Exchange.PlaceOrder(symbol,
    Buy, OrderTypeLimit, 1000.0, 10, OrderPostOnlyOption(true))

s.Exchange.GetOpenOrders(symbol)
s.Exchange.GetPositions(symbol)
return nil

}

func (s *BasicStrategy) Run() error { // run loop for { s.OnTick() time.Sleep(1 * time.Second) } return nil }

func (s *BasicStrategy) OnExit() error { return nil }

func main() { 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/coinrust/crex" "github.com/coinrust/crex/exchanges" "log" )

func main() { ws := exchanges.NewExchange(exchanges.OkexFutures, ApiProxyURLOption("socks5://127.0.0.1:1080"), // 使用代理 //ApiAccessKeyOption("[accessKey]"), //ApiSecretKeyOption("[secretKey]"), //ApiPassPhraseOption("[passphrase]"), ApiWebSocketOption(true)) // 开启 WebSocket

market := 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)

时间格式

| 列名 | 描述 | | ---------------- |--------------------------------- | | t | Unix 时间戳 (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].amount
1569888000143,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,310
1569888000285,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,310
1569888000307,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,310
1569888000309,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,310
1569888000406,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,310
1569888000500,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,310
1569888000522,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,310
1569888000527,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 [[askprice0,askamount0],[askprice1,askamount1],...] b: bids Array [[bidprice0,askamount0],[bidprice1,bidamount1],...]
    json
    {"_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:

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

TODO

  • Paper trading.

QQ群

QQ群: 932289088

捐赠

| METHOD | ADDRESS | |-------- |-------------------------------------------- | | BTC | 1Nk4AsGj5HEJ5csRenTUPab1sjUySCZ3Pq | | ETH | 0xa74eade7ea08a8c48d7de4d582fac145afc86e3d |

LICENSE

MIT ©coinrust

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.