在之前项目的基础上,引用quartz包,一个是定时任务使用,一个是任务的监控使用。
创建一个基础通信段quartz配置实体类,主要用于和前端监控通信。
创建一个定时任务,用于自动定时获取实时股价
再创建一个定时获取历史股票数据的任务
新增一个Hosted服务,用于程序启动自动后台运行,以此来启动定时任务计划
在program里面,新增对定时任务服务的添加注册
启动程序,可以看到定时任务监控信息。我们配置的cron表达式,也可以自动被识别啥时候执行,显示两个任务分别下一次是2024/6/26 09:29:30和2024/6/26 09:01:30
此处咱们模拟定时任务执行,手动执行一下。
对应的获取到当前实时的所有A股价格。获取以后就可以定时实时执行你的策略来提供量化操作。
接着继续手动执行另一个定时任务,获取股票历史数据
断点进去可以看到获取到了股票的历史数据,此处我只选择300532这一个的最近一个月历史数据进行获取,最近一个月内有21个交易日,所以获取了21个数据。获取数据以后,你可以根据历史数据的走势、计算其他数值或者指标,结合当前价格进行一系列其他的操作。
定时任务部分核心代码:
代码语言:javascript复制 public class QuartzJobInitHostService : IHostedService, IDisposable
{
private readonly ISchedulerFactory _schedulerFactory;
public QuartzJobInitHostService(ISchedulerFactory schedulerFactory)
{
_schedulerFactory = schedulerFactory;
}
public Task StartAsync(CancellationToken stoppingToken)
{
var properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "定时任务监控";
// 设置线程池
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
properties["quartz.threadPool.threadCount"] = QuartzCongifurationInfo.ThreadPool;
properties["quartz.threadPool.threadPriority"] = QuartzCongifurationInfo.Priority;
// 远程输出配置
properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
properties["quartz.scheduler.exporter.port"] = QuartzCongifurationInfo.Ip;
properties["quartz.scheduler.exporter.bindName"] = QuartzCongifurationInfo.BindName;
properties["quartz.scheduler.exporter.channelType"] = QuartzCongifurationInfo.ChannelType;
var scheFactory = _schedulerFactory as StdSchedulerFactory;
scheFactory.Initialize(properties);
JobSchedulerInfo.JobsScheduler = scheFactory.GetScheduler().Result;
int count = 2; // 任务数量
IJobDetail[] jobs = new IJobDetail[count];
ITrigger[] triggers = new ITrigger[count];
for(int i = 0; i < count ; i )
{
if (i == 0)
{
// 定时任务1
jobs[i] = JobBuilder.Create<GetCurrentPriceJob>()
.WithIdentity($"Job_GetCurrentPrice", $"获取实时股票价格")
.Build();
triggers[i] = TriggerBuilder.Create()
.WithIdentity($"Job_GetCurrentPrice", $"获取实时股票价格~")
.StartNow()
.WithCronSchedule("30 29,59 9,10,11,13,14,15 ? * * ")
.Build();
}
else if (i == 1)
{
// 定时任务2
jobs[i] = JobBuilder.Create<GetHistoryPriceJob>()
.WithIdentity($"Job_GetHistoryPriceJob", $"获取历史股票数据")
.Build();
triggers[i] = TriggerBuilder.Create()
.WithIdentity($"Job_GetHistoryPriceJob", $"获取历史股票数据~")
.StartNow()
.WithCronSchedule("30 1 9 ? * * ")
.Build();
}
JobSchedulerInfo.JobsScheduler.ScheduleJob(jobs[i], triggers[i]);
}
JobSchedulerInfo.JobsScheduler.Start();
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken stoppingToken)
{
return Task.CompletedTask;
}
public void Dispose()
{
}
}
以上就是全部内容,欢迎观看。如果需要量化源码,可以在我公众号【Dotnet Dancer】后台回复 【量化开源】进行获取开源项目地址。