8 changed files with 148 additions and 148 deletions
@ -1,124 +0,0 @@ |
|||||
<?php |
|
||||
/* |
|
||||
* @Descripttion: |
|
||||
* @version: |
|
||||
* @Author: GuaPi |
|
||||
* @Date: 2021-07-29 10:40:49 |
|
||||
* @LastEditors: GuaPi |
|
||||
* @LastEditTime: 2021-08-09 17:41:16 |
|
||||
*/ |
|
||||
|
|
||||
namespace App\Models; |
|
||||
|
|
||||
use Illuminate\Database\Eloquent\Model; |
|
||||
|
|
||||
class DataRute extends Model |
|
||||
{ |
|
||||
protected $primaryKey = 'id'; |
|
||||
protected $table = 'data_rute'; |
|
||||
protected $guarded = []; |
|
||||
public $timestamps = false; |
|
||||
|
|
||||
public $attributes = [ |
|
||||
'pid' => 0, |
|
||||
'Symbol' => 'RUTE', |
|
||||
'Name' => 'RUTE', |
|
||||
'Price2' => 0, |
|
||||
'Price3' => 0, |
|
||||
'Open_Int' => 0, |
|
||||
'is_1min' => 0, |
|
||||
'is_5min' => 0, |
|
||||
'is_15min' => 0, |
|
||||
'is_30min' => 0, |
|
||||
'is_1h' => 0, |
|
||||
'is_2h' => 0, |
|
||||
'is_4h' => 0, |
|
||||
'is_6h' => 0, |
|
||||
'is_12h' => 0, |
|
||||
'is_day' => 0, |
|
||||
'is_week' => 0, |
|
||||
'is_month' => 0, |
|
||||
]; |
|
||||
|
|
||||
public static function getKlineData($symbol, $period, $size) |
|
||||
{ |
|
||||
$builder = self::query(); |
|
||||
$wheres = [ |
|
||||
'1min' => 'is_1min', |
|
||||
'5min' => 'is_5min', |
|
||||
'15min' => 'is_15min', |
|
||||
'30min' => 'is_30min', |
|
||||
'60min' => 'is_1h', |
|
||||
'4hour' => 'is_4hour', |
|
||||
'1day' => 'is_day', |
|
||||
'1week' => 'is_week', |
|
||||
'1mon' => 'is_month', |
|
||||
]; |
|
||||
$where = $wheres[$period] ?? 'is_1min'; |
|
||||
$builder->where($where, 1); |
|
||||
|
|
||||
$data = $builder->where('Date', '<', time())->limit($size)->orderByDesc('Date')->get(); |
|
||||
if (blank($data)) return []; |
|
||||
$data = $data->sortBy('Date')->values()->map(function ($kline) { |
|
||||
$item = [ |
|
||||
"id" => $kline['Date'], |
|
||||
"amount" => $kline['Amount'], |
|
||||
"count" => $kline['Amount'], |
|
||||
"open" => $kline['Open'], |
|
||||
"close" => $kline['Close'], |
|
||||
"low" => $kline['Low'], |
|
||||
"high" => $kline['High'], |
|
||||
"vol" => $kline['Volume'] |
|
||||
]; |
|
||||
$item['price'] = $item['close']; |
|
||||
return $item; |
|
||||
})->toArray(); |
|
||||
// 重设数组最后一组数据的值 |
|
||||
$time = time(); |
|
||||
$data = self::getlastData($data, $period, $time); |
|
||||
return $data; |
|
||||
} |
|
||||
/** |
|
||||
* @description: 获取最新5分钟线 十五分钟线 30分钟线 1小时线 4小时线 1天线 1周线 一月线 |
|
||||
* @param {*} |
|
||||
* @return {*} |
|
||||
*/ |
|
||||
public static function getlastData($data, $period, $time) |
|
||||
{ |
|
||||
$periodMap = [ |
|
||||
'1min' => ['column' => 'is_1min', 'seconds' => 60], |
|
||||
'5min' => ['column' => 'is_5min', 'seconds' => 300], |
|
||||
'15min' => ['column' => 'is_15min', 'seconds' => 900], |
|
||||
'30min' => ['column' => 'is_30min', 'seconds' => 1800], |
|
||||
'60min' => ['column' => 'is_1h', 'seconds' => 3600], |
|
||||
'4hour' => ['column' => 'is_4hour', 'seconds' => 14400], |
|
||||
'1day' => ['column' => 'is_day', 'seconds' => 86400], |
|
||||
'1week' => ['column' => 'is_week', 'seconds' => 604800], |
|
||||
'1mon' => ['column' => 'is_month', 'seconds' => 2592000], |
|
||||
]; |
|
||||
$tmp = $data[array_key_last($data)]; |
|
||||
if ($period == '1mon') { |
|
||||
$res = self::query() |
|
||||
->whereBetween('Date', [\Carbon\Carbon::now()->firstOfMonth()->timestamp, $time]) |
|
||||
->where('is_1min', 1) |
|
||||
->get(); |
|
||||
} else { |
|
||||
$res = self::query() |
|
||||
->whereBetween('Date', [$time - $time % $periodMap[$period]['seconds'], $time]) |
|
||||
->where('is_1min', 1) |
|
||||
->get(); |
|
||||
} |
|
||||
$data[array_key_last($data)] = [ |
|
||||
"id" => $tmp['id'], |
|
||||
"amount" => $res->sum('Amount'), |
|
||||
"count" => $res->sum('Amount'), |
|
||||
"open" => $res->first()->Open, |
|
||||
"close" => $res->last()->Close, //最新价 |
|
||||
"low" => $res->min('Low'), |
|
||||
"high" => $res->max('High'), |
|
||||
"vol" => $res->sum('Volume'), |
|
||||
"price" => $res->last()->Close |
|
||||
]; |
|
||||
return $data; |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,124 @@ |
|||||
|
<?php |
||||
|
/* |
||||
|
* @Descripttion: |
||||
|
* @version: |
||||
|
* @Author: GuaPi |
||||
|
* @Date: 2021-07-29 10:40:49 |
||||
|
* @LastEditors: GuaPi |
||||
|
* @LastEditTime: 2021-08-09 17:41:16 |
||||
|
*/ |
||||
|
|
||||
|
namespace App\Models; |
||||
|
|
||||
|
use Illuminate\Database\Eloquent\Model; |
||||
|
|
||||
|
class DataSwts extends Model |
||||
|
{ |
||||
|
protected $primaryKey = 'id'; |
||||
|
protected $table = 'data_swts'; |
||||
|
protected $guarded = []; |
||||
|
public $timestamps = false; |
||||
|
|
||||
|
public $attributes = [ |
||||
|
'pid' => 0, |
||||
|
'Symbol' => 'SWTS', |
||||
|
'Name' => 'SWTS', |
||||
|
'Price2' => 0, |
||||
|
'Price3' => 0, |
||||
|
'Open_Int' => 0, |
||||
|
'is_1min' => 0, |
||||
|
'is_5min' => 0, |
||||
|
'is_15min' => 0, |
||||
|
'is_30min' => 0, |
||||
|
'is_1h' => 0, |
||||
|
'is_2h' => 0, |
||||
|
'is_4h' => 0, |
||||
|
'is_6h' => 0, |
||||
|
'is_12h' => 0, |
||||
|
'is_day' => 0, |
||||
|
'is_week' => 0, |
||||
|
'is_month' => 0, |
||||
|
]; |
||||
|
|
||||
|
public static function getKlineData($symbol, $period, $size) |
||||
|
{ |
||||
|
$builder = self::query(); |
||||
|
$wheres = [ |
||||
|
'1min' => 'is_1min', |
||||
|
'5min' => 'is_5min', |
||||
|
'15min' => 'is_15min', |
||||
|
'30min' => 'is_30min', |
||||
|
'60min' => 'is_1h', |
||||
|
'4hour' => 'is_4hour', |
||||
|
'1day' => 'is_day', |
||||
|
'1week' => 'is_week', |
||||
|
'1mon' => 'is_month', |
||||
|
]; |
||||
|
$where = $wheres[$period] ?? 'is_1min'; |
||||
|
$builder->where($where, 1); |
||||
|
|
||||
|
$data = $builder->where('Date', '<', time())->limit($size)->orderByDesc('Date')->get(); |
||||
|
if (blank($data)) return []; |
||||
|
$data = $data->sortBy('Date')->values()->map(function ($kline) { |
||||
|
$item = [ |
||||
|
"id" => $kline['Date'], |
||||
|
"amount" => $kline['Amount'], |
||||
|
"count" => $kline['Amount'], |
||||
|
"open" => $kline['Open'], |
||||
|
"close" => $kline['Close'], |
||||
|
"low" => $kline['Low'], |
||||
|
"high" => $kline['High'], |
||||
|
"vol" => $kline['Volume'] |
||||
|
]; |
||||
|
$item['price'] = $item['close']; |
||||
|
return $item; |
||||
|
})->toArray(); |
||||
|
// 重设数组最后一组数据的值 |
||||
|
$time = time(); |
||||
|
$data = self::getlastData($data, $period, $time); |
||||
|
return $data; |
||||
|
} |
||||
|
/** |
||||
|
* @description: 获取最新5分钟线 十五分钟线 30分钟线 1小时线 4小时线 1天线 1周线 一月线 |
||||
|
* @param {*} |
||||
|
* @return {*} |
||||
|
*/ |
||||
|
public static function getlastData($data, $period, $time) |
||||
|
{ |
||||
|
$periodMap = [ |
||||
|
'1min' => ['column' => 'is_1min', 'seconds' => 60], |
||||
|
'5min' => ['column' => 'is_5min', 'seconds' => 300], |
||||
|
'15min' => ['column' => 'is_15min', 'seconds' => 900], |
||||
|
'30min' => ['column' => 'is_30min', 'seconds' => 1800], |
||||
|
'60min' => ['column' => 'is_1h', 'seconds' => 3600], |
||||
|
'4hour' => ['column' => 'is_4hour', 'seconds' => 14400], |
||||
|
'1day' => ['column' => 'is_day', 'seconds' => 86400], |
||||
|
'1week' => ['column' => 'is_week', 'seconds' => 604800], |
||||
|
'1mon' => ['column' => 'is_month', 'seconds' => 2592000], |
||||
|
]; |
||||
|
$tmp = $data[array_key_last($data)]; |
||||
|
if ($period == '1mon') { |
||||
|
$res = self::query() |
||||
|
->whereBetween('Date', [\Carbon\Carbon::now()->firstOfMonth()->timestamp, $time]) |
||||
|
->where('is_1min', 1) |
||||
|
->get(); |
||||
|
} else { |
||||
|
$res = self::query() |
||||
|
->whereBetween('Date', [$time - $time % $periodMap[$period]['seconds'], $time]) |
||||
|
->where('is_1min', 1) |
||||
|
->get(); |
||||
|
} |
||||
|
$data[array_key_last($data)] = [ |
||||
|
"id" => $tmp['id'], |
||||
|
"amount" => $res->sum('Amount'), |
||||
|
"count" => $res->sum('Amount'), |
||||
|
"open" => $res->first()->Open, |
||||
|
"close" => $res->last()->Close, //最新价 |
||||
|
"low" => $res->min('Low'), |
||||
|
"high" => $res->max('High'), |
||||
|
"vol" => $res->sum('Volume'), |
||||
|
"price" => $res->last()->Close |
||||
|
]; |
||||
|
return $data; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue