exchanges

package module
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 7, 2020 License: Apache-2.0 Imports: 4 Imported by: 1

README

exchanges

介绍

现有开源不能满足我策略写一遍,交易所可以更换的需求。同一个策略,不同的交易所有不同的版本管理起来会崩溃

Documentation

Index

Constants

View Source
const (
	SimEventKey   = "event"
	SimEventOrder = "order" // 委托
	SimEventDeal  = "deal"  // 成交
)

回测交易撮合事件类型

View Source
const (
	ContractTypeNone = ""   // Non-delivery contract 非交割合约
	ContractTypeW1   = "W1" // week 当周合约
	ContractTypeW2   = "W2" // two week 次周合约
	ContractTypeM1   = "M1" // month 月合约
	ContractTypeQ1   = "Q1" // quarter 季度合约
	ContractTypeQ2   = "Q2" // two quarter 次季度合约
)

ContractType 合约类型

View Source
const (
	PERIOD_1MIN   = "1m"
	PERIOD_3MIN   = "3m"
	PERIOD_5MIN   = "5m"
	PERIOD_15MIN  = "15m"
	PERIOD_30MIN  = "30m"
	PERIOD_60MIN  = "60m"
	PERIOD_1H     = "1h"
	PERIOD_2H     = "2h"
	PERIOD_3H     = "3h"
	PERIOD_4H     = "4h"
	PERIOD_6H     = "6h"
	PERIOD_8H     = "8h"
	PERIOD_12H    = "12h"
	PERIOD_1DAY   = "1d"
	PERIOD_3DAY   = "3d"
	PERIOD_1WEEK  = "1w"
	PERIOD_1MONTH = "1M"
	PERIOD_1YEAR  = "1y"
)

K线周期

Variables

View Source
var (
	ErrNotImplemented    = errors.New("not implement")
	ErrWebSocketDisabled = errors.New("websocket disabled")
	ErrApiKeysRequired   = errors.New("api keys required")

	ErrInvalidAmount = errors.New("amount is not valid")
)

Functions

This section is empty.

Types

type ApiOption

type ApiOption func(p *Parameters)

func ApiAccessKeyOption

func ApiAccessKeyOption(accessKey string) ApiOption

func ApiApiURLOption

func ApiApiURLOption(apiURL string) ApiOption

func ApiDebugModeOption

func ApiDebugModeOption(debugMode bool) ApiOption

func ApiHttpClientOption

func ApiHttpClientOption(httpClient *http.Client) ApiOption

func ApiPassPhraseOption

func ApiPassPhraseOption(passPhrase string) ApiOption

func ApiProxyURLOption

func ApiProxyURLOption(proxyURL string) ApiOption

func ApiSecretKeyOption

func ApiSecretKeyOption(secretKey string) ApiOption

func ApiTestnetOption

func ApiTestnetOption(testnet bool) ApiOption

func ApiWebSocketOption

func ApiWebSocketOption(enabled bool) ApiOption

func ApiWsURLOption

func ApiWsURLOption(wsURL string) ApiOption

type Balance

type Balance struct {
	Equity        float64 // 净值
	Available     float64 // 可用余额
	Margin        float64 // 已用保证金
	RealizedPnl   float64
	UnrealisedPnl float64
}

type Direction

type Direction int

Direction 委托/持仓方向

const (
	Buy       Direction = iota // 做多
	Sell                       // 做空
	CloseBuy                   // 平多
	CloseSell                  // 平空
)

func (Direction) String

func (d Direction) String() string

type Exchange

type Exchange interface {

	// 获取 Exchange 名称
	GetName() (name string)

	// 获取交易所时间(ms)
	GetTime() (tm int64, err error)

	// 获取账号余额
	GetBalance(currency string) (result *Balance, err error)

	// 获取订单薄(OrderBook)
	GetOrderBook(symbol string, depth int) (result *OrderBook, err error)

	// 获取K线数据
	// period: 数据周期. 分钟或者关键字1m(minute) 1h 1d 1w 1M(month) 1y 枚举值:1 3 5 15 30 60 120 240 360 720 "5m" "4h" "1d" ...
	GetRecords(symbol string, period string, from int64, end int64, limit int) (records []*Record, err error)

	// 设置合约类型
	// currencyPair: 交易对,如: BTC-USD(OKEX) BTC(HBDM)
	// contractType: W1,W2,Q1,Q2
	SetContractType(currencyPair string, contractType string) (err error)

	// 获取当前设置的合约ID
	GetContractID() (symbol string, err error)

	// 设置杠杆大小
	SetLeverRate(value float64) (err error)

	// 开多
	OpenLong(symbol string, orderType OrderType, price float64, size float64) (result *Order, err error)

	// 开空
	OpenShort(symbol string, orderType OrderType, price float64, size float64) (result *Order, err error)

	// 平多
	CloseLong(symbol string, orderType OrderType, price float64, size float64) (result *Order, err error)

	// 平空
	CloseShort(symbol string, orderType OrderType, price float64, size float64) (result *Order, err error)

	// 下单
	PlaceOrder(symbol string, direction Direction, orderType OrderType, price float64, size float64,
		opts ...PlaceOrderOption) (result *Order, err error)

	// 获取活跃委托单列表
	GetOpenOrders(symbol string, opts ...OrderOption) (result []*Order, err error)

	// 获取委托信息
	GetOrder(symbol string, id string, opts ...OrderOption) (result *Order, err error)

	// 撤销全部委托单
	CancelAllOrders(symbol string, opts ...OrderOption) (err error)

	// 撤销单个委托单
	CancelOrder(symbol string, id string, opts ...OrderOption) (result *Order, err error)

	// 修改委托
	AmendOrder(symbol string, id string, price float64, size float64, opts ...OrderOption) (result *Order, err error)

	// 获取持仓
	GetPositions(symbol string) (result []*Position, err error)

	// 订阅成交记录
	SubscribeTrades(market Market, callback func(trades []*Trade)) error

	// 订阅L2 OrderBook
	SubscribeLevel2Snapshots(market Market, callback func(ob *OrderBook)) error

	// 订阅委托
	SubscribeOrders(market Market, callback func(orders []*Order)) error

	// 订阅持仓
	SubscribePositions(market Market, callback func(positions []*Position)) error
}

Exchange 交易所接口

type Item

type Item struct {
	Price  float64
	Amount float64
}

type Market

type Market struct {
	Symbol string // BTCUSDT(OKEX)/XBTUSD(BitMEX)/...
}

Market 市场信息

type Order

type Order struct {
	ID           string      `json:"id"`            // ID
	ClientOId    string      `json:"client_oid"`    // 客户端订单ID
	Symbol       string      `json:"symbol"`        // 标
	Time         time.Time   `json:"time"`          // 订单时间
	Price        float64     `json:"price"`         // 价格
	StopPx       float64     `json:"stop_px"`       // 触发价
	Amount       float64     `json:"amount"`        // 委托数量
	AvgPrice     float64     `json:"avg_price"`     // 平均成交价
	FilledAmount float64     `json:"filled_amount"` // 成交数量
	Direction    Direction   `json:"direction"`     // 委托方向
	Type         OrderType   `json:"type"`          // 委托类型
	PostOnly     bool        `json:"post_only"`     // 只做Maker选项
	ReduceOnly   bool        `json:"reduce_only"`   // 只减仓选项
	Commission   float64     `json:"commission"`    // 支付的佣金
	Pnl          float64     `json:"pnl"`           // 盈亏
	UpdateTime   time.Time   `json:"update_time"`   // 更新时间
	Status       OrderStatus `json:"status"`        // 委托状态
}

Order 委托

func (*Order) IsOpen

func (o *Order) IsOpen() bool

IsOpen 是否活跃委托

type OrderBook

type OrderBook struct {
	Symbol string
	Time   time.Time
	Asks   []Item
	Bids   []Item
}

func (*OrderBook) Ask

func (o *OrderBook) Ask() (result Item)

Ask 卖一

func (*OrderBook) AskAvePrice

func (o *OrderBook) AskAvePrice(size float64) float64

func (*OrderBook) AskPrice

func (o *OrderBook) AskPrice() (result float64)

AskPrice 卖一价

func (*OrderBook) Bid

func (o *OrderBook) Bid() (result Item)

Bid 买一

func (*OrderBook) BidAvePrice

func (o *OrderBook) BidAvePrice(size float64) float64

func (*OrderBook) BidPrice

func (o *OrderBook) BidPrice() (result float64)

BidPrice 买一价

func (*OrderBook) MatchAsks

func (o *OrderBook) MatchAsks(size float64) (filledSize float64, avgPrice float64)

func (*OrderBook) MatchBids

func (o *OrderBook) MatchBids(size float64) (filledSize float64, avgPrice float64)

func (*OrderBook) MatchOrderbook

func (o *OrderBook) MatchOrderbook(size float64, ob []Item) (filledSize float64, avgPrice float64)

func (*OrderBook) Price

func (o *OrderBook) Price() float64

Price returns the middle of Bid and Ask.

func (*OrderBook) Table

func (o *OrderBook) Table() string

type OrderOption

type OrderOption func(p *OrderParameter)

订单选项

func OrderStopOption

func OrderStopOption(stop bool) OrderOption

触发委托选项

type OrderParameter

type OrderParameter struct {
	Stop bool // 是否是触发委托
}

func ParseOrderParameter

func ParseOrderParameter(opts ...OrderOption) *OrderParameter

type OrderStatus

type OrderStatus int

OrderStatus 委托状态

const (
	OrderStatusCreated         OrderStatus = iota // 创建委托
	OrderStatusRejected                           // 委托被拒绝
	OrderStatusNew                                // 委托待成交
	OrderStatusPartiallyFilled                    // 委托部分成交
	OrderStatusFilled                             // 委托完全成交
	OrderStatusCancelPending                      // 委托取消
	OrderStatusCancelled                          // 委托被取消
	OrderStatusUntriggered                        // 等待触发条件委托单
	OrderStatusTriggered                          // 已触发条件单
)

func (OrderStatus) String

func (s OrderStatus) String() string

type OrderType

type OrderType int

OrderType 委托类型

const (
	OrderTypeMarket     OrderType = iota // 市价单
	OrderTypeLimit                       // 限价单
	OrderTypeStopMarket                  // 市价止损单
	OrderTypeStopLimit                   // 限价止损单
)

func (OrderType) String

func (t OrderType) String() string

type Parameters

type Parameters struct {
	DebugMode  bool
	HttpClient *http.Client
	ProxyURL   string // example: socks5://127.0.0.1:1080 | http://127.0.0.1:1080
	ApiURL     string
	WsURL      string
	Testnet    bool
	AccessKey  string
	SecretKey  string
	Passphrase string
	WebSocket  bool // Enable websocket option
}

Parameters 参数选项.

type PlaceOrderOption

type PlaceOrderOption func(p *PlaceOrderParameter)

订单选项

func OrderBasePriceOption

func OrderBasePriceOption(basePrice float64) PlaceOrderOption

基础价格选项(如: bybit 需要提供此参数)

func OrderClientOIdOption

func OrderClientOIdOption(clientOId string) PlaceOrderOption

func OrderPostOnlyOption

func OrderPostOnlyOption(postOnly bool) PlaceOrderOption

被动委托选项

func OrderPriceTypeOption

func OrderPriceTypeOption(priceType string) PlaceOrderOption

OrderPriceType 选项

func OrderReduceOnlyOption

func OrderReduceOnlyOption(reduceOnly bool) PlaceOrderOption

只减仓选项

func OrderStopPxOption

func OrderStopPxOption(stopPx float64) PlaceOrderOption

触发价格选项

type PlaceOrderParameter

type PlaceOrderParameter struct {
	BasePrice  float64
	StopPx     float64
	PostOnly   bool
	ReduceOnly bool
	PriceType  string
	ClientOId  string
}

func ParsePlaceOrderParameter

func ParsePlaceOrderParameter(opts ...PlaceOrderOption) *PlaceOrderParameter

type Position

type Position struct {
	Symbol    string    `json:"symbol"`     // 标
	OpenTime  time.Time `json:"open_time"`  // 开仓时间
	OpenPrice float64   `json:"open_price"` // 开仓价
	Size      float64   `json:"size"`       // 仓位大小
	AvgPrice  float64   `json:"avg_price"`  // 平均价
	Profit    float64   `json:"profit"`     //浮动盈亏
}

Position 持仓

func (*Position) IsLong

func (p *Position) IsLong() bool

IsLong 是否多仓

func (*Position) IsOpen

func (p *Position) IsOpen() bool

IsOpen 是否持仓

func (*Position) IsShort

func (p *Position) IsShort() bool

IsShort 是否空仓

func (*Position) Side

func (p *Position) Side() Direction

type Record

type Record struct {
	Symbol    string    `json:"symbol"`    // 标
	Timestamp time.Time `json:"timestamp"` // 时间
	Open      float64   `json:"open"`      // 开盘价
	High      float64   `json:"high"`      // 最高价
	Low       float64   `json:"low"`       // 最低价
	Close     float64   `json:"close"`     // 收盘价
	Volume    float64   `json:"volume"`    // 量
}

Record 表示K线数据

type Trade

type Trade struct {
	ID        string    `json:"id"`     // ID
	Direction Direction `json:"type"`   // 主动成交方向
	Price     float64   `json:"price"`  // 价格
	Amount    float64   `json:"amount"` // 成交量(张),买卖双边成交量之和
	Ts        int64     `json:"ts"`     // 订单成交时间 unix time (ms)
	Symbol    string    `json:"omitempty"`
}

Trade 成交记录

type TradeMode

type TradeMode int

TradeMode 策略模式

const (
	TradeModeBacktest TradeMode = iota
	TradeModePaperTrading
	TradeModeLiveTrading
)

func (TradeMode) String

func (t TradeMode) String() string

type WSEvent

type WSEvent int

WS 事件

const (
	WSEventTrade WSEvent = iota + 1
	WSEventL2Snapshot
	WSEventBalance
	WSEventOrder
	WSEventPosition
	WSEventError
	WSEventDisconnected
	WSEventReconnected
)

WS 事件枚举

type WebSocket

type WebSocket interface {
	SubscribeTrades(market Market, callback func(trades []Trade)) error
	SubscribeLevel2Snapshots(market Market, callback func(ob *OrderBook)) error
	//SubscribeBalances(market Market, callback func(balance *Balance)) error
	SubscribeOrders(market Market, callback func(orders []Order)) error
	SubscribePositions(market Market, callback func(positions []Position)) error
}

WebSocket 代表WS连接

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL