linwj / exchanges
这是一个集成多个交易所的虚拟货币SDK
1.8.9
2024-01-02 07:02 UTC
Requires
- php: >=7.0
- linwj/bigone: *
- linwj/binance: *
- linwj/bitfinex: *
- linwj/bitget: *
- linwj/bitmex: *
- linwj/bittrex: *
- linwj/bybit: *
- linwj/coinbase: *
- linwj/coinex: *
- linwj/gate: *
- linwj/huobi: *
- linwj/kraken: *
- linwj/kucoin: *
- linwj/mxc: *
- linwj/okex: *
- linwj/poloniex: *
- linwj/zb: *
- dev-master
- 1.8.9
- 1.8.8
- 1.8.7
- 1.8.6
- 1.8.5
- 1.8.4
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8.0
- 1.7.9
- 1.7.8
- 1.7.7
- 1.7.6
- 1.7.5
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.9
- 1.6.8
- 1.6.7
- 1.6.6
- 1.6.5
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.9
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.9
- 1.3.8
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dev_1.2
- dev-dev
This package is auto-updated.
Last update: 2024-08-31 00:38:42 UTC
README
简介
此SDK集成了目前交易最频繁的多个交易所的API,让开发者只需关注业务层。它基于Bitmex、Okex、Huobi、Binance等,并再次封装这些底层数据API。其优点在于支持同时多平台,支持统一参数输入输出,也支持原生参数输入,并简化量化交易,以满足您的全部需求。即使您有特殊需求,也可以使用getPlatform()方法返回实例并调用底层数据API。
其他交易所API
交易所 包含以下交易所,并强烈推荐。
如果您找不到想要的交易所SDK,可以告诉我,我会将其加入。
安装
composer require linwj/exchanges
交易所初始化
//Public $exchanges=new Exchanges('binance'); $exchanges=new Exchanges('bitmex'); $exchanges=new Exchanges('okex'); $exchanges=new Exchanges('huobi'); $exchanges=new Exchanges('kucoin'); ... ... //Private $exchanges=new Exchanges('binance',$key,$secret); $exchanges=new Exchanges('bitmex',$key,$secret); $exchanges=new Exchanges('okex',$key,$secret,$passphrase); $exchanges=new Exchanges('huobi',$key,$secret,$account_id); $exchanges=new Exchanges('kucoin',$key,$secret,$passphrase); ... ...
统一参数返回
所有提交的参数和返回值,只要第一个字符为下划线_,所有都是自定义参数。
/** * Buy() Sell() Show() Uniform parameter return * @return [ * ***Return to original data * ... * ... * ***Returns custom data in a uniform return parameter format with '_' underscore * _status=>NEW PART_FILLED FILLED CANCELING CANCELLED FAILURE * _filled_qty=>Number of transactions completed * _price_avg=>Average transaction price * _filed_amount=>transaction price * _order_id=>system ID * _client_id=>custom ID * ] * * */ /** * System error * http request code 400 403 500 503 * @return [ * _error=>[ * ***Return to original data * ... * ... * ***Returns custom data in a uniform return parameter format with '_' underscore * _method => POST * _url => https://testnet.bitmex.com/api/v1/order * _httpcode => 400 * ] * ] * */
默认情况下,买入卖出方法有2秒的等待时间。2秒。因为交易所是匹配交易,查询需要等待。默认2秒查询可以关闭如下:buy($data,false)
买入卖出查询统一参数返回 detail
系统错误统一参数返回 binance okex huobi bitmex kucoin
当前SDK仅支持REST请求,暂时不支持Websocket,以后将添加。
支持更多请求设置 更多
$exchanges->setOptions([ //Set the request timeout to 60 seconds by default 'timeout'=>10, //https://github.com/guzzle/guzzle 'proxy'=>[], //https://php.ac.cn/manual/en/book.curl.php 'curl'=>[], ]);
现货交易者
市场
//binance $exchanges->trader()->buy([ '_symbol'=>'BTCUSDT', '_number'=>'0.01', ]); //Support for original parameters $exchanges->trader()->buy([ 'symbol'=>'BTCUSDT', 'type'=>'MARKET', 'quantity'=>'0.01', ]); //okex default V3 //$exchanges->setPlatform('spot')->setVersion('v5');// Use V5 $exchanges->trader()->buy([ '_symbol'=>'BTC-USDT', '_price'=>'10', ]); //Support for original parameters $exchanges->trader()->buy([ 'instrument_id'=>'btc-usdt', 'type'=>'market', 'notional'=>'10' ]); //huobi $exchanges->trader()->buy([ '_symbol'=>'btcusdt', '_price'=>'10', ]); //Support for original parameters $exchanges->trader()->buy([ 'account-id'=>$account_id, 'symbol'=>'btcusdt', 'type'=>'buy-market', 'amount'=>10 ]);
限价
//binance $exchanges->trader()->buy([ '_symbol'=>'BTCUSDT', '_number'=>'0.01', '_price'=>'2000', ]); //Support for original parameters $exchanges->trader()->buy([ 'symbol'=>'BTCUSDT', 'type'=>'LIMIT', 'quantity'=>'0.01', 'price'=>'2000', 'timeInForce'=>'GTC', ]); //okex default V3 //$exchanges->setPlatform('spot')->setVersion('v5');// Use V5 $exchanges->trader()->buy([ '_symbol'=>'BTC-USDT', '_number'=>'0.001', '_price'=>'2000', ]); //Support for original parameters $exchanges->trader()->buy([ 'instrument_id'=>'btc-usdt', 'price'=>'100', 'size'=>'0.001', ]); //huobi $exchanges->trader()->buy([ '_symbol'=>'btcusdt', '_number'=>'0.001', '_price'=>'2000', ]); //Support for original parameters $exchanges->trader()->buy([ 'account-id'=>$account_id, 'symbol'=>'btcusdt', 'type'=>'buy-limit', 'amount'=>'0.001', 'price'=>'2001', ]);
期货交易者
市场
//binance $exchanges->trader()->buy([ '_symbol'=>'BTCUSDT', '_number'=>'0.001', ]); //Support for original parameters $exchanges->trader()->buy([ 'symbol'=>'BTCUSDT', 'quantity'=>'0.001', 'type'=>'MARKET', ]); //bitmex $exchanges->trader()->buy([ '_symbol'=>'XBTUSD', '_number'=>'1', ]); //Support for original parameters $exchanges->trader()->buy([ 'symbol'=>'XBTUSD', 'orderQty'=>'1', 'ordType'=>'Market', ]); //okex default V3 //$exchanges->setPlatform('future')->setVersion('v5');// Use V5 $exchanges->trader()->buy([ '_symbol'=>'BTC-USD-190628', '_number'=>'1', '_entry'=>true,//buy=ture | buy=false ]); $exchanges->trader()->sell([ '_symbol'=>'BTC-USD-190628', '_number'=>'1', '_entry'=>true,//sell=ture | sell=false ]); //Support for original parameters $exchanges->trader()->buy([ 'instrument_id'=>'BTC-USD-190628', 'size'=>1, 'type'=>1,//1:open long 2:open short 3:close long 4:close short //'price'=>2000, 'leverage'=>10,//10x or 20x leverage 'match_price' => 1, 'order_type'=>0, ]); //huobi $exchanges->trader()->buy([ '_symbol'=>'ETC191227', '_number'=>'1', '_entry'=>true,//true:open false:close ]); //Support for original parameters $exchanges->trader()->buy([ 'symbol'=>'XRP',//string false "BTC","ETH"... 'contract_type'=>'quarter',//string false Contract Type ("this_week": "next_week": "quarter":) 'contract_code'=>'XRP190927',//string false BTC180914 //'price'=>'0.3',// decimal true Price 'volume'=>'1',//long true Numbers of orders (amount) //'direction'=>'buy',// string true Transaction direction 'offset'=>'open',// string true "open", "close" 'order_price_type'=>'opponent',//"limit", "opponent" 'lever_rate'=>20,//int true Leverage rate [if“Open”is multiple orders in 10 rate, there will be not multiple orders in 20 rate ]);
限价
//binance $exchanges->trader()->buy([ '_symbol'=>'BTCUSDT', '_number'=>'0.001', '_price'=>'6000' ]); //Support for original parameters $exchanges->trader()->buy([ 'symbol'=>'BTCUSDT', 'quantity'=>'0.001', 'type'=>'LIMIT', 'price'=>'6500', 'timeInForce'=>'GTC', ]); //bitmex $exchanges->trader()->buy([ '_symbol'=>'XBTUSD', '_number'=>'1', '_price'=>100 ]); //Support for original parameters $exchanges->trader()->buy([ 'symbol'=>'XBTUSD', 'price'=>'100', 'orderQty'=>'1', 'ordType'=>'Limit', ]); //okex default V3 //$exchanges->setPlatform('future')->setVersion('v5');// Use V5 $exchanges->trader()->buy([ '_symbol'=>'BTC-USD-190628', '_number'=>'1', '_price'=>'2000', '_entry'=>true,//open long ]); //Support for original parameters $exchanges->trader()->buy([ 'instrument_id'=>'BTC-USD-190628', 'size'=>1, 'type'=>1,//1:open long 2:open short 3:close long 4:close short 'price'=>2000, 'leverage'=>10,//10x or 20x leverage 'match_price' => 0, 'order_type'=>0, ]); //huobi $exchanges->trader()->buy([ '_symbol'=>'XRP190927', '_number'=>'1', '_price'=>'0.3', '_entry'=>true,//true:open false:close ]); //Support for original parameters $exchanges->trader()->buy([ 'symbol'=>'XRP',//string false "BTC","ETH"... 'contract_type'=>'quarter',//string false Contract Type ("this_week": "next_week": "quarter":) 'contract_code'=>'XRP190927',// string false BTC180914 'price'=>'0.3',//decimal true Price 'volume'=>'1',//long true Numbers of orders (amount) //'direction'=>'buy',// string true Transaction direction 'offset'=>'open',// string true "open", "close" 'order_price_type'=>'limit',//"limit", "opponent" 'lever_rate'=>20,//int true Leverage rate [if“Open”is multiple orders in 10 rate, there will be not multiple orders in 20 rate ]);
获取订单详情
//binance $exchanges->trader()->show([ '_symbol'=>'BTCUSDT', '_order_id'=>'324314658', //'_client_id'=>'1bc3e974577a6ad9ce730006eafb5522', ]); //bitmex $exchanges->trader()->show([ '_symbol'=>'XBTUSD', '_order_id'=>'7d03ac2a-b24d-f48c-95f4-2628e6411927', //'_client_id'=>'1bc3e974577a6ad9ce730006eafb5522', ]); //okex default V3 //$exchanges->setPlatform('spot')->setVersion('v5');// Use V5 $exchanges->trader()->show([ '_symbol'=>'BTC-USDT', '_order_id'=>'2671215997495296', //'_client_id'=>'1bc3e974577a6ad9ce730006eafb5522', ]); $exchanges->trader()->show([ '_symbol'=>'BTC-USD-190927', '_order_id'=>'2671566274710528', //'_client_id'=>'1bc3e974577a6ad9ce730006eafb5522', ]); $exchanges->trader()->show([ '_symbol'=>'BTC-USD-SWAP', '_order_id'=>'2671566274710528', //'_client_id'=>'1bc3e974577a6ad9ce730006eafb5522', ]); //huobi spot $exchanges->trader()->show([ '_order_id'=>'29897313869', //'_client_id'=>'1bc3e974577a6ad9ce730006eafb5522', ]); //huobi future $exchanges->trader()->show([ '_symbol'=>'XRP190927', '_order_id'=>'2715696586', //'_client_id'=>'1bc3e974577a6ad9ce730006eafb5522', ]);
获取账户或仓位
//binance //Get current account information. $exchanges->account()->get(); //bitmex //bargaining transaction $exchanges->account()->get([ //Default return all //'_symbol'=>'XBTUSD' ]); //okex spot //This endpoint supports getting the balance, amount available/on hold of a token in spot account. $exchanges->account()->get([ '_symbol'=>'BTC', ]); //okex future //Get the information of holding positions of a contract. $exchanges->account()->get([ '_symbol'=>'BTC-USD-190628', ]); //okex swap $exchanges->account()->get([ '_symbol'=>'BTC-USD-SWAP', ]); //huobi spot $exchanges->account()->get([ '_symbol'=>'btcusdt', ]); //huobi future $exchanges->account()->get([ '_symbol'=>'BTC190927', ]);
支持原始参数
以下是对底层API发起新订单实例的调用
以下是对底层API发起新订单实例的调用。有两种方式调用底层API。
方法1:通过 $exchanges -> getplatform ()
//binance $exchanges=new Exchanges('binance',$key,$secret); $exchanges->getPlatform('spot')->trade()->postOrder([ 'symbol'=>'BTCUSDT', 'side'=>'BUY', 'type'=>'LIMIT', 'quantity'=>'0.01', 'price'=>'2000', 'timeInForce'=>'GTC', ]); $exchanges->getPlatform('future')->trade()->postOrder([ 'symbol'=>'BTCUSDT', 'side'=>'BUY', 'type'=>'LIMIT', 'quantity'=>'0.01', 'price'=>'2000', 'timeInForce'=>'GTC', ]); //bitmex $exchanges=new Exchanges('bitmex',$key,$secret); $exchanges->getPlatform()->order()->post([ 'symbol'=>'XBTUSD', 'price'=>'100', 'side'=>'Buy', 'orderQty'=>'1', 'ordType'=>'Limit', ]); //okex $exchanges=new Exchanges('okex',$key,$secret); $exchanges->getPlatform('spot')->order()->post([ 'instrument_id'=>'btc-usdt', 'side'=>'buy', 'price'=>'100', 'size'=>'0.001', //'type'=>'market', //'notional'=>'100' ]); $exchanges->getPlatform('future')->order()->post([ 'instrument_id'=>'btc-usd-190628', 'type'=>'1', 'price'=>'100', 'size'=>'1', ]); $result=$exchanges->getPlatform('swap')->order()->post([ 'instrument_id'=>'BTC-USD-SWAP', 'type'=>'1', 'price'=>'5000', 'size'=>'1', ]); //huobi $exchanges=new Exchanges('huobi',$key,$secret); $exchanges->getPlatform('spot')->order()->postPlace([ 'account-id'=>$account_id, 'symbol'=>'btcusdt', 'type'=>'buy-limit', 'amount'=>'0.001', 'price'=>'100', ]); $exchanges->getPlatform('future')->contract()->postOrder([ 'symbol'=>'XRP',//string false "BTC","ETH"... 'contract_type'=>'quarter',// string false Contract Type ("this_week": "next_week": "quarter":) 'contract_code'=>'XRP190927',// string false BTC180914 'price'=>'0.3',// decimal true Price 'volume'=>'1',// long true Numbers of orders (amount) 'direction'=>'buy',// string true Transaction direction 'offset'=>'open',// string true "open", "close" 'order_price_type'=>'limit',//"limit", "opponent" 'lever_rate'=>20,//int true Leverage rate [if“Open”is multiple orders in 10 rate, there will be not multiple orders in 20 rate //'client_order_id'=>'',//long false Clients fill and maintain themselves, and this time must be greater than last time ]);
方法2:直接实例化底层交易所。以下代码与模式1等效。
//binance $binance=new Binance($key,$secret); $binance->trade()->postOrder([ 'symbol'=>'BTCUSDT', 'side'=>'BUY', 'type'=>'LIMIT', 'quantity'=>'0.01', 'price'=>'2000', 'timeInForce'=>'GTC', ]); $binance=new BinanceFuture($key,$secret); $binance->trade()->postOrder([ 'symbol'=>'BTCUSDT', 'side'=>'BUY', 'type'=>'LIMIT', 'quantity'=>'0.01', 'price'=>'2000', 'timeInForce'=>'GTC', ]); //bitmex $bitmex=new Bitmex($key,$secret); $bitmex->order()->post([ 'symbol'=>'XBTUSD', 'price'=>'100', 'side'=>'Buy', 'orderQty'=>'1', 'ordType'=>'Limit', ]); //okex $okex=new OkexSpot($key,$secret,$passphrase); $okex->order()->post([ 'instrument_id'=>'btc-usdt', 'side'=>'buy', 'price'=>'100', 'size'=>'0.001', //'type'=>'market', //'notional'=>'100' ]); $okex=new OkexFuture($key,$secret,$passphrase); $okex->order()->post([ 'instrument_id'=>'btc-usd-190628', 'type'=>'1', 'price'=>'100', 'size'=>'1', ]); $okex=new OkexSwap($key,$secret,$passphrase); $okex->order()->post([ 'instrument_id'=>'BTC-USD-SWAP', 'type'=>'1', 'price'=>'5000', 'size'=>'1', ]); //huobi $huobi=new HuobiSpot($key,$secret); $huobi->order()->postPlace([ 'account-id'=>$account_id, 'symbol'=>'btcusdt', 'type'=>'buy-limit', 'amount'=>'0.001', 'price'=>'100', ]); $huobi=new HuobiFuture($key,$secret); $huobi->contract()->postOrder([ 'symbol'=>'XRP',//string false "BTC","ETH"... 'contract_type'=>'quarter',// string false Contract Type ("this_week": "next_week": "quarter":) 'contract_code'=>'XRP190927',// string false BTC180914 'price'=>'0.3',// decimal true Price 'volume'=>'1',// long true Numbers of orders (amount) 'direction'=>'buy',// string true Transaction direction 'offset'=>'open',// string true "open", "close" 'order_price_type'=>'limit',//"limit", "opponent" 'lever_rate'=>20,//int true Leverage rate [if“Open”is multiple orders in 10 rate, there will be not multiple orders in 20 rate //'client_order_id'=>'',//long false Clients fill and maintain themselves, and this time must be greater than last time ]);