业务需求 nuls_bx 交易对牟定盘口做市

但是要求牟定 bx_usdt 主流交易对, 真实晕 写了个递归 经过测试可用 转换路径如下

nuls_btc btc_usdt bx_eth eth_usdt 经过 四个交易对 转换成目标交易对 汇率<?php

// 都需要对标 bx_usdt

$symbol = 'nuls_coin';

$benchmarkSymbolList = ['nuls_btc' , 'btc_usdt', 'coin_usdt'];

$benchmarkData = [

'nuls_btc' => [

'0.00015635',

'0.00015832',

],

// 'coin_btc' => [

// '0.00000278', // 买

// '0.00002329', // 卖

// ],

'btc_usdt' => [

'3995.00',

'3998.01',

],

'coin_usdt' => [

'0.0924',

'0.1926',

]

];

// $symbol = 'eos_bx';

// $benchmarkSymbolList = ['eos_usdt', 'bx_usdt'];

// $benchmarkData = [

// 'eos_usdt' => [

// 3.6627,

// 3.6549

// ],

// 'bx_usdt' =>[

// 0.1022,

// 0.1011

// ]

// ];

/**

* @des 交易对检测函数

* @param $symbol

* @param $checkSymbolList

* @return bool

* ------------------------------------------------------------

*/

function checkSymbolList($symbol, $checkSymbolList)

{

list($coinFrom, $coinTo) = explode('_', $symbol);

$coinList = [];

foreach ($checkSymbolList as $checkSymbol) {

list($cFrom, $cTo) = explode('_', $checkSymbol);

$coinList[$cFrom] = isset($coinList[$cFrom]) ? $coinList[$cFrom] + 1 : 1;

$coinList[$cTo] = isset($coinList[$cTo]) ? $coinList[$cTo] + 1 : 1;

}

// 目标币对 仅可以出现一个

if (empty($coinList[$coinFrom]) || $coinList[$coinFrom] != 1 || empty($coinList[$coinTo]) || $coinList[$coinTo] != 1) {

return false;

}

unset($coinList[$coinFrom], $coinList[$coinTo]);

// 除目标币种 外 其他币种最少出现两次

if (max($coinList) != 2 || min($coinList) != 2) {

return false;

}

return true;

}

/**

* @des 调用递归

* @param $symbol

* @param $benchmarkSymbolList

* @param $benchmarkData

* @return array

* ------------------------------------------------------------

*/

function integrateRateToBenchMarkPrice($symbol, $benchmarkSymbolList, $benchmarkData)

{

// 选择对标方向

list($coinFrom, $coinTo) = explode('_', $symbol);

// 效验交易对是否正确

if (!checkSymbolList($symbol, $benchmarkSymbolList)) return [];

return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData);

}

/**

* @des 多交易对汇率转换 递归

* @param $coinFrom

* @param $coinTo

* @param $benchmarkSymbolList

* @param $benchmarkData

* @param array $params

* @return array

* ------------------------------------------------------------

*/

function rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, $params = [])

{

// 容错 异常跳出递归

if (!$benchmarkSymbolList) return $params;

// 转换后数据 nuls_usdt

$askConversion = $params[0] ?? 0;

$bidConversion = $params[1] ?? 0;

$conversionCoin = $params[2] ?? '';

// 交易对排序

foreach ($benchmarkSymbolList as $k => $benchmarkSymbol) {

list($from, $to) = explode('_', $benchmarkSymbol);

// 提取交易对

list($bidBenchmark, $askBenchmark) = $benchmarkData[$benchmarkSymbol];

if ($conversionCoin == $from) {

unset($benchmarkSymbolList[$k]);

$askNewBenchmark = bcmul($askConversion, $askBenchmark, 10);

$bidNewBenchmark = bcmul($bidConversion, $bidBenchmark, 10);

echo $benchmarkSymbol ,' => from ', $conversionCoin,PHP_EOL;

return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, [$bidNewBenchmark, $askNewBenchmark, $to]);

} else if ($conversionCoin == $to) {

unset($benchmarkSymbolList[$k]);

echo $benchmarkSymbol ,' => to ', $conversionCoin, PHP_EOL;

echo 'askBenchmark =>',$askConversion,' ', $askBenchmark, ' bidBenchmark => ', $bidConversion,' ', $bidBenchmark, PHP_EOL;

$askNewBenchmark = bcdiv($askConversion, $bidBenchmark, 10);

$bidNewBenchmark = bcdiv($bidConversion, $askBenchmark, 10);

return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, [$bidNewBenchmark, $askNewBenchmark, $from]);

}

// 判断当前交易对 为代币 所在代币交易对

if ($coinFrom == $from) {

// 第一次 参数为空 直接复制 调用递归

if (!$params) {

// 注销使用过的数组元素

unset($benchmarkSymbolList[$k]);

echo $benchmarkSymbol ,' => null ', $coinFrom, PHP_EOL;

return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, [$bidBenchmark, $askBenchmark, $to]);

}

}

}

return $params;

}

$data = integrateRateToBenchMarkPrice($symbol, $benchmarkSymbolList, $benchmarkData);

var_export($data);localhost:Desktop admin$ php test.php

# 执行顺序

nuls_btc => null nuls

btc_usdt => from btc

bz_usdt => to usdt

askBenchmark =>0.6324884000 0.1926 bidBenchmark => 0.6250888635 0.0924

array (

0 => '3.2455288862',

1 => '6.8451125541',

2 => 'coin',

)

php 汇率接口,PHP 对交易对汇率 转换相关推荐

  1. php环境下,两种汇率接口,已经测试通过

    方法一:中国银行版本,简单粗暴 //中国银行汇率接口,简单粗暴 //参数pjname:1316美元1326欧元1314英镑 public function getExchangeRate() {$da ...

  2. 外汇汇率接口 java_基于java的货币汇率接口调用代码实例

    基于java的货币汇率接口调用代码实例 基于JAVA 的货币汇率接口调用代码实例 代码描述:基于JAVA 的货币汇率接口调用代码实例 代码平台:聚合数据 import java.io.Buffered ...

  3. 基于php汇率接口调用实例,基于C#的汇率接口调用代码实例

    基于C#的汇率接口调用代码实例 代码描述:基于C#的汇率接口调用代码实例 代码平台:聚合数据 using System; using System.Collections.Generic; using ...

  4. html汇率转换器,PHP_利用yahoo汇率接口实现实时汇率转换示例 汇率转换器,代码如下: 复制代码 代码如 - phpStudy...

    利用yahoo汇率接口实现实时汇率转换示例 汇率转换器 代码如下: function getExchangeRate($from_Currency,$to_Currency) { $amount = ...

  5. php 外汇实时更新接口,利用yahoo汇率接口实现实时汇率转换示例

    代码如下:function getExchangeRate($from_Currency,$to_Currency) { $amount = urlencode($amount); $from_Cur ...

  6. 通达信交易系统接口实现自动交易策略的方法分享

    在通达信交易系统接口中,有着比较独特的交易系统,在这个交易系统中,也有各种各样的自动交易策略,可以通过交易接口来实现预先设定好的策略来进行自动交易,从而提高交易者的投资效率. 下面向大家介绍其中几种自 ...

  7. 分享量化交易接口之网格交易的选股策略

    分享量化交易接口之网格交易的选股策略: 1.低估值:PE<50 2.小市值:分行业按市值排列选市值小的30只 3.高波动:分行业在市值最小的30只中选出过去一年波动率最大的5只股票 4.更新持仓 ...

  8. 股票交易接口api自动交易-Java继承

    股票交易接口api自动交易-Java继承 : 如果父类中的方法不确定如何进行{方法体}的实现,那么这就是一个抽象方法,abstract关键字修饰,不能直接new抽象类对象,必须子类继承我们的抽象对象, ...

  9. 通达信交易接口:让交易更高效

    通达信是国内著名的股票交易软件,其交易接口可以让开发者通过编程的方式进行自动化交易.本文将介绍通达信交易接口的部分API参数和代码示例,并分享一个基于通达信交易接口实现的量化策略代码. 登录参数 登录 ...

  10. 支付宝接口 - 即时到账交易接口 对接 整理 1

    支付宝官方开放平台接口说明: https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Gp6DiG&treeId=62&a ...

最新文章

  1. 将一张100元的钞票换成1元、5元和10元的钞票,每种钞票至少一张,编写程序输出所有的换法,循环次数需要尽可能地少。
  2. 最好的浏览器排行榜_PG是最好的数据库;TiDB 4.0前瞻;SequoiaDB高可用原理;20c DG新特性... 数据库周刊第18期...
  3. 2015-12-18 学习心得
  4. oracle撤销管理的方法,Oracle9i中利用自动撤销管理的优点
  5. win10 安装selenium和使用
  6. Unity中的值传递与引用传递
  7. Java Object类的各个方法
  8. jqgrid本地数据例子_办公系统私有云公有云和本地化部署,你选哪个?
  9. 眼液蛋白水平或许可预测阿尔茨海默症
  10. C++仿Java反射机中字符串创建类的思想,初步实现
  11. C#LeetCode刷题之#766-托普利茨矩阵(Toeplitz Matrix)
  12. Python线程同步机制
  13. OpenCV:概述、结构和内容
  14. eclipse如何开发python
  15. ELK详解(十五)——ELK+Redis配置实战
  16. HiJson,一个json格式化查看工具
  17. Go | 限流器实现
  18. 数字图像信号-灰度内插
  19. 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
  20. Java 最全的英文单词单数复数形式转换

热门文章

  1. 时间序列学习(5):ARMA模型定阶(AIC、BIC准则、Ljung-Box检验)
  2. 微信云控的大触来一下
  3. TVS管选型详细流程
  4. 小狼毫 Rime 输入法任务导向式常用参数修改指南
  5. 2019年华为JAVA面试题系列
  6. python 无法定位程序输入点_系统提示无法定位程序输入点于动态链接库的解决方案【图文】-太平洋电脑网PConline-太平洋电脑网...
  7. 浏览器获取京东cookie教程
  8. mysql 备份数据库
  9. 【历史上的今天】1 月 5 日:正则表达式的发明人出生;英特尔发布酷睿系列;Microsoft Bob 诞生
  10. PPL文档——Excel制作的甘特图加上动态今日线