首页 > 其他分享 >量化之 win 平台下部署与执行定时任务

量化之 win 平台下部署与执行定时任务

时间:2023-05-16 22:46:21浏览次数:42  
标签:os python win job 任务 量化 定时 执行 唤醒

量化之 win 平台下部署与执行定时任务

该教程在 win 11 的平台下是没问题的,其他版本系统唤醒计算机可能需要自己调试下。创建任务计划执行 python 脚本流程如下:

效果图

每天股市收盘后,任务计划唤醒计算机执行数据更新,指标计算,然后生成自动复盘文档,自动推送到 github ,自动部署静态网站,然后通知到我创建的微信群,这样复盘就省心省力了。

通知到微信群

自动复盘文档归档静态网站

以上效果图全部是由程序自动化完成

创建任务计划

唤醒计算机需要创建任务计划,创建任务计划流程如下:

控制面板,打开任务计划程序

新建任务,并配置重要信息

常规: 使用最高权限

触发器: 设置触发任务条件

操作: 按文件截图配置

条件: 唤醒计算机运行此任务

设置: 按图勾选和选中

唤醒计算机执行 python 脚本所遇到的问题

命令窗口执行 python 脚本环境问题

其实,唤醒计算机执行 python 脚本所在的环境即是命令窗口的 python 环境,所以需要处理命令窗口环境与工程环境一致。

  1. 查看工程 python 环境

  1. 配置命令 python 环境的环境变量

  1. 查看命令 python 环境是否和量化工程环境是否一致

命令窗口执行 python 脚本 ModuleNotFoundError 问题

由于自己写的量化工程代码未能被命令环境识别,所以会出现以上错误,把自己的写的代码被命令窗口发现即可,在任务 python 脚本以下代码即可。

# 添加模块被发现
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)

一定要把这代码放在任务脚本的顶部,如下图所示:

执行 python 脚本任务完毕后,win 的任务计划再次触发唤醒计算机唤醒不了的问题

python 脚本执行完毕后,触发计算机睡眠。

触发睡眠的 python 代码,经过测试,这段代码触发的睡眠,任务计划可以再次唤醒计算机,其他的很多代码试验了很多遍,任务计划唤醒不了计算机,不知为啥,直接抄代码即可。

触发睡眠代码

import subprocess
# 执行睡眠命令
subprocess.run(["powershell", "-Command",
                "Add-Type -Assembly System.Windows.Forms; [System.Windows.Forms.Application]::SetSuspendState('Suspend', $false, $false)"])
# 结束该进程
os.system('taskkill /f /im python.exe')

如果任务计划还唤醒不了计算机执行 python 脚本,还需要这样操作

  1. 关闭休眠模式

或许上面的睡眠代码触发了计算机的休眠模式,所以需要关闭休眠模式,命令窗口执行关闭休眠。

关闭休眠模式:Powercfg -H OFF
打开休眠模式:Powercfg -H ON
  1. 修改电源选项

按以下修改电源计划

经过以上的配置,应该能通过 win 的任务计划唤醒计算机执行量化工程的任务 python 脚本了

python 任务脚本示例:

"""
唤醒任务由 win 任务计划程序唤醒,并执行该脚本,
然后设置定时任务
"""

import os
import sys
import time

# 添加模块被发现
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)

import schedule
from app.stockapplication import StockApplication

from review.reviewtask import ReviewTask
from review.wechat import send_link, send_msg

is_stop: bool = False


def wake_up():
    global is_stop
    is_stop = False
    # 距离当前时间 4 秒后执行
    job = schedule.every(1).minute
    job.do(start_application, job)

    time.sleep(30)
    send_msg('唤醒计算机成功!')
    # schedule.every().day.at("18:13").do(start_review_doc)
    # 执行计划中的任务
    while True:
        if is_stop:
            break
        schedule.run_pending()
        time.sleep(1)
    send_msg('跳出了循环...')


def start_application(job):
    schedule.cancel_job(job)
    # 项目启动类,能脱离ui运行的项目封装类
    application = StockApplication()
    # 循环执行三次启动
    for i in range(3):
        try:
            application.start(False)
            time.sleep(5)
        except Exception as e:
            print(f'启动失败:{e}')
            send_msg(f'application.start 启动失败:{e}')

    # 生成文档
    start_review_doc()

def start_review_doc():
    send_msg('开始生产自动文档了喔')
    # 项目启动类
    task = ReviewTask()
    df = task.review_data.block_review()
    # 获取code
    code_list = df['code'].tolist()
    url_list = []
    for code in code_list:
        url = task.review_data.block_detail_to_oss(code)
        url_list.append(url)
    # 列表中的元素添加头部
    url_list = list(map(lambda x: f'![]({x})', url_list))
    # 删除 code 列
    df.drop('code', axis=1, inplace=True)
    # 在第二列插入一列
    df.insert(1, '详情', url_list)
    task.docFile.dataframe_to_md(df)
    url = task.docFile.finish_file()
    send_link(url)

    # 1 分钟后睡眠
    job = schedule.every(15).seconds
    job.do(sleep, job)


def sleep(job):
    schedule.cancel_job(job)
    send_msg('计算机开始睡眠中...')
    global is_stop
    is_stop = True
    time.sleep(60)
    # 停止任务
    # schedule.clear()
    # # 唤醒计算机
    print('睡眠中...')
    # 睡眠
    # os.system("rundll32.exe powrprof.dll,SetSuspendState 0,1,0")
    import subprocess
    # 执行睡眠命令
    subprocess.run(["powershell", "-Command",
                    "Add-Type -Assembly System.Windows.Forms; [System.Windows.Forms.Application]::SetSuspendState('Suspend', $false, $false)"])
    # 结束该进程
    os.system('taskkill /f /im python.exe')


if __name__ == '__main__':
    wake_up()
    # time.sleep(10)
    # print('执行了程序')

按上面的配置完毕后,其实也已经是部署完毕了,因为已经能通过命令窗口直接运行量化工程的 python 脚本了

下期写写量化界面 PyQt 吧,这部分还没写完

这么好看的界面究竟是怎么搭建的呢?很简单,下期解密

回测界面

右侧回测界面交易股票点击,查看回测策略买卖点是否正确

总结于 2023 年 5 月 16 日 22:27:55

本文由mdnice多平台发布

标签:os,python,win,job,任务,量化,定时,执行,唤醒
From: https://www.cnblogs.com/sykent/p/17407093.html

相关文章

  • 用嵌入式sqlite部署winform应用程序
    EmbeddedResource表示数据库已嵌入到您的dll中。Copytooutputdirectory设置在这种情况下不适用,它用于BuildAction:Content嵌入数据库后,您基本上必须在首次使用时将其取消嵌入。为此,将其从Assembly中读取并将其存储到文件中。classEmbeddedResourceTest{publicsta......
  • 解决Win10运行窗口(Win+R)没有显示历史记录
    【问题】在使用Win10系统时,调用运行窗口执行某些命令后,再次打开运行窗口看不到历史记录,再次输入就比较麻烦。【解决方法】win+i打开Windows设置,选择隐私将Windows跟踪应用启动设置打开:解决!!!!!!!!!!!!!!......
  • DBeaver 22.3.0 Ultimate最新和谐版本(windows+linux)
    概述 DBeaver是一款流行的开源数据库管理工具,支持多种数据库,如MySQL、PostgreSQL、SQLite、Oracle、MicrosoftSQLServer等。它提供了一个统一的界面,使得用户能够方便地连接、管理和查询各种类型的数据库。功能支持多种数据库:DBeaver支持多种数据库引擎,如MySQL、PostgreSQL......
  • windows系统下校验测序数据MD5?
    本地上传测序文件到Linux系统,做md5时发现有少数文件失败。$catmd5.check84305_FDSW190448400-1a_1.fq.gz:OK84305_FDSW190448400-1a_2.fq.gz:FAILEDmd5sum:WARNING:1computedchecksumdidNOTmatch可能是上传有误,也可能是本地测序文件本身不完整。但是文件太大,在没......
  • windows vsCode 支持C语言
    首先下载MinGWhttps://osdn.net/projects/mingw/releases/  基本上就是安装,然后结束安装完的样子在里面找到mingw32-gcc.bin,mingw32-gcc-g++.bin,以及mingw32-gdb.bin第一个是c语言文件的编译器,第二个是c++的,第三个是用来调试编译后文件的。 然后点Installation->Applya......
  • Windows Server 2012 域控搭建
     0x01准备1、设置固定ip地址  2、修改计算机名  3、立即重新启动 0x02安装AD1、管理--添加角色和功能2、添加角色和功能向导,直接点击下一步 3、添加角色和功能向导,基于角色或基于功能的安装,下一步。 4、从服务器池中选择服务器,下一步。 5、选择“ActiveDirecyoty域服......
  • 恒创科技:深入分析香港 windows 和 linux VPS 区别和使用需求
    ​香港虚拟专用服务器(VPS)是一种流行的托管解决方案,可为用户提供专用物理服务器的灵活性和控制力,且成本不高。两种常见的VPS类型是Windows和LinuxVPS。尽管两者都提供相似的好处,但两者之间的显著差异会影响哪一个更适合用户的特定需求。在本文中,我们将探讨这两种......
  • VNC 安装 (Windows环境下使用VNC进行远程桌面控制)
    一、下载安装包、密钥生成器由于访问次数我将链接放到公众号,永久免费二、安装vnc1解压压缩包运行setup.exe程序 2选择默认语言3下一步4同意并且下一步5选择安装位置6下一步7安装8完成三密钥生成激活vnc1点击离线注册2进入下载包点击keygen运行exe......
  • Winchill分类更新
    ​ packageext.huyx.integration.classification.test;importjava.lang.reflect.InvocationTargetException;importjava.rmi.RemoteException;importjava.util.HashMap;importjava.util.Locale;importjava.util.Map;importjava.util.Set;importcom.ptc.cor......
  • 各种Window权限维持姿势合集
    Pentestlab博客自10月1号开始,按照ATT&CK技术框架的持久性技术点,更新了一系列关于Window权限维持的文章,现在还在不断更新中。我认为这是一个非常好的关于Window权限维持的系列文章,介绍了Window权限维持的多种方式,包含了各种开源工具/框架提供了这种能力,如Metasploit、Empire和Cobalt......