前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#/.NET量化交易【3】搭建定时任务,自动获取历史股票数据和当前数据

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

作者头像
用户9094469
发布2024-08-13 19:25:20
1120
发布2024-08-13 19:25:20
举报
文章被收录于专栏:Dotnet Dancer

在之前项目的基础上,引用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】后台回复 【量化开源】进行获取开源项目地址。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dotnet Dancer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
前端性能监控
前端性能监控(Real User Monitoring,RUM)是一站式前端监控解决方案,专注于 Web、小程序等场景监控。前端性能监控聚焦用户页面性能(页面测速,接口测速,CDN 测速等)和质量(JS 错误,Ajax 错误等),并且联动腾讯云应用性能监控实现前后端一体化监控。用户只需要安装 SDK 到自己的项目中,通过简单配置化,即可实现对用户页面质量的全方位守护,真正做到低成本使用和无侵入监控。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档