- Contract.php: 返回合约账户余额(balance_contract) - My.php: 地址管理增加BTC/ETH - AppContract.php: 一键平仓(closeall) - AppProxy.php: 代理专属注册链接 + 分级权限(L1/L2) - site.php: 手续费减半(0.018→0.009) - agent_permission_setup.sql: 代理权限SQL - crypto_news_crawler.py: 新闻自动采集脚本
844 lines
36 KiB
PHP
Executable File
844 lines
36 KiB
PHP
Executable File
<?php
|
|
|
|
namespace app\api\controller;
|
|
|
|
use app\common\controller\Api;
|
|
use fast\Random;
|
|
use think\Db;
|
|
use think\Config;
|
|
use function fast\e;
|
|
|
|
/**
|
|
* 币币交易
|
|
*/
|
|
class TaskTrade extends Api
|
|
{
|
|
protected $noNeedLogin = ['*'];
|
|
protected $noNeedRight = ['*'];
|
|
|
|
public function millisecondWay(){
|
|
list($s1, $s2) = explode(' ', microtime());
|
|
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
|
|
}
|
|
|
|
public function get_redis()
|
|
{
|
|
$redis = getRedis();
|
|
$time_str = strtotime(date("Y-m-d H:i"));
|
|
$key = 'aeusdt-'.$time_str;
|
|
$test1 = $redis->get($key);
|
|
$key2 = 'aeusdt-'.($time_str-60);
|
|
$test2 = $redis->get($key2);
|
|
$key3 = 'aeusdt-'.($time_str-120);
|
|
$test3 = $redis->get($key3);
|
|
$key4 = 'aeusdt-'.($time_str-240);
|
|
$test4 = $redis->get($key4);
|
|
var_dump($test1,$test2,$test3,$test4);
|
|
}
|
|
|
|
/**
|
|
* 获取最新K线
|
|
*/
|
|
public function get_kline($id)
|
|
{
|
|
$release = Db::name("app_curr_release")->where("id",$id)->find();
|
|
if($release['status'] == 1 || $release['status'] == 0){
|
|
echo "未上架";exit;
|
|
}
|
|
|
|
$rate = Db::name("app_rate")->where("symbol",$release['symbol'])->find();
|
|
$hour = date('H');
|
|
$minute = date('i');$buy_price=0;$sell_price=0;
|
|
$pricearr = [];
|
|
$tradejson = json_decode($release['tradectrl_json'],true);
|
|
$trademulte_json = json_decode($release['trademulte_json'],true);
|
|
if($tradejson) {
|
|
foreach ($tradejson as $kk => $vv) {
|
|
$time1 = explode('-', $kk);
|
|
$time2 = explode(':', $time1[0]);
|
|
$time3 = explode(':', $time1[1]);
|
|
$pricearrs = explode('-', $vv);
|
|
if ($hour >= $time2[0] && $hour <= $time3[0]) {
|
|
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
|
|
$pricearr = $pricearrs;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if($trademulte_json && empty($pricearr)){
|
|
foreach ($trademulte_json as $kk => $vv) {
|
|
$time1 = explode('-', $kk);
|
|
$time2 = explode(':', $time1[0]);
|
|
$time3 = explode(':', $time1[1]);
|
|
// $pricearrs = explode('-', $vv);
|
|
if ($hour >= $time2[0] && $hour <= $time3[0]) {
|
|
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
|
|
$datass = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1min&size=1&symbol='.$release['symbol'],'get'),true);
|
|
if(!$datass || !isset($datass['data']) || empty($datass['data']))
|
|
{
|
|
var_dump($datass);exit;
|
|
}
|
|
$rate['close'] = $datass['data'][0]['close'] * $vv;
|
|
$buy_price = $datass['data'][0]['low'] * $vv;
|
|
$sell_price = $datass['data'][0]['high'] * $vv;
|
|
$new_price = $rate['close'];
|
|
// var_dump($vv,'-----');
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
$new_price = $rate['close'];
|
|
if($pricearr){
|
|
$price = (float)$this->randomFloat($pricearr[0], $pricearr[1], 4);
|
|
if ($price > 0) {
|
|
$new_price = $price;
|
|
}
|
|
$buy_price = $pricearr[0];
|
|
$sell_price = $pricearr[1];
|
|
}
|
|
// var_dump($new_price,$sell_price,$buy_price);exit;
|
|
|
|
if($release['is_tk'] == 0 || $buy_price==0 || $sell_price==0){
|
|
//未调控价格
|
|
//1分钟
|
|
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1min&size=2&symbol='.$release['symbol'],'get'),true);
|
|
if(!$data || !isset($data['data']) || empty($data['data']))
|
|
{
|
|
var_dump($data);exit;
|
|
}else {
|
|
$data1 = $data['data'];
|
|
|
|
unset($data1[0]);//去掉最新一条
|
|
$datas = array_column($data1, 'id');
|
|
array_multisort($datas, SORT_ASC, $data1);
|
|
$last_kline = Db::name("bb_k_1min")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$insert = [];
|
|
foreach ($data1 as $key => $value) {
|
|
if(empty($last_kline) || $last_kline['ts'] < $value['id']){
|
|
$insert[] = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $value['id'],
|
|
'open' => $value['open'],
|
|
'close' => $value['close'],
|
|
'low' => $value['low'],
|
|
'high' => $value['high'],
|
|
'vol' => $value['vol'],
|
|
'count' => $value['count'],
|
|
];
|
|
}
|
|
}
|
|
if(!empty($insert))
|
|
{
|
|
Db::name('bb_k_1min')->insertAll($insert);
|
|
echo "1min";
|
|
}
|
|
|
|
}
|
|
//5分钟
|
|
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=5min&size=2&symbol='.$release['symbol'],'get'),true);
|
|
if(!$data || !isset($data['data']) || empty($data['data']))
|
|
{
|
|
var_dump($data);exit;
|
|
}else {
|
|
$data1 = $data['data'];
|
|
unset($data1[0]);//去掉最新一条
|
|
$datas = array_column($data1, 'id');
|
|
array_multisort($datas, SORT_ASC, $data1);
|
|
$last_kline = Db::name("bb_k_5min")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$insert = [];
|
|
foreach ($data1 as $key => $value) {
|
|
if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){
|
|
$insert[] = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $value['id'],
|
|
'open' => $value['open'],
|
|
'close' => $value['close'],
|
|
'low' => $value['low'],
|
|
'high' => $value['high'],
|
|
'vol' => $value['vol'],
|
|
'count' => $value['count'],
|
|
];
|
|
}
|
|
}
|
|
if(!empty($insert))
|
|
{
|
|
Db::name('bb_k_5min')->insertAll($insert);
|
|
echo "5min";
|
|
}
|
|
|
|
}
|
|
//15分钟
|
|
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=15min&size=2&symbol='.$release['symbol'],'get'),true);
|
|
if(!$data || !isset($data['data']) || empty($data['data']))
|
|
{
|
|
var_dump($data);exit;
|
|
}else {
|
|
$data1 = $data['data'];
|
|
unset($data1[0]);//去掉最新一条
|
|
$datas = array_column($data1, 'id');
|
|
array_multisort($datas, SORT_ASC, $data1);
|
|
$last_kline = Db::name("bb_k_15min")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$insert = [];
|
|
foreach ($data1 as $key => $value) {
|
|
if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){
|
|
$insert[] = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $value['id'],
|
|
'open' => $value['open'],
|
|
'close' => $value['close'],
|
|
'low' => $value['low'],
|
|
'high' => $value['high'],
|
|
'vol' => $value['vol'],
|
|
'count' => $value['count'],
|
|
];
|
|
}
|
|
}
|
|
if(!empty($insert))
|
|
{
|
|
Db::name('bb_k_15min')->insertAll($insert);
|
|
echo "15min";
|
|
}
|
|
|
|
}
|
|
//30分钟
|
|
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=30min&size=2&symbol='.$release['symbol'],'get'),true);
|
|
if(!$data || !isset($data['data']) || empty($data['data']))
|
|
{
|
|
var_dump($data);exit;
|
|
}else {
|
|
$data1 = $data['data'];
|
|
unset($data1[0]);//去掉最新一条
|
|
$datas = array_column($data1, 'id');
|
|
array_multisort($datas, SORT_ASC, $data1);
|
|
$last_kline = Db::name("bb_k_30min")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$insert = [];
|
|
foreach ($data1 as $key => $value) {
|
|
if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){
|
|
$insert[] = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $value['id'],
|
|
'open' => $value['open'],
|
|
'close' => $value['close'],
|
|
'low' => $value['low'],
|
|
'high' => $value['high'],
|
|
'vol' => $value['vol'],
|
|
'count' => $value['count'],
|
|
];
|
|
}
|
|
}
|
|
if(!empty($insert))
|
|
{
|
|
Db::name('bb_k_30min')->insertAll($insert);
|
|
echo "30min";
|
|
}
|
|
|
|
}
|
|
//60分钟
|
|
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=60min&size=2&symbol='.$release['symbol'],'get'),true);
|
|
if(!$data || !isset($data['data']) || empty($data['data']))
|
|
{
|
|
var_dump($data);exit;
|
|
}else {
|
|
$data1 = $data['data'];
|
|
unset($data1[0]);//去掉最新一条
|
|
$datas = array_column($data1, 'id');
|
|
array_multisort($datas, SORT_ASC, $data1);
|
|
$last_kline = Db::name("bb_k_1h")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$insert = [];
|
|
foreach ($data1 as $key => $value) {
|
|
if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){
|
|
$insert[] = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $value['id'],
|
|
'open' => $value['open'],
|
|
'close' => $value['close'],
|
|
'low' => $value['low'],
|
|
'high' => $value['high'],
|
|
'vol' => $value['vol'],
|
|
'count' => $value['count'],
|
|
];
|
|
}
|
|
}
|
|
if(!empty($insert))
|
|
{
|
|
Db::name('bb_k_1h')->insertAll($insert);
|
|
echo "1h";
|
|
}
|
|
|
|
}
|
|
//24小时
|
|
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1day&size=1&symbol='.$release['symbol'],'get'),true);
|
|
if(!$data || !isset($data['data']) || empty($data['data']))
|
|
{
|
|
var_dump($data);exit;
|
|
}else {
|
|
$data1 = $data['data'];
|
|
$first = $data1[0];
|
|
$rate_update = [
|
|
'open' => $first['open'],
|
|
'close' => $first['close'],
|
|
'low' => $first['low'],
|
|
'high' => $first['high'],
|
|
'usdt' => $first['close'],
|
|
'rmb' => $first['close']*6.4,
|
|
];
|
|
$rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate_update['open'])/$rate_update['open']);
|
|
Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update);
|
|
Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]);
|
|
// unset($data1[0]);//去掉最新一条
|
|
$datas = array_column($data1, 'id');
|
|
array_multisort($datas, SORT_ASC, $data1);
|
|
$last_kline = Db::name("bb_k_24h")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$insert = [];
|
|
foreach ($data1 as $key => $value) {
|
|
if(empty($last_kline)){
|
|
$insert[] = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $value['id'],
|
|
'open' => $rate['close'],
|
|
'close' => $rate['close'],
|
|
'low' => $rate['close'],
|
|
'high' => $rate['close'],
|
|
'vol' => 0,
|
|
'count' => 0,
|
|
];
|
|
}elseif($last_kline['ts'] < $value['id']){
|
|
$insert[] = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $value['id'],
|
|
'open' => $value['open'],
|
|
'close' => $value['close'],
|
|
'low' => $value['low'],
|
|
'high' => $value['high'],
|
|
'vol' => $value['vol'],
|
|
'count' => $value['count'],
|
|
];
|
|
}
|
|
}
|
|
if(!empty($insert))
|
|
{
|
|
Db::name('bb_k_24h')->insertAll($insert);
|
|
echo "24h";
|
|
}
|
|
}
|
|
}else{
|
|
|
|
$redis = getRedis();
|
|
$time_str = strtotime(date("Y-m-d H:i"));
|
|
$key = $rate['symbol'].'-'.$time_str;
|
|
$now_price = $redis->get($key);
|
|
$key2 = $rate['symbol'].'-'.($time_str-60);
|
|
$befor_price = $redis->get($key2);
|
|
// var_dump($redis->get("nearusdt"));exit;
|
|
//1分钟
|
|
$last_kline = Db::name("bb_k_1min")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$last_time = $time_str-0;
|
|
if(empty($last_kline)){
|
|
if($rate['open']>$rate['close']){
|
|
$low = $rate['close'];
|
|
$high = $rate['open'];
|
|
}else{
|
|
$low = $rate['open'];
|
|
$high = $rate['close'];
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $last_time,
|
|
'open' => $rate['open'],
|
|
'close' => $rate['close'],
|
|
'low' => $low,
|
|
'high' => $high,
|
|
'vol' => 0,
|
|
'count' => 0,
|
|
];
|
|
Db::name("bb_k_1min")->insert($insert);
|
|
}else{
|
|
if($last_time>$last_kline['ts']){
|
|
if($befor_price){
|
|
if($last_kline['vol']){
|
|
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
|
|
}else{
|
|
$vol = rand(100, 999);
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $last_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $befor_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => $vol,
|
|
'count' => rand(1, 10),
|
|
];
|
|
}else{
|
|
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $last_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $new_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => rand(100, 999),
|
|
'count' => rand(1, 10),
|
|
];
|
|
}
|
|
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
|
|
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
|
|
Db::name("bb_k_1min")->insert($insert);
|
|
echo "1min";
|
|
}
|
|
}
|
|
|
|
//5fen
|
|
$last_kline = Db::name("bb_k_5min")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$k5 = $last_kline;
|
|
$kline_time = $last_kline['ts']+300;
|
|
$last_time = $time_str-0;
|
|
if(empty($last_kline)){
|
|
$ts = $last_time-($last_time%300);
|
|
if($rate['open']>$rate['close']){
|
|
$low = $rate['close'];
|
|
$high = $rate['open'];
|
|
}else{
|
|
$low = $rate['open'];
|
|
$high = $rate['close'];
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $ts,
|
|
'open' => $rate['open'],
|
|
'close' => $rate['close'],
|
|
'low' => $low,
|
|
'high' => $high,
|
|
'vol' => 0,
|
|
'count' => 0,
|
|
];
|
|
Db::name("bb_k_5min")->insert($insert);
|
|
}elseif($last_time>=$kline_time){
|
|
if($befor_price){
|
|
if($last_kline['vol']){
|
|
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
|
|
}else{
|
|
$vol = rand(100, 999);
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $befor_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => $vol,
|
|
'count' => rand(10, 20),
|
|
];
|
|
}else{
|
|
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $new_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => rand(500, 3000),
|
|
'count' => rand(10, 20),
|
|
];
|
|
}
|
|
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
|
|
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
|
|
Db::name("bb_k_5min")->insert($insert);
|
|
echo "5min";
|
|
}
|
|
//15
|
|
$last_kline = Db::name("bb_k_15min")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$k15 = $last_kline;
|
|
$kline_time = $last_kline['ts']+900;
|
|
$last_time = $time_str-0;
|
|
if(empty($last_kline)){
|
|
$ts = $last_time-($last_time%900);
|
|
if($rate['open']>$rate['close']){
|
|
$low = $rate['close'];
|
|
$high = $rate['open'];
|
|
}else{
|
|
$low = $rate['open'];
|
|
$high = $rate['close'];
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $ts,
|
|
'open' => $rate['open'],
|
|
'close' => $rate['close'],
|
|
'low' => $low,
|
|
'high' => $high,
|
|
'vol' => 0,
|
|
'count' => 0,
|
|
];
|
|
Db::name("bb_k_15min")->insert($insert);
|
|
}elseif($last_time>=$kline_time){
|
|
if($befor_price){
|
|
if($last_kline['vol']){
|
|
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
|
|
}else{
|
|
$vol = rand(100, 999);
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $befor_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => $vol,
|
|
'count' => rand(20, 50),
|
|
];
|
|
}else{
|
|
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $new_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => rand(3000, 8000),
|
|
'count' => rand(20, 50),
|
|
];
|
|
}
|
|
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
|
|
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
|
|
Db::name("bb_k_15min")->insert($insert);
|
|
echo "15min";
|
|
}
|
|
//30
|
|
$last_kline = Db::name("bb_k_30min")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$k30 = $last_kline;
|
|
$kline_time = $last_kline['ts']+1800;
|
|
$last_time = $time_str-0;
|
|
if(empty($last_kline)){
|
|
$ts = $last_time-($last_time%1800);
|
|
if($rate['open']>$rate['close']){
|
|
$low = $rate['close'];
|
|
$high = $rate['open'];
|
|
}else{
|
|
$low = $rate['open'];
|
|
$high = $rate['close'];
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $ts,
|
|
'open' => $rate['open'],
|
|
'close' => $rate['close'],
|
|
'low' => $low,
|
|
'high' => $high,
|
|
'vol' => 0,
|
|
'count' => 0,
|
|
];
|
|
Db::name("bb_k_30min")->insert($insert);
|
|
}elseif($last_time>=$kline_time){
|
|
if($befor_price){
|
|
if($last_kline['vol']){
|
|
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
|
|
}else{
|
|
$vol = rand(100, 999);
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $befor_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => $vol,
|
|
'count' => rand(50, 100),
|
|
];
|
|
}else{
|
|
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $new_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => rand(8000, 20000),
|
|
'count' => rand(50, 100),
|
|
];
|
|
}
|
|
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
|
|
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
|
|
Db::name("bb_k_30min")->insert($insert);
|
|
echo "30min";
|
|
}
|
|
//60
|
|
$last_kline = Db::name("bb_k_1h")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$k60 = $last_kline;
|
|
$kline_time = $last_kline['ts']+3600;
|
|
$last_time = $time_str-0;
|
|
if(empty($last_kline)){
|
|
$ts = $last_time-($last_time%3600);
|
|
if($rate['open']>$rate['close']){
|
|
$low = $rate['close'];
|
|
$high = $rate['open'];
|
|
}else{
|
|
$low = $rate['open'];
|
|
$high = $rate['close'];
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $ts,
|
|
'open' => $rate['open'],
|
|
'close' => $rate['close'],
|
|
'low' => $low,
|
|
'high' => $high,
|
|
'vol' => 0,
|
|
'count' => 0,
|
|
];
|
|
Db::name("bb_k_1h")->insert($insert);
|
|
}elseif($last_time>=$kline_time){
|
|
if($befor_price){
|
|
if($last_kline['vol']){
|
|
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
|
|
}else{
|
|
$vol = rand(100, 999);
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $befor_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => $vol,
|
|
'count' => rand(50, 100),
|
|
];
|
|
}else{
|
|
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $new_price,
|
|
'low' => $buy_price,
|
|
'high' => $sell_price,
|
|
'vol' => rand(8000, 20000),
|
|
'count' => rand(50, 100),
|
|
];
|
|
}
|
|
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
|
|
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
|
|
Db::name("bb_k_1h")->insert($insert);
|
|
echo "60min";
|
|
}
|
|
//1day
|
|
$last_kline = Db::name("bb_k_24h")->where("symbol",$release['symbol'])->order("ts desc")->find();
|
|
$kline_time = $last_kline['ts']+86400;
|
|
$last_time = $time_str-0;
|
|
if(empty($last_kline)){
|
|
$ts = $last_time-($last_time%86400);
|
|
if($rate['open']>$rate['close']){
|
|
$low = $rate['close'];
|
|
$high = $rate['open'];
|
|
}else{
|
|
$low = $rate['open'];
|
|
$high = $rate['close'];
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $ts,
|
|
'open' => $rate['open'],
|
|
'close' => $rate['close'],
|
|
'low' => $low,
|
|
'high' => $high,
|
|
'vol' => 0,
|
|
'count' => 0,
|
|
];
|
|
Db::name("bb_k_24h")->insert($insert);
|
|
}elseif($last_time>=$kline_time){
|
|
if($befor_price){
|
|
if($last_kline['vol']){
|
|
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
|
|
}else{
|
|
$vol = rand(100, 999);
|
|
}
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $last_kline['close'],
|
|
'low' => $last_kline['close'],
|
|
'high' => $last_kline['close'],
|
|
'vol' => $vol,
|
|
'count' => rand(1000, 2000),
|
|
];
|
|
}else{
|
|
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
|
|
$insert = [
|
|
'symbol' => $release['symbol'],
|
|
'ts' => $kline_time,
|
|
'open' => $last_kline['close'],
|
|
'close' => $last_kline['close'],
|
|
'low' => $last_kline['close'],
|
|
'high' => $last_kline['close'],
|
|
'vol' => rand(20000, 100000),
|
|
'count' => rand(1000, 2000),
|
|
];
|
|
}
|
|
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
|
|
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
|
|
Db::name("bb_k_24h")->insert($insert);
|
|
Db::name("app_rate")->where("symbol",$release['symbol'])->update(['open'=>$insert['close'],'close'=>$insert['close'],'low'=>$insert['close'],'high'=>$insert['close'],'increase'=>0,'amount'=>0]);
|
|
echo "24h";
|
|
}else{
|
|
//跟新今日K线
|
|
if($befor_price){
|
|
$close = $befor_price;
|
|
}else{
|
|
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
|
|
}
|
|
$update = array(
|
|
"close" => $close,
|
|
);
|
|
if($last_kline['low'] > $close){
|
|
$update['low'] = $close;
|
|
}
|
|
if($last_kline['high'] < $close){
|
|
$update['high'] = $close;
|
|
}
|
|
Db::name("bb_k_24h")->where("id",$last_kline['id'])->update($update);
|
|
}
|
|
|
|
if($now_price){
|
|
$rate_update = [
|
|
"close" => $now_price,
|
|
];
|
|
if($now_price > $rate['high']){
|
|
$rate_update['high'] = $now_price;
|
|
if($k5){
|
|
Db::name("bb_k_5min")->where("id",$k5['id'])->update(['high'=>$now_price]);
|
|
}
|
|
if($k15){
|
|
Db::name("bb_k_15min")->where("id",$k15['id'])->update(['high'=>$now_price]);
|
|
}
|
|
if($k30){
|
|
Db::name("bb_k_30min")->where("id",$k30['id'])->update(['high'=>$now_price]);
|
|
}
|
|
if($k60){
|
|
Db::name("bb_k_1h")->where("id",$k60['id'])->update(['high'=>$now_price]);
|
|
}
|
|
}
|
|
if($now_price < $rate['low']){
|
|
$rate_update['low'] = $now_price;
|
|
if($k5){
|
|
Db::name("bb_k_5min")->where("id",$k5['id'])->update(['low'=>$now_price]);
|
|
}
|
|
if($k15){
|
|
Db::name("bb_k_15min")->where("id",$k15['id'])->update(['low'=>$now_price]);
|
|
}
|
|
if($k30){
|
|
Db::name("bb_k_30min")->where("id",$k30['id'])->update(['low'=>$now_price]);
|
|
}
|
|
if($k60){
|
|
Db::name("bb_k_1h")->where("id",$k60['id'])->update(['low'=>$now_price]);
|
|
}
|
|
}
|
|
$rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate['open'])/$rate['open']);
|
|
$rate_update['amount'] = $rate['amount']+rand(10,100);
|
|
Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update);
|
|
Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]);
|
|
echo "更新最新价:".$rate_update['close'];
|
|
}else{
|
|
$now_price = $new_price;
|
|
$rate_update = [
|
|
"close" => $now_price,
|
|
];
|
|
if($now_price > $rate['high']){
|
|
$rate_update['high'] = $now_price;
|
|
if($k30){
|
|
Db::name("bb_k_30min")->where("id",$k30['id'])->update(['high'=>$now_price]);
|
|
}
|
|
if($k60){
|
|
Db::name("bb_k_1h")->where("id",$k60['id'])->update(['high'=>$now_price]);
|
|
}
|
|
}
|
|
if($now_price < $rate['low']){
|
|
$rate_update['low'] = $now_price;
|
|
if($k30){
|
|
Db::name("bb_k_30min")->where("id",$k30['id'])->update(['low'=>$now_price]);
|
|
}
|
|
if($k60){
|
|
Db::name("bb_k_1h")->where("id",$k60['id'])->update(['low'=>$now_price]);
|
|
}
|
|
}
|
|
$rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate['open'])/$rate['open']);
|
|
$rate_update['amount'] = $rate['amount']+rand(10,100);
|
|
Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update);
|
|
Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]);
|
|
echo "更新定义价:".$rate_update['close'];
|
|
}
|
|
}
|
|
echo "success";
|
|
}
|
|
|
|
|
|
//4位小数的随机数
|
|
public function randomFloat($min = 0, $max = 10 , $localnum = 4)
|
|
{
|
|
if($localnum == 4) {
|
|
if ($max - $min <= 0.0002) {
|
|
return 0;
|
|
}
|
|
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.0001);
|
|
$num = $min + $rand;
|
|
$number = sprintf("%.4f", $num);
|
|
if($number == $min){
|
|
$number += 0.0001;
|
|
}
|
|
}else if($localnum == 5){
|
|
if ($max - $min <= 0.00002) {
|
|
return 0;
|
|
}
|
|
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.00001);
|
|
$num = $min + $rand;
|
|
$number = sprintf("%.5f", $num);
|
|
if($number == $min){
|
|
$number += 0.00001;
|
|
}
|
|
}else if($localnum == 6){
|
|
if ($max - $min <= 0.000002) {
|
|
return 0;
|
|
}
|
|
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.000001);
|
|
$num = $min + $rand;
|
|
$number = sprintf("%.6f", $num);
|
|
if($number == $min){
|
|
$number += 0.000001;
|
|
}
|
|
}else if($localnum == 2){
|
|
if ($max - $min <= 0.02) {
|
|
return 0;
|
|
}
|
|
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.01);
|
|
$num = $min + $rand;
|
|
$number = sprintf("%.2f", $num);
|
|
if($number == $min){
|
|
$number += 0.01;
|
|
}
|
|
}else if($localnum == 3){
|
|
if ($max - $min <= 0.001) {
|
|
return 0;
|
|
}
|
|
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.001);
|
|
$num = $min + $rand;
|
|
$number = sprintf("%.3f", $num);
|
|
if($number == $min){
|
|
$number += 0.001;
|
|
}
|
|
}
|
|
|
|
return $number;
|
|
|
|
}
|
|
|
|
|
|
} |