dficoins
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

549 lines
21 KiB

<?php
namespace App\Models;
/*
* @Descripttion:
* @version:
* @Author: GuaPi
* @Date: 2021-07-29 10:40:49
* @LastEditors: GuaPi
* @LastEditTime: 2021-08-09 17:41:27
*/
/*
* 计划任务
* */
use Carbon\Carbon;
class LinuxTask
{
//Y-m-d H:i:s 开始结束时间
static $home_date = '2020-07-19 00:00:00';
static $end_date = '2020-10-19 00:00:00';
//Y-m-d H:i:s 开始结束时间
static $home_ymd_date = '2020-07-19';
static $end_ymd_date = '2020-10-19';
static $time_1min_pointer = 60; //1分钟时间戳指针
static $time_5min_pointer = 300; //5分钟时间戳指针
static $time_15min_pointer = 900; //15分钟时间戳指针
static $time_30min_pointer = 1800; //30分钟时间戳指针
static $time_1h_pointer = 3600; //1小时时间戳指针
static $time_1day_pointer = 86400; //1天时间戳指针
static $time_1week_pointer = 604800; //1周分钟时间戳指针
static $time_1month_pointer = 2592000; //1月分钟时间戳指针
static $base_price = 2001; //基础价格
static $ups_downs = 1; //1涨,2跌
static $ups_downs_sum = 1; //涨,跌次数
static $ups_downs_high = 70; //高
static $ups_downs_value = 4; //值
static $ups_downs_low = 1; //低
public function __construct()
{
$rate = 0.04;
}
static function add_kline_data()
{
$home_date = strtotime(static::$home_date);
$end_date = strtotime(static::$end_date);
while (true) {
if ($home_date > $end_date) break;
$datetime = date('Y-m-d H:i:s', $home_date);
$Volume = mt_rand(5012, 59870) . '.' . mt_rand(10524, 99870);
$Symbol = 'stai';
$Name = 'STAI';
$kline_data = new KlineData();
$kline_data->pid = 0; // not null,
$kline_data->Symbol = $Symbol; // not null comment '产品代码',
$kline_data->Date = $home_date; //default 0 not null comment '时间戳',
$kline_data->datetime = $datetime; // null,
$kline_data->Name = $Name; //default '' not null comment '产品名称',
$kline_data->Volume = $Volume; //default 0.00000 null comment '成交量',
$kline_data->Amount = 0; //default 0.00000 null comment '成交额',
$kline_data->is_1min = 0; //default 0 null,
$kline_data->is_5min = 0; //default 0 null comment '是否是5分钟线',
$kline_data->is_15min = 0; //default 0 null,
$kline_data->is_30min = 0; //default 0 null,
$kline_data->is_1h = 0; //default 0 null,
$kline_data->is_day = 0; //default 0 null,
$kline_data->is_week = 0; //default 0 null
$kline_data->is_month = 1; //default 0 null
$kline_data->save();
echo date('Y-m-d H:i:s', $home_date) . "\n";
$home_date += static::$time_1month_pointer;
}
}
static function kline_1min()
{
$home_ymd_date = strtotime(static::$home_ymd_date);
$base_price = static::$base_price;
$ups_downs = static::$ups_downs; //1涨,2跌
$ups_downs_sum = static::$ups_downs_sum; //涨,跌次数
while (true) {
$data = KlineData::where('datetime', "like", date("Y-m-d", $home_ymd_date) . "%")
->orderBy('datetime')
->where('is_1min', 1)
->get();
if (empty($data->count())) break;
foreach ($data as $value) {
if ($ups_downs_sum == 0) {
$ups_downs_sum = mt_rand(1, 10);
if ($ups_downs == 1) {
$ups_downs = 1;
} else {
$ups_downs = 1;
}
}
$price = $base_price;
if ($ups_downs == 1) {
$value->Open = $price;
$value->High = mt_rand($price, $price + mt_rand(static::$ups_downs_low, static::$ups_downs_high));
$value->Low = mt_rand($price - mt_rand(static::$ups_downs_low, static::$ups_downs_high - static::$ups_downs_value), $price);
$value->Close = mt_rand($value->Low, $value->High);
$value->LastClose = $value->Close;
} else {
$value->Open = $price;
$value->High = mt_rand($price, $price + mt_rand(static::$ups_downs_low, static::$ups_downs_high));
$value->Low = mt_rand($price - mt_rand(static::$ups_downs_low, static::$ups_downs_high), $price);
$value->Close = mt_rand($value->Low, $value->High);
$value->LastClose = $value->Close;
}
$base_price = $value->Close;
$value->Open = $value->Open / 100000;
$value->High = $value->High / 100000;
$value->Low = $value->Low / 100000;
$value->Close = $value->Close / 100000;
$value->LastClose = $value->LastClose / 100000;
$value->Amount = sprintf("%.5f", $value->Close * $value->Volume);
$value->save();
$ups_downs_sum -= 1;
echo $value->datetime . "," . $value->Open . "," . $value->Close . "," . $value->id . "\n";
}
$home_ymd_date += static::$time_1day_pointer;
}
}
static function kline_5min()
{
$home_ymd_date = strtotime(static::$home_ymd_date);
while (true) {
$data = KlineData::where('datetime', "like", date("Y-m-d", $home_ymd_date) . "%")
->orderBy('datetime')
->where('is_5min', 1)
->get();
if (empty($data->count())) break;
foreach ($data as $value) {
$open = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_5min_pointer)
->where('is_1min', 1)
->orderBy('Date', 'asc')
->value('Open');
$close = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_5min_pointer)
->where('is_1min', 1)
->orderBy('Date', 'desc')
->value('Close');
$high = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_5min_pointer)
->where('is_1min', 1)
->orderBy('High', 'desc')
->value('High');
$low = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_5min_pointer)
->where('is_1min', 1)
->orderBy('Low', 'asc')
->value('Low');
if (empty($open)) {
$temp = KlineData::where('datetime', $value->datetime)->where('is_1min', 1)->first();
$value->Open = $temp->Open;
$value->High = $temp->High;
$value->Low = $temp->Low;
$value->Close = $temp->Close;
$value->LastClose = $temp->Close;
} else {
$value->Open = $open;
$value->High = $high;
$value->Low = $low;
$value->Close = $close;
$value->LastClose = $close;
}
$value->Amount = sprintf("%.5f", $value->Close * $value->Volume);
$value->save();
echo $value->datetime . "," . $value->Open . "," . $value->Close . "," . $value->id . "\n";
}
$home_ymd_date += static::$time_1day_pointer;
}
}
static function kline_15min()
{
$home_ymd_date = strtotime(static::$home_ymd_date);
while (true) {
$data = KlineData::where('datetime', "like", date("Y-m-d", $home_ymd_date) . "%")
->orderBy('datetime')
->where('is_15min', 1)
->get();
if (empty($data->count())) break;
foreach ($data as $value) {
$open = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_15min_pointer)
->where('is_1min', 1)
->orderBy('Date', 'asc')
->value('Open');
$close = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_15min_pointer)
->where('is_1min', 1)
->orderBy('Date', 'desc')
->value('Close');
$high = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_15min_pointer)
->where('is_1min', 1)
->orderBy('High', 'desc')
->value('High');
$low = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_15min_pointer)
->where('is_1min', 1)
->orderBy('Low', 'asc')
->value('Low');
if (empty($open)) {
$temp = KlineData::where('datetime', $value->datetime)->where('is_1min', 1)->first();
$value->Open = $temp->Open;
$value->High = $temp->High;
$value->Low = $temp->Low;
$value->Close = $temp->Close;
$value->LastClose = $temp->Close;
} else {
$value->Open = $open;
$value->High = $high;
$value->Low = $low;
$value->Close = $close;
$value->LastClose = $close;
}
$value->Amount = sprintf("%.5f", $value->Close * $value->Volume);
$value->save();
echo $value->datetime . "," . $value->Open . "," . $value->Close . "," . $value->id . "\n";
}
$home_ymd_date += static::$time_1day_pointer;
}
}
static function kline_30min()
{
$home_ymd_date = strtotime(static::$home_ymd_date);
while (true) {
$data = KlineData::where('datetime', "like", date("Y-m-d", $home_ymd_date) . "%")
->orderBy('datetime')
->where('is_30min', 1)
->get();
if (empty($data->count())) break;
foreach ($data as $value) {
$open = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_30min_pointer)
->where('is_1min', 1)
->orderBy('Date', 'asc')
->value('Open');
$close = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_30min_pointer)
->where('is_1min', 1)
->orderBy('Date', 'desc')
->value('Close');
$high = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_30min_pointer)
->where('is_1min', 1)
->orderBy('High', 'desc')
->value('High');
$low = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_30min_pointer)
->where('is_1min', 1)
->orderBy('Low', 'asc')
->value('Low');
if (empty($open)) {
$temp = KlineData::where('datetime', $value->datetime)->where('is_1min', 1)->first();
$value->Open = $temp->Open;
$value->High = $temp->High;
$value->Low = $temp->Low;
$value->Close = $temp->Close;
$value->LastClose = $temp->Close;
} else {
$value->Open = $open;
$value->High = $high;
$value->Low = $low;
$value->Close = $close;
$value->LastClose = $close;
}
$value->Amount = sprintf("%.5f", $value->Close * $value->Volume);
$value->save();
echo $value->datetime . "," . $value->Open . "," . $value->Close . "," . $value->id . "\n";
}
$home_ymd_date += static::$time_1day_pointer;
}
}
static function kline_1h()
{
$home_ymd_date = strtotime(static::$home_ymd_date);
while (true) {
$data = KlineData::where('datetime', "like", date("Y-m-d", $home_ymd_date) . "%")
->orderBy('datetime')
->where('is_1h', 1)
->get();
if (empty($data->count())) break;
foreach ($data as $value) {
$open = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1h_pointer)
->where('is_1min', 1)
->orderBy('Date', 'asc')
->value('Open');
$close = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1h_pointer)
->where('is_1min', 1)
->orderBy('Date', 'desc')
->value('Close');
$high = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1h_pointer)
->where('is_1min', 1)
->orderBy('High', 'desc')
->value('High');
$low = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1h_pointer)
->where('is_1min', 1)
->orderBy('Low', 'asc')
->value('Low');
if (empty($open)) {
$temp = KlineData::where('datetime', $value->datetime)->where('is_1min', 1)->first();
$value->Open = $temp->Open;
$value->High = $temp->High;
$value->Low = $temp->Low;
$value->Close = $temp->Close;
$value->LastClose = $temp->Close;
} else {
$value->Open = $open;
$value->High = $high;
$value->Low = $low;
$value->Close = $close;
$value->LastClose = $close;
}
$value->Amount = sprintf("%.5f", $value->Close * $value->Volume);
$value->save();
echo $value->datetime . "," . $value->Open . "," . $value->Close . "," . $value->id . "\n";
}
$home_ymd_date += static::$time_1day_pointer;
}
}
static function kline_1day()
{
$data = KlineData::orderBy('datetime')->where('is_day', 1)->get();
foreach ($data as $value) {
$open = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1day_pointer)
->where('is_1min', 1)
->orderBy('Date', 'asc')
->value('Open');
$close = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1day_pointer)
->where('is_1min', 1)
->orderBy('Date', 'desc')
->value('Close');
$high = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1day_pointer)
->where('is_1min', 1)
->orderBy('High', 'desc')
->value('High');
$low = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1day_pointer)
->where('is_1min', 1)
->orderBy('Low', 'asc')
->value('Low');
if (empty($open)) {
$temp = KlineData::where('datetime', $value->datetime)->where('is_1min', 1)->first();
$value->Open = $temp->Open;
$value->High = $temp->High;
$value->Low = $temp->Low;
$value->Close = $temp->Close;
$value->LastClose = $temp->Close;
} else {
$value->Open = $open;
$value->High = $high;
$value->Low = $low;
$value->Close = $close;
$value->LastClose = $close;
}
$value->Amount = sprintf("%.5f", $value->Close * $value->Volume);
$value->save();
echo $value->datetime . "," . $value->Open . "," . $value->Close . "," . $value->id . "\n";
}
}
static function kline_1week()
{
$data = KlineData::orderBy('datetime')->where('is_week', 1)->get();
foreach ($data as $value) {
$open = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1week_pointer)
->where('is_1min', 1)
->orderBy('Date', 'asc')
->value('Open');
$close = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1week_pointer)
->where('is_1min', 1)
->orderBy('Date', 'desc')
->value('Close');
$high = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1week_pointer)
->where('is_1min', 1)
->orderBy('High', 'desc')
->value('High');
$low = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1week_pointer)
->where('is_1min', 1)
->orderBy('Low', 'asc')
->value('Low');
if (empty($open)) {
$temp = KlineData::where('datetime', $value->datetime)->where('is_1min', 1)->first();
$value->Open = $temp->Open;
$value->High = $temp->High;
$value->Low = $temp->Low;
$value->Close = $temp->Close;
$value->LastClose = $temp->Close;
} else {
$value->Open = $open;
$value->High = $high;
$value->Low = $low;
$value->Close = $close;
$value->LastClose = $close;
}
$value->Amount = sprintf("%.5f", $value->Close * $value->Volume);
$value->save();
echo $value->datetime . "," . $value->Open . "," . $value->Close . "," . $value->id . "\n";
}
}
static function kline_1month()
{
$data = KlineData::orderBy('datetime')->where('is_month', 1)->get();
foreach ($data as $value) {
$open = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1month_pointer)
->where('is_1min', 1)
->orderBy('Date', 'asc')
->value('Open');
$close = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1month_pointer)
->where('is_1min', 1)
->orderBy('Date', 'desc')
->value('Close');
$high = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1month_pointer)
->where('is_1min', 1)
->orderBy('High', 'desc')
->value('High');
$low = KlineData::where('Date', '<=', $value->Date)
->where('Date', '>', $value->Date - static::$time_1month_pointer)
->where('is_1min', 1)
->orderBy('Low', 'asc')
->value('Low');
if (empty($open)) {
$temp = KlineData::where('datetime', $value->datetime)->where('is_1min', 1)->first();
$value->Open = $temp->Open;
$value->High = $temp->High;
$value->Low = $temp->Low;
$value->Close = $temp->Close;
$value->LastClose = $temp->Close;
} else {
$value->Open = $open;
$value->High = $high;
$value->Low = $low;
$value->Close = $close;
$value->LastClose = $close;
}
$value->Amount = sprintf("%.5f", $value->Close * $value->Volume);
$value->save();
echo $value->datetime . "," . $value->Open . "," . $value->Close . "," . $value->id . "\n";
}
}
}