C#/.NET量化交易【3】搭建定时任务,自动获取历史股票数据和当前数据

在之前项目的基础上,引用quartz包,一个是定时任务使用,一个是任务的监控使用。

f2d9e8750502baf2bf4ee8bd440e9cf5.png

创建一个基础通信段quartz配置实体类,主要用于和前端监控通信。

6ea421f42be1eb2860396da2e06abfb4.png

创建一个定时任务,用于自动定时获取实时股价

1dcfa62b8fa0d04a0bdf42660f28966c.png

再创建一个定时获取历史股票数据的任务

d2569eb6bed2fe627b5fb395b41b11bf.png

新增一个Hosted服务,用于程序启动自动后台运行,以此来启动定时任务计划

8ce824aaa977f612f815e7ebe6b840c5.png

在program里面,新增对定时任务服务的添加注册

2baa5d38928f192cb7bf9d18399699a5.png

启动程序,可以看到定时任务监控信息。我们配置的cron表达式,也可以自动被识别啥时候执行,显示两个任务分别下一次是2024/6/26 09:29:30和2024/6/26 09:01:30

dd5b3c671c7de20edfd08990f0b2f9e6.png

此处咱们模拟定时任务执行,手动执行一下。

1cbb032a03c90ec711eb07c31db4ff18.png

对应的获取到当前实时的所有A股价格。获取以后就可以定时实时执行你的策略来提供量化操作。

589e065bb348a0fd271692eb72c78ae4.png

接着继续手动执行另一个定时任务,获取股票历史数据

6620aaa515ed3ba57dd67b0336b2c688.png

断点进去可以看到获取到了股票的历史数据,此处我只选择300532这一个的最近一个月历史数据进行获取,最近一个月内有21个交易日,所以获取了21个数据。获取数据以后,你可以根据历史数据的走势、计算其他数值或者指标,结合当前价格进行一系列其他的操作。

cf06a2338be17c4bb8bbbbb4966e738b.png

定时任务部分核心代码:

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】后台回复  【量化开源】进行获取开源项目地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值