一个实用的股票模拟交易框架【附Python完整源码】

引言

本文由知识星球会员“高歌的小溪”撰写,旨在分享一个全面的股票模拟交易框架。该框架涵盖了交易、量化选股、提醒和数据存储四个模块,对于想开发个人量化投资框架的读者来说很有借鉴意义。对于个人投资者,由于不能总是实时监控市场,容易错过一些关键的交易时刻,导致交易失败。本框架的设计初衷,正是为了解决这一痛点,通过自动化工具弥补人工监控的不足。使用qstock模块获取实时股票数据,结合市场动态和量化选股策略,允许交易者以开盘价买入并持有股票,直至满足清仓条件,确保能够捕捉到利润最大化的机会。此外,该框架还能够定时监测持股形态和趋势,并通过微信、钉钉、邮件等通信工具及时提醒用户,从而使得及时买卖成为可能。无论是新手投资者还是经验丰富的量化交易者,本框架都提供了宝贵的参考价值,让读者能够从中学习并应用到自己的交易实践中去。在公众号后台回复“20231109”可获取该股票模拟交易框架的完整源码

股票模拟交易各模块简介

01

交易模块

交易模块包括买入、卖出操作和卖出策略,以MACD死叉+回撤比例作为卖出策略,可自行扩展卖出策略。

5de14a5ab2e691a66e2fda9935483123.png

详细代码见strategy_macd.py

02

量化选股

量化选股是一个可扩展的模块,个人根据自己经验、喜好等自定义自己的选股模块。

框架中以动量+MACD金叉选股作为买入策略。

728d7b6578363c43031a4d85bf8fcc1b.png详细代码见strategy_macd.py

03

提醒模块

提醒模块通过钉钉群或电子邮件进行提醒。

 322861daa5d420a87062f8a40ba4b4cf.png

0c1592299b5e76ea66312de2beaa93ca.png

详细代码见dingtalk.py、email.py、wechart.py

04

数据存储

为简化操作,资产信息和持仓信息以json文件格式保存,交易信息以csv文件格式保存。

资产信息记录当前可用资金、总市值、总资产(可用资金+总市值)、收益率等情况。

持仓信息记录目前持有的股票信息,包括股票代码、持有数量、建仓时间、成本价。

交易信息记录每次买入/卖出的情况。

0b34a71d7ed95073a7303fd38deaa976.png

详细代码见data.py

运行模拟交易框架

盘前:python strategy_macd.py prepare

开盘:python strategy_macd.py open

盘中:python strategy_macd.py check

盘后:python strategy_macd.py close

结合操作系统定时任务,完成定时执行策略。Linux定时任务参考如下:

d4e28f6bcc7f3700b5163b2c58d95f8a.png

05

已知缺陷

1、股票交易未考虑交易成本(手续费、印花税、佣金等),以开仓时的股票价格作为成本价。

2、股票建仓价格以当日开盘价作为买入价,未考虑涨停板、跌停板以及开盘快速拉升/下跌等买不到、卖不出的情况,故计算的股票收益会有偏差。

结语

模拟交易框架旨在提供一种监测持仓,及时止损的思路。至于量化选股则是仁者见仁,智者见智,每个人都有自己的选股策略和方法,所谓千人千法,很难有所共识。止损策略也是如此,每个人的对回撤的容忍度不同,对风险的承受能力也不同,就会产生不同的止损策略。模拟交易框架可用于持仓监测,也可用于策略经回测后实盘上线前验证,避免因实盘跟回测不一致导致亏损。特别需要注意的是第七部分的已知缺陷,模拟交易框架计算的收益跟实盘存在一定的偏差。

参考资料:

01

1、qstock手册

https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUyMDk1MDY2MQ==&action=getalbum&album_id=2619224775005257729&uin=&key=&devicetype=Windows+7+x64&version=6309071d&lang=zh_CN&ascene=7&session_us=gh_08bfa5e271b5

02

2、钉钉推送消息参考文档:

https://open.dingtalk.com/document/orgapp/custom-bot-to-send-group-chat-messages#

03

https://zhuanlan.zhihu.com/p/378791398

3、企业微信推送消息参考文档:

https://blog.csdn.net/jacke121/article/details/133624941

35f2c42ada79799e70da139e804f12b7.png

关于Python金融量化

3e5f32010e1d56286e7826b41282307a.png

专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取qstock源代码、30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、与博主直接交流、答疑解惑等。添加个人微信sky2blue2可获取八五折优惠。

ca937af385f368140f5a62ce34dfd728.jpeg

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以提供一段示例代码来帮助您:from playwright import async_playwrightasync with async_playwright() as p: browser = await p.launch() page = await browser.new_page() await page.goto('https://qzone.qq.com/') # 获取标题 titles = await page.querySelectorAllEval('div.title', '(titles) => titles.map(t => t.innerText)') print('Titles:', titles) await browser.close() ### 回答2: 以下是使用Python的Playwright框架编写的爬虫源码,用于爬取QQ空间标题: ```python from playwright.sync_api import sync_playwright def scrape_qq_space_titles(): with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto('https://qzone.qq.com/') # 在此输入你的QQ账号和密码 page.fill('#loginform [name=username]', 'your_qq_username') page.fill('#loginform [name=password]', 'your_qq_password') page.click('#login_button') page.wait_for_selector('.mod-feed_content') # 获取页面上的所有标题 titles = page.inner_text('.mod-feed_content .f-info .f-nick') for title in titles: print(title) browser.close() scrape_qq_space_titles() ``` 请注意,在代码中的 `your_qq_username` 和 `your_qq_password` 处替换为你自己的QQ账号和密码。此代码通过Playwright自动打开QQ空间登录页面,填写账号和密码,然后模拟点击登录按钮。之后,代码等待页面加载并查找标题部分的元素,然后将所有标题打印出来。 请确保已经安装了Playwright库,可以通过 `pip install playwright` 命令进行安装。 ### 回答3: import asyncio from playwright.async_api import async_playwright, Error async def scrape_qq_space_titles(): async with async_playwright() as playwright: browser = await playwright.chromium.launch() page = await browser.new_page() await page.goto('https://user.qzone.qq.com/your_qq_number/main') # 登录QQ空间,如果需要的话,可以自动填入用户名和密码 try: # 在这里等待页面加载... await page.wait_for_selector('.feed-wrapper') # 使用页面的-css选择器获取标题元素 title_elements = await page.query_selector_all('.feed-wrapper .f-single-content') if len(title_elements) > 0: # 遍历所有标题元素并打印标题的内容 for element in title_elements: title_text = await element.text_content() print(title_text) except Error.TimeoutError: print("页面加载超时") except Error.PageError: print("页面错误") finally: await browser.close() asyncio.run(scrape_qq_space_titles())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值