作者 karlet

feat:完善部分币安

... ... @@ -7,14 +7,14 @@ require_once __DIR__ . '/../jytools/BinanceFutures.php';
use trader\struct\ApiInfo;
use trader\CmBroker;
$key = "nQMzzJlhYBkguxwtx5o4MbuiGsDfBIsrOCOUSiqCwR3wmM9gSkQnY1wczW2sVuTP";
$secret = "GUES7aaM54voJHKrrbXueWXfrJFqmqroVXCF430dolQ5uPK3i7t3Zy4nUgo2W0ec";
$key = "gfqf3key8Ywq4NkdgXl9P7eZAfH2mxNLfLAiik9xjRQ64fWitkMeOrC0HNEk5VC3";
$secret = "W0WN7WeFINJpHi7BJam6xxeNquKkcrZCiPdrr4I6PZuYGiWXDomPbmgFmGINevSB";
$apiInfo = new ApiInfo($key, $secret, "");
$broker = new CmBroker(CmBroker::PLAT_BINANCE, $apiInfo);
$broker->setWsHost("ws://bnws.a.indigo888.com/futures");
$broker->setRestHost("http://bnfapi.a.indigo888.com");
$broker->setWsHost("ws://bnws.keetu.com");
$broker->setRestHost("http://bnapi.keetu.com");
$broker->accListen(function ($data) {
var_dump($data);
// var_dump($data);
});
... ...
... ... @@ -89,59 +89,69 @@ class CmBroker
$this->exBroker->accListen(function ($data) use ($onData) {
// output("ws 有效数据", $data);
if ($this->plat == self::PLAT_BINANCE) {
$this->msg("binance 无处理ws数据实现");
$this->binanceAccDataHandle($data, $onData);
}
if ($this->plat == self::PLAT_OKX) {
if (isset($data['arg']) && $data['arg']['channel'] == 'orders') {
foreach ($data['data'] as $key => $value) {
$wsDataTrade = WsDataTrade::TransferOkxOrder($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
if ($wsDataTrade != null) {
$wsData = new WsData($this->plat, 'trade', $trade = $wsDataTrade);
$onData($wsData);
}
$wsDataOrd = WsDataOrder::TransferOkxOrder($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
if ($wsDataOrd != null) {
$wsData = new WsData($this->plat, 'order', $trade = null, $pos = null, $order = $wsDataOrd);
$onData($wsData);
}
}
return;
$this->okxAccDataHandle($data, $onData);
}
});
}
//处理币安相关账户数据监听
private function binanceAccDataHandle($data, $onData)
{
$this->msg("binance 推送", $data);
}
//处理欧意账户相关数据监听
private function okxAccDataHandle($data, $onData)
{
if (isset($data['arg']) && $data['arg']['channel'] == 'orders') {
foreach ($data['data'] as $key => $value) {
$wsDataTrade = WsDataTrade::TransferOkxOrder($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
if ($wsDataTrade != null) {
$wsData = new WsData($this->plat, 'trade', $trade = $wsDataTrade);
$onData($wsData);
}
if (isset($data['arg']) && $data['arg']['channel'] == 'positions') {
$positions = [];
$eventType = $data['eventType'];
foreach ($data['data'] as $key => $value) {
$wsDataPos = WsDataPos::TransferOkxPos($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
if ($wsDataPos) {
$pos = Pos::transferWsDataPos($wsDataPos);
$positions[$wsDataPos->symbol . "_" . $wsDataPos->posSide] = $pos;
$wsData = new WsData($this->plat, 'pos', $trade = null, $pos = $wsDataPos);
$onData($wsData);
if ($eventType == 'event_update') {
$this->positions[$wsDataPos->symbol . "_" . $wsDataPos->posSide] = $pos;
}
}
}
if ($eventType == 'snapshot') {
$this->positions = $positions;
}
return;
$wsDataOrd = WsDataOrder::TransferOkxOrder($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
if ($wsDataOrd != null) {
$wsData = new WsData($this->plat, 'order', $trade = null, $pos = null, $order = $wsDataOrd);
$onData($wsData);
}
if (isset($data['arg']) && $data['arg']['channel'] == 'account') {
$wsDataAccount = WsDataAccount::TransferOkxAccount($data['data']);
$wsData = new WsData($this->plat, 'account', $trade = null, $pos = null, $order = null, $account = $wsDataAccount);
}
return;
}
if (isset($data['arg']) && $data['arg']['channel'] == 'positions') {
$positions = [];
$eventType = $data['eventType'];
foreach ($data['data'] as $key => $value) {
$wsDataPos = WsDataPos::TransferOkxPos($value, $this->symbolInfos, function ($symbol) {
return $this->getSymbolSt($symbol);
});
if ($wsDataPos) {
$pos = Pos::transferWsDataPos($wsDataPos);
$positions[$wsDataPos->symbol . "_" . $wsDataPos->posSide] = $pos;
$wsData = new WsData($this->plat, 'pos', $trade = null, $pos = $wsDataPos);
$onData($wsData);
return;
if ($eventType == 'event_update') {
$this->positions[$wsDataPos->symbol . "_" . $wsDataPos->posSide] = $pos;
}
}
$this->msg("okx 无处理ws数据实现", $data);
}
});
if ($eventType == 'snapshot') {
$this->positions = $positions;
}
return;
}
if (isset($data['arg']) && $data['arg']['channel'] == 'account') {
$wsDataAccount = WsDataAccount::TransferOkxAccount($data['data']);
$wsData = new WsData($this->plat, 'account', $trade = null, $pos = null, $order = null, $account = $wsDataAccount);
$onData($wsData);
return;
}
$this->msg("okx 无处理ws数据实现", $data);
}
public function klineListen($symbol, $peroid, $onData)
{
... ...
... ... @@ -37,20 +37,23 @@ class ExBroker
$this->api->setHost($host);
}
public function accListen()
public function accListen(callable $onData)
{
$listeneKey = $this->getListenKey();
var_dump($this->host . $this->path);
$this->wsAcc = new Websocket($this->host . $this->path);
$this->wsAcc->connect(
$onOpen = function () use ($listeneKey) {
$this->wsAcc->push(json_encode(['method' => 'SUBSCRIBE', 'params' => [$listeneKey], 'id' => 1]));
$subData = json_encode(['method' => 'SUBSCRIBE', 'params' => [$listeneKey], 'id' => 1]);
$this->wsAcc->push($subData);
},
$onMessage = function ($msg) {
output($msg);
// $data = json_decode($msg, true);
$onMessage = function ($data) use ($onData) {
$data = json_decode($data, true);
if (!$data) {
return;
}
$onData($data);
},
$onClose = null
$onClose = null,
);
}
... ...