量化之 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 osimport sysimport time# 增加模块被发现curPath = os.path.abspath(os.path.dirname(__file__))rootPath = os.path.split(curPath)[0]sys.path.append(rootPath)import schedulefrom app.stockapplication import StockApplicationfrom review.reviewtask import ReviewTaskfrom review.wechat import send_link, send_msgis_stop: bool = Falsedef 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多平台公布