哪些券商有miniqmt? 门槛如何

QMT李魔佛 发表了文章 • 0 个评论 • 1914 次浏览 • 2023-08-11 12:04 • 来自相关话题

miniqmt可以不在QMT的框架下编写代码,灵活性要高于QMT。
它属于一个精简版的QMT,把回测功能,UI界面操作功能去除。
 
你可以把miniqmt导入到你的项目里面,直接操作下单。
 from xtquant import xtdata
data = xtdata.get_market_data(field_list=['time', 'open', 'close', 'high', 'low', 'volume', 'amount'], stock_list=['603000.SH'], period='1d', start_time='20230101')
print(data)上面代码 可以直接在你的pycharm里面运行, 提前把 xtquant 这个包复制到系统路径,site-packages,或者自己加到环境变量。
 
 
MiniQMT支持新版本的Python
最新已经支持python3.6-3.11
更新方式:主QMT-设置-交易设置-模型设置里更新Python库
 
目前支持miniQTM的券商有哪些?
 
其实miniqmt是附属在QMT上的,正常有QMT的,默认就可以使用miniqmt,除非券商作妖,阉割了。
 
国金,国盛支持miniqmt,开通QMT后 miniqmt就是直接可以使用的。
 





 
而国信的miniqmt默认被阉割了,需要额外去申请。(可能还有些经理不敬业的,会和你说不支持miniqmt,曾经遇到过),不过国信的miniqmt开通后,个人只能拉取行情数据,是没有下单权限,下单券商是需要机构才可以申请。
 
国金的QMT,miniqmt的开通门槛会低一些,有入金2W就可以开通的营业部; 也有入金50W开通的营业部。 需要的盆友可以扫码咨询开通。
 
国盛的QMT,目前门槛比较高,需要资产100W才能开通。本身之前门槛还只是入金30W就可以的了,后面他们不断地提高门槛,提到50W,后面提高到100W,不过最近几天,营业部的经理和我说目前我这边开通只需要50W即可。
 
 所以平时有优惠费率的时候就不要犹犹豫豫,把账户和权限开了再说,因为好事不常有,过了这个桥就没有这个店。
 
 
需要开户的盆友可以扫码咨询

  查看全部
miniqmt可以不在QMT的框架下编写代码,灵活性要高于QMT。
它属于一个精简版的QMT,把回测功能,UI界面操作功能去除。
 
你可以把miniqmt导入到你的项目里面,直接操作下单。
 
from xtquant import xtdata
data = xtdata.get_market_data(field_list=['time', 'open', 'close', 'high', 'low', 'volume', 'amount'], stock_list=['603000.SH'], period='1d', start_time='20230101')
print(data)
上面代码 可以直接在你的pycharm里面运行, 提前把 xtquant 这个包复制到系统路径,site-packages,或者自己加到环境变量。
 
 
MiniQMT支持新版本的Python
最新已经支持python3.6-3.11
更新方式:主QMT-设置-交易设置-模型设置里更新Python库
 
目前支持miniQTM的券商有哪些?
 
其实miniqmt是附属在QMT上的,正常有QMT的,默认就可以使用miniqmt,除非券商作妖,阉割了。
 
国金,国盛支持miniqmt,开通QMT后 miniqmt就是直接可以使用的。
 

国金国盛.jpg

 
而国信的miniqmt默认被阉割了,需要额外去申请。(可能还有些经理不敬业的,会和你说不支持miniqmt,曾经遇到过),不过国信的miniqmt开通后,个人只能拉取行情数据,是没有下单权限,下单券商是需要机构才可以申请。
 
国金的QMT,miniqmt的开通门槛会低一些,有入金2W就可以开通的营业部; 也有入金50W开通的营业部。 需要的盆友可以扫码咨询开通。
 
国盛的QMT,目前门槛比较高,需要资产100W才能开通。本身之前门槛还只是入金30W就可以的了,后面他们不断地提高门槛,提到50W,后面提高到100W,不过最近几天,营业部的经理和我说目前我这边开通只需要50W即可。
 
 所以平时有优惠费率的时候就不要犹犹豫豫,把账户和权限开了再说,因为好事不常有,过了这个桥就没有这个店。
 
 
需要开户的盆友可以扫码咨询

 

5 个在线 AI 字幕生成器,让字幕生成变得更简单

深度学习马化云 发表了文章 • 0 个评论 • 1688 次浏览 • 2023-08-08 18:29 • 来自相关话题

做视频自媒体的朋友,每天都需要处理各种各样的视频,一个频繁的任务就是添加字幕到视频里面。

磨刀不误砍柴工,现在chatGPT等AI工具逐渐在每一个领域里面,慢慢地替代人类的繁琐工作,添加字幕的任务也不例外。本文分享5款在线的字幕AI生成工具,能够大大地提高用户的视频编辑效率。


一、录咖-AI 字幕
https://reccloud.cn/ai-subtitle 
 
第一个字幕生成器是录咖-AI 字幕。它的主要功能是在线使用、操作简单、精准识别,并支持 AI 生成和 AI 翻译双语字幕。








下面是使用录咖-AI 字幕的简单步骤:

打开录咖-AI 字幕的官方网站。

添加您要为其生成字幕的视频文件。

等待录咖-AI 字幕完成语音识别和字幕生成的过程。

如果需要双语字幕,您可以选择 AI 翻译功能,将生成的字幕自动翻译为另一种语言。

您可以选择导出字幕或直接保存字幕到视频中。

优势:
 ● 操作简单:无需复杂的设置和技术要求,用户可以轻松上手。
 ● 精准识别:采用先进的语音识别技术,能够准确地将语音内容转换为文字。 
● 支持 AI 生成:支持使用 AI 生成字幕,可以快速生成准确的字幕内容。
 ● 支持 AI 翻译:支持将生成的字幕自动翻译为另一种语言,提供双语字幕的功能。 
 
劣势:
 ● 依赖网络:由于是在线使用,录咖-AI 字幕的使用需要保持网络连接。

二、EasySub
 
https://easyssub.com/zh/ 
 
第二个字幕生成器是 EasySub 。EasySub 是一个在线字幕生成器,提供免费试用选项,但并非完全免费。免费试用仅限于 30 分钟内生成字幕,超过时限则需要付费。EasySub 支持多语言,但处理速度较慢。








使用步骤:
 1. 打开 EasySub 的官方网站。 
 2. 创建账户。
 3. 上传视频文件或提供视频的 URL 。
 4. 等待 EasySub 完成语音识别和字幕生成。
 5. 对生成的字幕进行基本的编辑和调整。
 6. 选择合适的视频格式然后导出视频。

优势: 
● 多语言支持:EasySub 可以为不同语种的视频生成对应的字幕。 
● 免费试用:虽然不是完全免费,但 30 分钟内可以免费生成字幕。
 
 劣势:
● 处理速度较慢:EasySub 生成字幕的速度相对较慢。 
● 需要付费:超过 30 分钟的使用时限后,需要付费继续使用。

 
三、FlexClip
 
https://www.flexclip.com/cn/tools/auto-subtitle/ 
 
第三个字幕生成器是 FlexClip 。FlexClip 是一个免费在线使用的字幕生成器,它支持翻译多语言,但处理速度较慢,加载时间较长,并且有广告显示。使用 FlexClip 需要登录账号,免费账户可以使用 5 分钟时长。需要注意的是,新生成的字幕会覆盖当前字幕,而且 FlexClip 不支持双语字幕。此外,FlexClip 的界面不太易用,而且识别精准度方面可能存在一定的问题。








使用步骤:
 1. 打开 FlexClip 的官方网站并登录账号。
 2. 上传视频文件。 
3. 等待 FlexClip 完成语音识别和字幕生成的过程。 
4. 编辑和调整生成的字幕内容。
 5. 将字幕保存或导出到视频中。

优势:
 - 免费在线使用:FlexClip 提供免费的在线字幕生成服务。
 - 多语言翻译:支持将字幕翻译为多种语言,满足不同语言需求。
 
 劣势:
 - 处理速度较慢:FlexClip 的处理速度相对较慢,可能需要较长的等待时间。 
- 广告显示:使用 FlexClip 时会显示广告,可能对用户体验造成一定影响。

识别精准度较低:由于识别技术的限制,FlexClip 的识别精准度可能不如其他字幕生成器。


四、Sonix
 
https://sonix.ai/zh/automated-subtitles-and-captions 
 
第四个字幕生成器是 Sonix 。Sonix 是一个提供 30 分钟内免费使用的字幕生成器,用户可以自定义、拆分和编辑字幕,并支持导出到 SRT 和 VTT 格式。然而,Sonix 的注册过程相对较复杂。








使用步骤:
 
 1. 在 Sonix 的官方网站上注册账号并登录。
 2. 上传音频或视频文件。
 3. Sonix 会对文件进行语音识别,生成相应的字幕文本。
 4. 对生成的字幕进行自定义编辑,可以进行拆分、合并、修正等操作。
 5. 在编辑完成后,选择导出字幕的格式,如 SRT 或 VTT 。 6. 完成导出后,可以将字幕应用到相应的视频或使用在其他平台上。

优势: 
- 30 分钟内免费使用:Sonix 提供了 30 分钟内的免费使用,方便用户进行快速的字幕生成和编辑。 
- 自定义编辑:用户可以对生成的字幕进行自定义编辑,以满足个性化的需求。 
- 多种导出格式:Sonix 支持将字幕导出为常见的 SRT 和 VTT 格式,方便在不同平台和播放器上使用。 劣势:

注册过程较复杂:Sonix 的注册过程可能相对复杂,可能需要填写一些个人信息或进行身份验证。

五、Auris
 
https://aurisai.io/zh/add-subtitles-to-video/ 
 
第五个字幕生成器是 Auris 。Auris 是一个在线使用的字幕生成器,提供 30 分钟内的免费使用。它支持翻译多种语言,并且可以处理多种视频格式。








使用步骤:
 
 1. 打开 Auris 的官方网站。 
2. 选择音频语言,即选择你要生成字幕的音频语言。 
3. 点击上传按钮,选择你要生成字幕的视频文件。
 4. 等待一段时间,直到字幕生成完成。 
5. 在字幕生成完成后,你可以看到生成的字幕文本。

优势:
 - 在线使用:Auris 是一个在线字幕生成器,无需下载和安装额外的软件。
 - 多语言翻译:支持将字幕文本进行多语言翻译,满足不同语种之间的转换需求。 - 支持 Facebook 和 Google 账号登陆:用户可以通过自己的 Facebook 或 Google 账号登录 Auris ,方便快捷。 
 
劣势:
 - 30 分钟内免费限制:Auris 的免费使用时长限制为 30 分钟,超过时长需要购买付费账户或进行其他付费方式。 查看全部
做视频自媒体的朋友,每天都需要处理各种各样的视频,一个频繁的任务就是添加字幕到视频里面。

磨刀不误砍柴工,现在chatGPT等AI工具逐渐在每一个领域里面,慢慢地替代人类的繁琐工作,添加字幕的任务也不例外。本文分享5款在线的字幕AI生成工具,能够大大地提高用户的视频编辑效率。


一、录咖-AI 字幕
https://reccloud.cn/ai-subtitle 
 
第一个字幕生成器是录咖-AI 字幕。它的主要功能是在线使用、操作简单、精准识别,并支持 AI 生成和 AI 翻译双语字幕。


20230808175115.png



下面是使用录咖-AI 字幕的简单步骤:

打开录咖-AI 字幕的官方网站。

添加您要为其生成字幕的视频文件。

等待录咖-AI 字幕完成语音识别和字幕生成的过程。

如果需要双语字幕,您可以选择 AI 翻译功能,将生成的字幕自动翻译为另一种语言。

您可以选择导出字幕或直接保存字幕到视频中。

优势:
 ● 操作简单:无需复杂的设置和技术要求,用户可以轻松上手。
 ● 精准识别:采用先进的语音识别技术,能够准确地将语音内容转换为文字。 
● 支持 AI 生成:支持使用 AI 生成字幕,可以快速生成准确的字幕内容。
 ● 支持 AI 翻译:支持将生成的字幕自动翻译为另一种语言,提供双语字幕的功能。 
 
劣势:
 ● 依赖网络:由于是在线使用,录咖-AI 字幕的使用需要保持网络连接。

二、EasySub
 
https://easyssub.com/zh/ 
 
第二个字幕生成器是 EasySub 。EasySub 是一个在线字幕生成器,提供免费试用选项,但并非完全免费。免费试用仅限于 30 分钟内生成字幕,超过时限则需要付费。EasySub 支持多语言,但处理速度较慢。


20230808175622.png



使用步骤:
 1. 打开 EasySub 的官方网站。 
 2. 创建账户。
 3. 上传视频文件或提供视频的 URL 。
 4. 等待 EasySub 完成语音识别和字幕生成。
 5. 对生成的字幕进行基本的编辑和调整。
 6. 选择合适的视频格式然后导出视频。

优势: 
● 多语言支持:EasySub 可以为不同语种的视频生成对应的字幕。 
● 免费试用:虽然不是完全免费,但 30 分钟内可以免费生成字幕。
 
 劣势:
● 处理速度较慢:EasySub 生成字幕的速度相对较慢。 
● 需要付费:超过 30 分钟的使用时限后,需要付费继续使用。

 
三、FlexClip
 
https://www.flexclip.com/cn/tools/auto-subtitle/ 
 
第三个字幕生成器是 FlexClip 。FlexClip 是一个免费在线使用的字幕生成器,它支持翻译多语言,但处理速度较慢,加载时间较长,并且有广告显示。使用 FlexClip 需要登录账号,免费账户可以使用 5 分钟时长。需要注意的是,新生成的字幕会覆盖当前字幕,而且 FlexClip 不支持双语字幕。此外,FlexClip 的界面不太易用,而且识别精准度方面可能存在一定的问题。


20230808175823.png



使用步骤:
 1. 打开 FlexClip 的官方网站并登录账号。
 2. 上传视频文件。 
3. 等待 FlexClip 完成语音识别和字幕生成的过程。 
4. 编辑和调整生成的字幕内容。
 5. 将字幕保存或导出到视频中。

优势:
 - 免费在线使用:FlexClip 提供免费的在线字幕生成服务。
 - 多语言翻译:支持将字幕翻译为多种语言,满足不同语言需求。
 
 劣势:
 - 处理速度较慢:FlexClip 的处理速度相对较慢,可能需要较长的等待时间。 
- 广告显示:使用 FlexClip 时会显示广告,可能对用户体验造成一定影响。

识别精准度较低:由于识别技术的限制,FlexClip 的识别精准度可能不如其他字幕生成器。


四、Sonix
 
https://sonix.ai/zh/automated-subtitles-and-captions 
 
第四个字幕生成器是 Sonix 。Sonix 是一个提供 30 分钟内免费使用的字幕生成器,用户可以自定义、拆分和编辑字幕,并支持导出到 SRT 和 VTT 格式。然而,Sonix 的注册过程相对较复杂。


20230808180002.png



使用步骤:
 
 1. 在 Sonix 的官方网站上注册账号并登录。
 2. 上传音频或视频文件。
 3. Sonix 会对文件进行语音识别,生成相应的字幕文本。
 4. 对生成的字幕进行自定义编辑,可以进行拆分、合并、修正等操作。
 5. 在编辑完成后,选择导出字幕的格式,如 SRT 或 VTT 。 6. 完成导出后,可以将字幕应用到相应的视频或使用在其他平台上。

优势: 
- 30 分钟内免费使用:Sonix 提供了 30 分钟内的免费使用,方便用户进行快速的字幕生成和编辑。 
- 自定义编辑:用户可以对生成的字幕进行自定义编辑,以满足个性化的需求。 
- 多种导出格式:Sonix 支持将字幕导出为常见的 SRT 和 VTT 格式,方便在不同平台和播放器上使用。 劣势:

注册过程较复杂:Sonix 的注册过程可能相对复杂,可能需要填写一些个人信息或进行身份验证。

五、Auris
 
https://aurisai.io/zh/add-subtitles-to-video/ 
 
第五个字幕生成器是 Auris 。Auris 是一个在线使用的字幕生成器,提供 30 分钟内的免费使用。它支持翻译多种语言,并且可以处理多种视频格式。


20230808180204.png



使用步骤:
 
 1. 打开 Auris 的官方网站。 
2. 选择音频语言,即选择你要生成字幕的音频语言。 
3. 点击上传按钮,选择你要生成字幕的视频文件。
 4. 等待一段时间,直到字幕生成完成。 
5. 在字幕生成完成后,你可以看到生成的字幕文本。

优势:
 - 在线使用:Auris 是一个在线字幕生成器,无需下载和安装额外的软件。
 - 多语言翻译:支持将字幕文本进行多语言翻译,满足不同语种之间的转换需求。 - 支持 Facebook 和 Google 账号登陆:用户可以通过自己的 Facebook 或 Google 账号登录 Auris ,方便快捷。 
 
劣势:
 - 30 分钟内免费限制:Auris 的免费使用时长限制为 30 分钟,超过时长需要购买付费账户或进行其他付费方式。

ptrade qmt无法登录问题

量化交易李魔佛 发表了文章 • 0 个评论 • 1304 次浏览 • 2023-08-08 14:44 • 来自相关话题

经常有新人进群后,就说ptrade,或者qmt无法登录。












 
实际上这是在周五晚上和周末出现的问题,这是计划内的维护。部分券商没有技术服务支持,用户可能连服务器日常维护服务通知都无法及时得到通知。
 
PS:其实,大部分券商基本也就那样,ptrade和qmt的技术支持基本等于0,不敢说全部,至少90%的情况是这样的。 以至于我自己维护了一个ptrade,qmt的技术群(审核才可以加),日常有空就在里面解决群友的问题。基本都是些基础问题,部分可能是券商数据问题,大部分是用户的代码问题。 查看全部
经常有新人进群后,就说ptrade,或者qmt无法登录。

Screenshot_2023_0814_011717.jpg



Screenshot_2023_0814_011646.jpg


 
实际上这是在周五晚上和周末出现的问题,这是计划内的维护。部分券商没有技术服务支持,用户可能连服务器日常维护服务通知都无法及时得到通知。
 
PS:其实,大部分券商基本也就那样,ptrade和qmt的技术支持基本等于0,不敢说全部,至少90%的情况是这样的。 以至于我自己维护了一个ptrade,qmt的技术群(审核才可以加),日常有空就在里面解决群友的问题。基本都是些基础问题,部分可能是券商数据问题,大部分是用户的代码问题。

银河证券万一免五 0.1元起 基金LOF申购一折 活动优惠

券商万一免五绫波丽 发表了文章 • 0 个评论 • 1257 次浏览 • 2023-07-28 20:08 • 来自相关话题

 统一佣金标准: 
 
股票万1,最低0.1元 
 
ETF/LOF万0.5,最低0.1元 
 
可转债万0.5,最低0.1元 
 
逆回购一天期,1折 
 
两融5%-5.8% 
 
佣金查询(收盘后): 
银河APP-交易-其他查询-交割单-佣金

活动有截至时间,需要开的迅速咨询开通。 银河是套利必备的利器。没有之一。 
 
集思录人员人手必备的热门券商。而且还是免5的。






 
PS: 那些说面五违规的,你们自己把那交易的五元乖乖交给券商就好了。 我一个银河用了5年了,免5用到现在,帮我省下不知道多少钱了。
再说一次,你们喜欢交5元就自己交,不要也让其他人也和你一样多交这无谓的5元。
 
需要开户的联系:

  查看全部
50894e38f58ce19bbf7bd01f3f4bce4c.jpeg

 统一佣金标准: 
 
股票万1,最低0.1元 
 
ETF/LOF万0.5,最低0.1元 
 
可转债万0.5,最低0.1元 
 
逆回购一天期,1折 
 
两融5%-5.8% 
 
佣金查询(收盘后): 
银河APP-交易-其他查询-交割单-佣金

活动有截至时间,需要开的迅速咨询开通。 银河是套利必备的利器。没有之一。 
 
集思录人员人手必备的热门券商。而且还是免5的。

mmexport1692332532424.jpg


 
PS: 那些说面五违规的,你们自己把那交易的五元乖乖交给券商就好了。 我一个银河用了5年了,免5用到现在,帮我省下不知道多少钱了。
再说一次,你们喜欢交5元就自己交,不要也让其他人也和你一样多交这无谓的5元。
 
需要开户的联系:

 

20行代码实现Ptrade一键清仓

Ptrade李魔佛 发表了文章 • 0 个评论 • 1062 次浏览 • 2023-07-28 02:16 • 来自相关话题

留着有用。

万一遇到特殊情况要核的话,管快,1秒清空
 def func(context):
pos_dict = get_positions()
for code,pos in pos_dict.items():
enable_amount = pos.enable_amount
if enable_amount>0:
order_target(code, 0)

# 标准
def initialize(context):
# 初始化策略
run_daily(context, func, time='9:25')

def handle_data(context, data):
pass
实际只用11行代码。
 
如果只清除转债或者股票某个品种,可以在code那里加个判断def func(context):
pos_dict = get_positions()
for code,pos in pos_dict.items():
enable_amount = pos.enable_amount
if enable_amount>0 and code.startswith(('12','11')): # 只清除转债
order_target(code, 0)  查看全部
留着有用。

万一遇到特殊情况要核的话,管快,1秒清空
 
def func(context):
pos_dict = get_positions()
for code,pos in pos_dict.items():
enable_amount = pos.enable_amount
if enable_amount>0:
order_target(code, 0)

# 标准
def initialize(context):
# 初始化策略
run_daily(context, func, time='9:25')

def handle_data(context, data):
pass

实际只用11行代码。
 
如果只清除转债或者股票某个品种,可以在code那里加个判断
def func(context):
pos_dict = get_positions()
for code,pos in pos_dict.items():
enable_amount = pos.enable_amount
if enable_amount>0 and code.startswith(('12','11')): # 只清除转债
order_target(code, 0)
 

ptrade重启策略后日志被清空,正常的操作方式

Ptrade李魔佛 发表了文章 • 0 个评论 • 994 次浏览 • 2023-07-25 04:36 • 来自相关话题

坑爹的设计。 一个不留神,改了个参数,然后就点了一下重启策略。。。。





 
然后就心满意足的退出Ptrade。
 
然后想起来有个日志想要查一下的。再进去一看,里面的几个月的日志就被清除了。 OMG
这个清除日志的操作虽然说是软件设置的。但是产品经理应该也要评估一下,哪怕我只是改一个时间,比如我把策略从9:15分执行改成9:16执行,只要改动,策略就需要被重启,才能生效。
 
试问,哪个策略能够几年不出错,不修改,一直在上面运行的呢? 退一万步讲,其实如果我知道我即将修改后重启策略,面对这几百个按时间切割的日志,我用什么工具导出呢? 
 
软件自带的导出功能只能按照天数的。
 
所以对于运行很久的策略,如果需要修改里面的内容,我的建议是,直接停止程序,而不是重启。
 
然后把你的策略复制到一个新的策略里面,在新的策略里面改动参数。
 
然后直接运行这个新的策略,这样之前那个策略因为没有被重启,只是停止了,它的日志依然保存在ptrade的日历里面,你只需要选择指定的日期,就可以看到对应的历史数据。
 





 
更多ptrade、qmt,掘金的量化交易技巧,请查看星球。

  查看全部
坑爹的设计。 一个不留神,改了个参数,然后就点了一下重启策略。。。。

20230725001.jpg

 
然后就心满意足的退出Ptrade。
 
然后想起来有个日志想要查一下的。再进去一看,里面的几个月的日志就被清除了。 OMG
这个清除日志的操作虽然说是软件设置的。但是产品经理应该也要评估一下,哪怕我只是改一个时间,比如我把策略从9:15分执行改成9:16执行,只要改动,策略就需要被重启,才能生效。
 
试问,哪个策略能够几年不出错,不修改,一直在上面运行的呢? 退一万步讲,其实如果我知道我即将修改后重启策略,面对这几百个按时间切割的日志,我用什么工具导出呢? 
 
软件自带的导出功能只能按照天数的。
 
所以对于运行很久的策略,如果需要修改里面的内容,我的建议是,直接停止程序,而不是重启。
 
然后把你的策略复制到一个新的策略里面,在新的策略里面改动参数。
 
然后直接运行这个新的策略,这样之前那个策略因为没有被重启,只是停止了,它的日志依然保存在ptrade的日历里面,你只需要选择指定的日期,就可以看到对应的历史数据。
 

20230725002.jpg

 
更多ptrade、qmt,掘金的量化交易技巧,请查看星球。

 

ptrade批量获取股票的昨天的收盘价,转为字典json【一】

Ptrade李魔佛 发表了文章 • 0 个评论 • 1217 次浏览 • 2023-07-17 19:50 • 来自相关话题

有些指标的计算,需要拿个股的昨日收盘价。而ptrade提供了多个API函数可以获取股票的昨天的收盘价。
ptrade接口文档:https://ptradeapi.com
 
笔者这里接写几个最简单的方式,供读者朋友参考。
 
下面代码适用于实盘,回测。
 
code_list = ['113578.SS','123014.SZ'] # 股票池,这里可以填几千个股票也没问题的
zz_df_price = get_price(code_list, start_date=None, end_date=None, frequency='1d', fields='close', fq=None, count=1)
yesterday_price_dict = zz_df_price.iloc[0].to_json()
 
讲解:
1. 
code_list = ['113578.SS','123014.SZ'] # 股票池,这里可以填几千个股票也没问题的,比如你可以先拿沪深300指数的成分股,然后传入这个函数。
 
2. 
zz_df_price = get_price(code_list, start_date=None, end_date=None, frequency='1d', fields='close', fq=None, count=1)


get_price: 获取历史数据。 这里不用get_history,因为这个函数太多bug了,主要是券商数据可能是缺的。拿历史数据我基本不敢用get_history。
 
因为我拿昨天的收盘价,所以我就不指定日期,只用count=1,获取1条数据,因为数据是从最新开始的,那么这一条数据肯定是上一个交易日的。
 
正常情况返回的数据是一个Pannel,三维的。不过因为filed=‘close',单个字段,特殊情况,这里返回的是一个dataframe





 
 
输出:
zz_df_price.iloc[0].to_json()




 
index 113578.SS 123014.SZ
2023-07-14 93.036 118.36
所以接下来要做的是,获取dataframe的第一行数据,直接转为json
 
得到:
'{"113578.SS":93.036,"123014.SZ":118.36}'

更多技术支持与解答,欢迎加入星球。

 
 
  查看全部
有些指标的计算,需要拿个股的昨日收盘价。而ptrade提供了多个API函数可以获取股票的昨天的收盘价。
ptrade接口文档:https://ptradeapi.com
 
笔者这里接写几个最简单的方式,供读者朋友参考。
 
下面代码适用于实盘,回测。
 
code_list = ['113578.SS','123014.SZ'] # 股票池,这里可以填几千个股票也没问题的
zz_df_price = get_price(code_list, start_date=None, end_date=None, frequency='1d', fields='close', fq=None, count=1)
yesterday_price_dict = zz_df_price.iloc[0].to_json()

 
讲解:
1. 
code_list = ['113578.SS','123014.SZ'] # 股票池,这里可以填几千个股票也没问题的,比如你可以先拿沪深300指数的成分股,然后传入这个函数。
 
2. 
zz_df_price = get_price(code_list, start_date=None, end_date=None, frequency='1d', fields='close', fq=None, count=1)


get_price: 获取历史数据。 这里不用get_history,因为这个函数太多bug了,主要是券商数据可能是缺的。拿历史数据我基本不敢用get_history。
 
因为我拿昨天的收盘价,所以我就不指定日期,只用count=1,获取1条数据,因为数据是从最新开始的,那么这一条数据肯定是上一个交易日的。
 
正常情况返回的数据是一个Pannel,三维的。不过因为filed=‘close',单个字段,特殊情况,这里返回的是一个dataframe

20230717004.jpg

 
 
输出:
zz_df_price.iloc[0].to_json()

20230717003.jpg

 
index      113578.SS	123014.SZ
2023-07-14 93.036 118.36

所以接下来要做的是,获取dataframe的第一行数据,直接转为json
 
得到:
'{"113578.SS":93.036,"123014.SZ":118.36}'

更多技术支持与解答,欢迎加入星球。

 
 
 

投资海外市场,有哪些标的可以考虑?| 多个QDII基金数据分析

股票李魔佛 发表了文章 • 0 个评论 • 876 次浏览 • 2023-07-10 23:21 • 来自相关话题

投资为什么要放眼全球? 看看下图就一目了然。
 
这是过去十几年纳斯达克指数的月K线走势。
 





 
 
去年2022年回调了一年,下跌了33%,而今年截至到今天,已经涨了31%。
 
以前老司机曾经说过,对于纳指的每次回调都是买入的机会。老司机果诚不欺我也!
 
2016年的时候不少大V就在喊美股冲顶风险很大泡沫要破云云之类。再来看看我们那低估的沪深300。
 





 
 
 
最近十五年来的月K线。上涨的时光总是短暂的。如果十多年前山顶位置买的投资者,熬到现在也可能未解套。
 
 
 
怪不得网友们的吐槽
 





 
 
 
所以放眼全球,可选标的更为丰富,那投资标的就可以更为分散,篮子里的品种相关性就会越低,那么遭遇系统性风险的概率就越低。好比买了一揽子基于A股的基金,然后A股大盘崩了,覆巢之下无完卵,那一篮子的鸡蛋也碎了。而投资全球基金,就是把鸡蛋装到不同的篮子,甚至不同的车子里。
 
 
 
本期雪球老司基评测选出了8只全球市场主题基金,我们来对其进行评测,来看看各自的风格,哪一只的风格适合你。
 
 
 
本次评测的8个全球基金如下:
 





 
 
其中,易方达标普消费品,广发全球医疗保健,华安标普全球石油,诺安全球黄金这4个基金为跟踪指数型基金,主要考察基金经理对指数跟踪误差的控制能力。
 
工银全球精选股票,国富全球科技互联,富国全球科技互联,银华抗通胀主题主要考验基金经理的选股,择时能力。
 





 
 
 
同为投资标的为科技互联网的国富全球科技互联和富国全球科技互联,名字很像,只不过是两个基金公司发行的基金。不过它俩最近三年的收益率差距很大,国富全球科技互联(006373)最近三年的收益率为32%,而富国全球科技互联(100055)的最近三年的收益率却为-7%, 同为全球科技型股票基金,为何二者差距会有这么大呢?
 
 
 
根据最新的季报信息,二者的规模与持仓比较如下:
 
 
 





 
 
二者都属于小规模基金,规模小于3个亿,而国富全球科技互联(006373)其基金规模更加低于一个亿。国富全球科技互联(006373)的持仓股票占比比富国全球科技互联(100055)要高近20%(79% vs 61%)
 
 
 
而对比一下二者的十大持仓股,黄色标注的为中概股(港股),富国全球科技(100055)十大持仓里有8个中概股。
 
 





 
 
这种情况下,很难躲过中概股的这一轮下跌的。
 
而最近2年的中概股走势你们也是有目共睹的。
 
 





 
 
 
就这样跌跌跌的走势,还想着赚钱? 能保本不亏已经算是人上人了。
 
因此富国全球科技(100055)在评测的这8个海外基金里面,最近3年的收益率是最低的。见最上面的近三年收益率图
 
而这两只海外QDII基金的规模有点小,尤其是国富全球科技互联(006373),当前规模只有8千万,遇到暴跌行情时会有赎回的流动性问题,且有触发低于规定规模(一般3千万)而清盘的风险。
 
 
 
在这8只全球海外基金里,还有一只重仓科技互联网的基金,工银全球精选股票,目前该基金经理为林念。而且它的基金规模接近4个亿,比富国全球科技和国富全球科技互联的规模要大。
 
 
 
其十大持仓股:





工银全球精选股票
 
从上图可以看到该基金的十大持仓里基本囊括了微软谷歌META这种美国优秀互联网企业,也有国内腾讯,台积电这样的互联网,芯片龙头企业。
 
 
 
而该基金从成立到现在,该基金的累计收益率为200%,最大回撤为-28%, 回撤控制得相当不错。对于厌恶风险的朋友,又想投资互联网科技股的朋友可以考虑考虑此基金。





工银全球精选最大回撤
 
如果你想像买国内贵州茅台股票那样的消费品,来对标买入全球范围内类似茅台此类优秀的股票,那么买入跟踪全球的消费指数的基金----易方达标普消费品,是一个很不错的选择。
 
 
 
从它的跟踪标的来看,它的确如茅台一样,在国内看来,持有的都是些奢华的消费品。





易方达标普消费品十大持仓
 
国内百姓日常能买的,这里面也只有耐克了。。。。。
 
这些公司的奢侈品如茅台一样具有很高的溢价,为了维持品牌形象,它们的定价策略是不轻易走降价路线的,况且也不愁卖不出。
 
正如雪球上的主流投资理念,买股票就是买公司;买入易方达标普消费品QDII基金,等于一篮子买入了这些奢侈品公司,何不美哉?
 
 
 
如何选择适合我的QDII基金?
 
先看最近5年每年度的收益率以及近5年的收益率:
 




最近5年的年度收益率
 





5年累计收益
 
石油,黄金,抗通胀类的基金,属于周期性的品种,个人觉得是不能长持的,一旦在上涨周期的冲顶阶段迈入了,很可能就是要被套个几年了。如果一直持有会一直坐过山车;这类基金适合在周期底部开始买入;一般而言,底部要比顶部要好判断的多。有反弹了,可以继续持有,等待上涨周期的到来;而且不能买入过早,不然前期会比较煎熬,比较考验耐心。
 
而医疗和消费是可以长期持有并穿越牛熊的。从最近5年的广发全球医疗和易方达标普消费的每年收益率和近5年总收益率来看,绝大部分年份都不是涨幅最大的,但跌幅也不是最大的,波动不如其他几个科技,石油来的大,但累计收益却是最大的2个。这其实和股票交易的很像,每天上蹿下跳的,实际几年下来可能还是原地踏步甚至倒退。
 
 
 
广发全球医疗成立以来的业绩曲线





广发全球医疗
波动率和最大回撤都要比沪深300低,截止当前的累计收益率为141%,高于沪深300的56%,典型的长牛走势。
 
 
 
虽然石油类QDII具有强周期属性,但作为基金市场上场内外购买渠道里,直接对标全球原油的基金只有华安标普全球石油和广发石油指数,人气更高的华宝油气挂钩的则是上游油气开采的企业,和石油价格相关性比华安石油和广发石油要低不少。原来的银行渠道的可以直接购买的原油宝等高风险产品,因负油价事件已经被暂停了。
 
 
 
华安标普全球石油跟踪的石油指数为标普全球石油指数,其指数走势如下:





标普全球石油指数
从这近10年的走势图,2014-2015的高点在2022年中才被收复。
 
该指数的成分股为全球内石油巨头。





标普全球石油指数成分股
 
 
 
由于跟踪的是石油公司,而非石油本身,且分散买入这些石油公司,所以指数波动要比石油价格要小得多,但也是和油价呈现出强相关关系。
 
2020年5月的负油价事件,把该指数和跟踪它的华安标普全球石油砸了个大坑。但不会像石油期货交割那样亏完本金还要倒亏。毕竟基金持有的石油公司的资产,品牌等各类资源还在。
 
 
 
下图为华安标普全球石油160416场内的月K线图。
 





华安标普全球石油
 
所以华安标普全球石油这种QDII基金是普通投资者参与国际大宗商品最便捷,最简单的方式,没有换汇的繁琐和每年5W美刀的限制,不需要开通复杂的商品期货账户,只要有个雪球账户或支付宝账户就可以直接参与国际原油的交易当中了。
 
 
 
## 总结
 
在这8个全球QDII基金里,如果想参与到当下的chatGPT等AI科技浪潮中,看好AI继续引领全球经济,可以选择科技型QDII基金工银全球精选股票;
 
如果要长持稳妥能有够硬的抵御风险能力的QDII基金,那么可以选择易方达标普消费品和广发全球医疗保健;
 
如果对俄乌战事继续悲观,平时对国际时事战争比较关心,那么可以根据事件预测,适时埋伏华安标普全球石油和诺安全球黄金,做一波事件驱动的短线操作。 查看全部
投资为什么要放眼全球? 看看下图就一目了然。
 
这是过去十几年纳斯达克指数的月K线走势。
 

20230707001.jpg

 
 
去年2022年回调了一年,下跌了33%,而今年截至到今天,已经涨了31%。
 
以前老司机曾经说过,对于纳指的每次回调都是买入的机会。老司机果诚不欺我也!
 
2016年的时候不少大V就在喊美股冲顶风险很大泡沫要破云云之类。再来看看我们那低估的沪深300。
 

20230707002.jpg

 
 
 
最近十五年来的月K线。上涨的时光总是短暂的。如果十多年前山顶位置买的投资者,熬到现在也可能未解套。
 
 
 
怪不得网友们的吐槽
 

mmexport1688745326545-v1.jpg

 
 
 
所以放眼全球,可选标的更为丰富,那投资标的就可以更为分散,篮子里的品种相关性就会越低,那么遭遇系统性风险的概率就越低。好比买了一揽子基于A股的基金,然后A股大盘崩了,覆巢之下无完卵,那一篮子的鸡蛋也碎了。而投资全球基金,就是把鸡蛋装到不同的篮子,甚至不同的车子里。
 
 
 
本期雪球老司基评测选出了8只全球市场主题基金,我们来对其进行评测,来看看各自的风格,哪一只的风格适合你。
 
 
 
本次评测的8个全球基金如下:
 

20230708009.jpg

 
 
其中,易方达标普消费品,广发全球医疗保健,华安标普全球石油,诺安全球黄金这4个基金为跟踪指数型基金,主要考察基金经理对指数跟踪误差的控制能力。
 
工银全球精选股票,国富全球科技互联,富国全球科技互联,银华抗通胀主题主要考验基金经理的选股,择时能力。
 

Screenshotfrom2023-07-0522-04-26.png

 
 
 
同为投资标的为科技互联网的国富全球科技互联和富国全球科技互联,名字很像,只不过是两个基金公司发行的基金。不过它俩最近三年的收益率差距很大,国富全球科技互联(006373)最近三年的收益率为32%,而富国全球科技互联(100055)的最近三年的收益率却为-7%, 同为全球科技型股票基金,为何二者差距会有这么大呢?
 
 
 
根据最新的季报信息,二者的规模与持仓比较如下:
 
 
 

20230708005.jpg

 
 
二者都属于小规模基金,规模小于3个亿,而国富全球科技互联(006373)其基金规模更加低于一个亿。国富全球科技互联(006373)的持仓股票占比比富国全球科技互联(100055)要高近20%(79% vs 61%)
 
 
 
而对比一下二者的十大持仓股,黄色标注的为中概股(港股),富国全球科技(100055)十大持仓里有8个中概股。
 
 

20230708006.jpg

 
 
这种情况下,很难躲过中概股的这一轮下跌的。
 
而最近2年的中概股走势你们也是有目共睹的。
 
 

20230708007.jpg

 
 
 
就这样跌跌跌的走势,还想着赚钱? 能保本不亏已经算是人上人了。
 
因此富国全球科技(100055)在评测的这8个海外基金里面,最近3年的收益率是最低的。见最上面的近三年收益率图
 
而这两只海外QDII基金的规模有点小,尤其是国富全球科技互联(006373),当前规模只有8千万,遇到暴跌行情时会有赎回的流动性问题,且有触发低于规定规模(一般3千万)而清盘的风险。
 
 
 
在这8只全球海外基金里,还有一只重仓科技互联网的基金,工银全球精选股票,目前该基金经理为林念。而且它的基金规模接近4个亿,比富国全球科技和国富全球科技互联的规模要大。
 
 
 
其十大持仓股:

20230708010.jpg

工银全球精选股票
 
从上图可以看到该基金的十大持仓里基本囊括了微软谷歌META这种美国优秀互联网企业,也有国内腾讯,台积电这样的互联网,芯片龙头企业。
 
 
 
而该基金从成立到现在,该基金的累计收益率为200%,最大回撤为-28%, 回撤控制得相当不错。对于厌恶风险的朋友,又想投资互联网科技股的朋友可以考虑考虑此基金。

20230708011-v2.jpg

工银全球精选最大回撤
 
如果你想像买国内贵州茅台股票那样的消费品,来对标买入全球范围内类似茅台此类优秀的股票,那么买入跟踪全球的消费指数的基金----易方达标普消费品,是一个很不错的选择。
 
 
 
从它的跟踪标的来看,它的确如茅台一样,在国内看来,持有的都是些奢华的消费品。

20230708013.jpg

易方达标普消费品十大持仓
 
国内百姓日常能买的,这里面也只有耐克了。。。。。
 
这些公司的奢侈品如茅台一样具有很高的溢价,为了维持品牌形象,它们的定价策略是不轻易走降价路线的,况且也不愁卖不出。
 
正如雪球上的主流投资理念,买股票就是买公司;买入易方达标普消费品QDII基金,等于一篮子买入了这些奢侈品公司,何不美哉?
 
 
 
如何选择适合我的QDII基金?
 
先看最近5年每年度的收益率以及近5年的收益率:
 
20230708016.jpg

最近5年的年度收益率
 

20230708017.jpg

5年累计收益
 
石油,黄金,抗通胀类的基金,属于周期性的品种,个人觉得是不能长持的,一旦在上涨周期的冲顶阶段迈入了,很可能就是要被套个几年了。如果一直持有会一直坐过山车;这类基金适合在周期底部开始买入;一般而言,底部要比顶部要好判断的多。有反弹了,可以继续持有,等待上涨周期的到来;而且不能买入过早,不然前期会比较煎熬,比较考验耐心。
 
而医疗和消费是可以长期持有并穿越牛熊的。从最近5年的广发全球医疗和易方达标普消费的每年收益率和近5年总收益率来看,绝大部分年份都不是涨幅最大的,但跌幅也不是最大的,波动不如其他几个科技,石油来的大,但累计收益却是最大的2个。这其实和股票交易的很像,每天上蹿下跳的,实际几年下来可能还是原地踏步甚至倒退。
 
 
 
广发全球医疗成立以来的业绩曲线

20230709006.jpg

广发全球医疗
波动率和最大回撤都要比沪深300低,截止当前的累计收益率为141%,高于沪深300的56%,典型的长牛走势。
 
 
 
虽然石油类QDII具有强周期属性,但作为基金市场上场内外购买渠道里,直接对标全球原油的基金只有华安标普全球石油和广发石油指数,人气更高的华宝油气挂钩的则是上游油气开采的企业,和石油价格相关性比华安石油和广发石油要低不少。原来的银行渠道的可以直接购买的原油宝等高风险产品,因负油价事件已经被暂停了。
 
 
 
华安标普全球石油跟踪的石油指数为标普全球石油指数,其指数走势如下:

20230709003.jpg

标普全球石油指数
从这近10年的走势图,2014-2015的高点在2022年中才被收复。
 
该指数的成分股为全球内石油巨头。

20230709005.jpg

标普全球石油指数成分股
 
 
 
由于跟踪的是石油公司,而非石油本身,且分散买入这些石油公司,所以指数波动要比石油价格要小得多,但也是和油价呈现出强相关关系。
 
2020年5月的负油价事件,把该指数和跟踪它的华安标普全球石油砸了个大坑。但不会像石油期货交割那样亏完本金还要倒亏。毕竟基金持有的石油公司的资产,品牌等各类资源还在。
 
 
 
下图为华安标普全球石油160416场内的月K线图。
 

20230709004.jpg

华安标普全球石油
 
所以华安标普全球石油这种QDII基金是普通投资者参与国际大宗商品最便捷,最简单的方式,没有换汇的繁琐和每年5W美刀的限制,不需要开通复杂的商品期货账户,只要有个雪球账户或支付宝账户就可以直接参与国际原油的交易当中了。
 
 
 
## 总结
 
在这8个全球QDII基金里,如果想参与到当下的chatGPT等AI科技浪潮中,看好AI继续引领全球经济,可以选择科技型QDII基金工银全球精选股票;
 
如果要长持稳妥能有够硬的抵御风险能力的QDII基金,那么可以选择易方达标普消费品和广发全球医疗保健;
 
如果对俄乌战事继续悲观,平时对国际时事战争比较关心,那么可以根据事件预测,适时埋伏华安标普全球石油和诺安全球黄金,做一波事件驱动的短线操作。

Ptrade几个order下单接口 order_target order_value order_target_value order_market的不同

Ptrade李魔佛 发表了文章 • 0 个评论 • 1099 次浏览 • 2023-07-10 02:23 • 来自相关话题

接口文档:
https://ptradeapi.com
 





 
注意:大部分函数自适用于交易模块,回测模式不支持部分order函数。
 order_target :
接口通过持仓数量比较将入参的目标数量转换成需要交易的成交,传入 order
接口
 
order_value:
 接口通过 金额/限价 或者 金额/默认最新价 两种方式转换成需要交易的数量,
传入 order 接口
 
order_target_value:
 接口通过持仓金额比较得到需要交易的金额, 金额/限价 或者 金额/默
认最新价 两种方式转换成需要交易的数量,传入 order 接口
 
order 接口:
一、
先判断 limit_price 是否传入,传入则用传入价格限价,不传入则最新价代替,都是
限价方式报单。

二、
判断隔夜单和交易时间,交易时间(9:10(系统可配)~15:00)范围的订单会马上
加入未处理订单队列,其他订单先放到一个队列,等时间到交易时间就放到未处理订单
队列

三、
未处理订单队列的订单会进行限价判断,如果没有传入限价就按当前最新价处理,
然后报柜台。

order_market 接口:
一、
按照传入的 market_type 参数,市价委托方式报单。

二、
判断隔夜单和交易时间,交易时间(9:10(系统可配)~15:00)范围的订单会马上
加入未处理订单队列,其他订单先放到一个队列,等时间到交易时间就翻到未处理订单
队列

三、
未处理订单队列的订单会进行限价判断,如果没有传入限价就按当前最新价处理,
之后买单和卖单处理有所不同,买单直接报柜台,卖单会校验持仓最大可卖然后调整数
量再报柜台。

tick_order:
一、
先判断 limit_price 是否传入,传入则用传入价格限价,不传入则取档位价格(默
认第一档)
,都是限价方式报单。

二、
直接放到未处理订单队列

三、
未处理订单队列的订单会进行限价判断,如果没有传入限价就按当前最新价处理,
然后报柜台。
 
低门槛入金(2W)开通Ptrade量化API,扫码联系: 查看全部
接口文档:
https://ptradeapi.com
 

20230710002.jpg

 
注意:大部分函数自适用于交易模块,回测模式不支持部分order函数。
 order_target :
接口通过持仓数量比较将入参的目标数量转换成需要交易的成交,传入 order
接口
 
order_value:
 接口通过 金额/限价 或者 金额/默认最新价 两种方式转换成需要交易的数量,
传入 order 接口
 
order_target_value:
 接口通过持仓金额比较得到需要交易的金额, 金额/限价 或者 金额/默
认最新价 两种方式转换成需要交易的数量,传入 order 接口
 
order 接口:
一、
先判断 limit_price 是否传入,传入则用传入价格限价,不传入则最新价代替,都是
限价方式报单。

二、
判断隔夜单和交易时间,交易时间(9:10(系统可配)~15:00)范围的订单会马上
加入未处理订单队列,其他订单先放到一个队列,等时间到交易时间就放到未处理订单
队列

三、
未处理订单队列的订单会进行限价判断,如果没有传入限价就按当前最新价处理,
然后报柜台。

order_market 接口:
一、
按照传入的 market_type 参数,市价委托方式报单。

二、
判断隔夜单和交易时间,交易时间(9:10(系统可配)~15:00)范围的订单会马上
加入未处理订单队列,其他订单先放到一个队列,等时间到交易时间就翻到未处理订单
队列

三、
未处理订单队列的订单会进行限价判断,如果没有传入限价就按当前最新价处理,
之后买单和卖单处理有所不同,买单直接报柜台,卖单会校验持仓最大可卖然后调整数
量再报柜台。

tick_order:
一、
先判断 limit_price 是否传入,传入则用传入价格限价,不传入则取档位价格(默
认第一档)
,都是限价方式报单。

二、
直接放到未处理订单队列

三、
未处理订单队列的订单会进行限价判断,如果没有传入限价就按当前最新价处理,
然后报柜台。
 
低门槛入金(2W)开通Ptrade量化API,扫码联系:

QMT vs PTrade资金更新速度|高频中如何处理

Ptrade李魔佛 发表了文章 • 0 个评论 • 1245 次浏览 • 2023-07-06 17:35 • 来自相关话题

QMT vs PTrade资金更新速度|高频中如何处理

平时在手动交易中,下单委托后,再切换回去持仓页面,可以看到你的可用资金变少了。而在QMT和PTrade里面,却可能会表现得不一样。本文用代码和实盘来作对比。希望本文对量化新手有所帮助,记得收藏哦! 公众号首页链接了视频号,里面也有不少的新手入门教程和进阶教程,欢迎观看。

了解量化交易程序里面的资金更新速度,无论对量化T+0日内交易(可转债,T+0 ETF),还是轮动策略调仓,都是必须的。

Ptrade

以交易逆回购为例,这也便于量化新手也可以实践,可以放心跑,不会亏钱。

代码很简单,每个tick_data行情更新时间(3秒)里打印当前的可用资金。中途买入(借出)逆回购后,看看当面打印的可用资金什么时候发生变化。
 
import datetime

def initialize(context):
# 初始化策略
g.already_run = False

def handle_data(context, data):
pass

def get_available_cash(context):
# 读取变量protfolio里的可用资金的值
return context.portfolio.cash

def current_time():
return datetime.datetime.now().strftime('%H:%M:%S.%f')

def tick_data(context, data):
log.info('可用资金{}'.format(get_available_cash(context)))
if not g.already_run:
g.already_run = True
# 卖出100手 R-001
ret = order_tick('131810.SZ', -10, priceGear='1', limit_price=None)

def on_order_response(context, trade_list):
# 委托回调函数,有委托出现就调用此函数
log.info('已委托下单 {}'.format(current_time()))

放到Ptrade的实盘里执行,得到下面日志








下单前可用资金为17902,程序启动后下单时间在10:41:08,卖出10张R-001,市值1000元;间隔3s后打印可用资金,在10:41:13的时候,可用资金依然是17902,此时时间已经过去了5秒;

在10:41:18打印的时候资产才发生了变化,此时可用资金为16902,此时距离下单时的10:41:08,已经过去了10秒。所以如果在高频下单时,使用读取内置的context.portfolio.cash 来获取可用资金,那就寄了。那是不是意味着Ptrade无法进行高频率的交易了呢?当然不是的,此时可以使用内置的成交主推函数来更新可用资金,后面下面再介绍。

QMT

而qmt的代码如下,把打印的可用资金的操作放到handlebar里面,它和上面的Ptrade作用一样,每隔3s执行一次。
# encoding:gbk
import datetime


ACCOUNT = '你的账户ID'
start = True

def init(ContextInfo):
ContextInfo.set_account(ACCOUNT)

def current_time():
return datetime.datetime.now().strftime('%H:%M:%S.%f')


def get_available_cash(ContextInfo):
acct_info = get_trade_detail_data(ACCOUNT, 'stock', 'account')
return acct_info[0].m_dAvailable


def deal_callback(ContextInfo, dealInfo):
print('before')
print(dealInfo.m_strProductID)
print(dealInfo.m_nDirection)
print(dealInfo.m_dTradeAmount)
print(dealInfo.m_nVolume)
print(dealInfo.m_dPrice)
print('call back --- ')
print(current_time())

def buy_action(ContextInfo):
opType = 24
orderType = 1101
accountID = ACCOUNT
orderCode = '131810.SZ'
prType = 11
price = 1.8
volume = 10
quickTrade = 2
passorder(opType, orderType, accountID, orderCode, prType, price, volume, quickTrade, ContextInfo)

def handlebar(ContextInfo):
global start
if ContextInfo.is_last_bar():

cash = get_available_cash(ContextInfo)
print('{} 可用资金{}'.format(current_time(),cash))
if start:
print('下单逆回购 131810 ')
buy_action(ContextInfo)
start = False
 
部署到QMT实盘后,执行。

得到下面的运行日志:








从上面的日志看出,程序在14:35:11启动,马上使用passorder下单,卖出1000元的R-001,此时时间14:35:12,马上成交了。而可用资金在下单后的0.47秒后,14:35:12,显示少了1000元。此时的资金状态已经被更新了。

所以QMT的资金持仓更新速度要比Ptrade快出不少的,如果不是追求毫秒级别的话,这个速度足够满足大部分的轮动和T+0操作了。

虽然QMT的资金持仓更新很快,但如果你的策略是高频或偏高频运行,比如你这一个时刻刚刚买入,下一个tick来到时就要卖出,或者采用驱动成交型的网格交易,你无法知道挂单是在哪一个时刻成交的,此时也亦不能一直循环读取你的可以资金或者持仓来判断是否成交,因为这样会阻塞QMT无法进行下一步的操作(除非你本身就是一直在等待成交,成交后才进行下程序一步)。

委托、成交回调函数

Ptrade和QMT都有对应的委托成交回调函数,用于应对需要即时获取成交状态的情景下。

接口文档介绍如下 
Ptrade http://ptradeapi.com/#on_trade_response

QMT:http://qmt.ptradeapi.com/QMT_Python_API_Doc.html#deal-callback








里面就说明了,“该函数会在成交主推回调时响应,比引擎和get_trades()函数更新Order状态的速度更快,适合对速度要求比较高的策略。”

Ptrade的部分代码片段如下:
# 交易回调
def on_trade_response(context, trade_list):
# 成交主推
now = context.blotter.current_dt.strftime("%H:%M:%S")

for trade_info in trade_list:
if trade_info['order_id'] == '':
# 不是本策略跳过
log.info('非本策略订单')
continue

code = trade_info['stock_code']
code = post_fix_convert(code)
business_time = trade_info['business_time']
business_amount = trade_info['business_amount'] # 这个是负数,如果卖出
business_price = trade_info['business_price']
g.total_cash -= business_amount # 马上更新资金状态
 
g.total_cash -= business_amount # 马上更新资金状态g.total_cash是一个全局的可用资金, 可以提前设定好,亦可以是开盘前读取一次你的账户可用资金。

每次成交的那一刻,on_trade_response这个函数就会被动触发,在这里就可以简单的更新你的资金状态了。上面的例子是最基础的更新资金。

实际可以使用其他的诸如dict或类对象来更新仓位。








上面代码是把仓位更新放到一个全局dict里面,key是股票代码,value也是一个dict,里面包含交易时间,持仓数目,价格等等。

好了,时间有限,今天的教程就到这里了,码字不易,欢迎点赞+收藏哦~
  查看全部
QMT vs PTrade资金更新速度|高频中如何处理

平时在手动交易中,下单委托后,再切换回去持仓页面,可以看到你的可用资金变少了。而在QMT和PTrade里面,却可能会表现得不一样。本文用代码和实盘来作对比。希望本文对量化新手有所帮助,记得收藏哦! 公众号首页链接了视频号,里面也有不少的新手入门教程和进阶教程,欢迎观看。

了解量化交易程序里面的资金更新速度,无论对量化T+0日内交易(可转债,T+0 ETF),还是轮动策略调仓,都是必须的。

Ptrade

以交易逆回购为例,这也便于量化新手也可以实践,可以放心跑,不会亏钱。

代码很简单,每个tick_data行情更新时间(3秒)里打印当前的可用资金。中途买入(借出)逆回购后,看看当面打印的可用资金什么时候发生变化。
 
import datetime

def initialize(context):
# 初始化策略
g.already_run = False

def handle_data(context, data):
pass

def get_available_cash(context):
# 读取变量protfolio里的可用资金的值
return context.portfolio.cash

def current_time():
return datetime.datetime.now().strftime('%H:%M:%S.%f')

def tick_data(context, data):
log.info('可用资金{}'.format(get_available_cash(context)))
if not g.already_run:
g.already_run = True
# 卖出100手 R-001
ret = order_tick('131810.SZ', -10, priceGear='1', limit_price=None)

def on_order_response(context, trade_list):
# 委托回调函数,有委托出现就调用此函数
log.info('已委托下单 {}'.format(current_time()))


放到Ptrade的实盘里执行,得到下面日志


20230706001.jpg



下单前可用资金为17902,程序启动后下单时间在10:41:08,卖出10张R-001,市值1000元;间隔3s后打印可用资金,在10:41:13的时候,可用资金依然是17902,此时时间已经过去了5秒;

在10:41:18打印的时候资产才发生了变化,此时可用资金为16902,此时距离下单时的10:41:08,已经过去了10秒。所以如果在高频下单时,使用读取内置的context.portfolio.cash 来获取可用资金,那就寄了。那是不是意味着Ptrade无法进行高频率的交易了呢?当然不是的,此时可以使用内置的成交主推函数来更新可用资金,后面下面再介绍。

QMT

而qmt的代码如下,把打印的可用资金的操作放到handlebar里面,它和上面的Ptrade作用一样,每隔3s执行一次。
# encoding:gbk
import datetime


ACCOUNT = '你的账户ID'
start = True

def init(ContextInfo):
ContextInfo.set_account(ACCOUNT)

def current_time():
return datetime.datetime.now().strftime('%H:%M:%S.%f')


def get_available_cash(ContextInfo):
acct_info = get_trade_detail_data(ACCOUNT, 'stock', 'account')
return acct_info[0].m_dAvailable


def deal_callback(ContextInfo, dealInfo):
print('before')
print(dealInfo.m_strProductID)
print(dealInfo.m_nDirection)
print(dealInfo.m_dTradeAmount)
print(dealInfo.m_nVolume)
print(dealInfo.m_dPrice)
print('call back --- ')
print(current_time())

def buy_action(ContextInfo):
opType = 24
orderType = 1101
accountID = ACCOUNT
orderCode = '131810.SZ'
prType = 11
price = 1.8
volume = 10
quickTrade = 2
passorder(opType, orderType, accountID, orderCode, prType, price, volume, quickTrade, ContextInfo)

def handlebar(ContextInfo):
global start
if ContextInfo.is_last_bar():

cash = get_available_cash(ContextInfo)
print('{} 可用资金{}'.format(current_time(),cash))
if start:
print('下单逆回购 131810 ')
buy_action(ContextInfo)
start = False

 
部署到QMT实盘后,执行。

得到下面的运行日志:


20230705001.jpg



从上面的日志看出,程序在14:35:11启动,马上使用passorder下单,卖出1000元的R-001,此时时间14:35:12,马上成交了。而可用资金在下单后的0.47秒后,14:35:12,显示少了1000元。此时的资金状态已经被更新了。

所以QMT的资金持仓更新速度要比Ptrade快出不少的,如果不是追求毫秒级别的话,这个速度足够满足大部分的轮动和T+0操作了。

虽然QMT的资金持仓更新很快,但如果你的策略是高频或偏高频运行,比如你这一个时刻刚刚买入,下一个tick来到时就要卖出,或者采用驱动成交型的网格交易,你无法知道挂单是在哪一个时刻成交的,此时也亦不能一直循环读取你的可以资金或者持仓来判断是否成交,因为这样会阻塞QMT无法进行下一步的操作(除非你本身就是一直在等待成交,成交后才进行下程序一步)。

委托、成交回调函数

Ptrade和QMT都有对应的委托成交回调函数,用于应对需要即时获取成交状态的情景下。

接口文档介绍如下 
Ptrade http://ptradeapi.com/#on_trade_response

QMT:http://qmt.ptradeapi.com/QMT_Python_API_Doc.html#deal-callback


20230706002.jpg



里面就说明了,“该函数会在成交主推回调时响应,比引擎和get_trades()函数更新Order状态的速度更快,适合对速度要求比较高的策略。”

Ptrade的部分代码片段如下:
# 交易回调
def on_trade_response(context, trade_list):
# 成交主推
now = context.blotter.current_dt.strftime("%H:%M:%S")

for trade_info in trade_list:
if trade_info['order_id'] == '':
# 不是本策略跳过
log.info('非本策略订单')
continue

code = trade_info['stock_code']
code = post_fix_convert(code)
business_time = trade_info['business_time']
business_amount = trade_info['business_amount'] # 这个是负数,如果卖出
business_price = trade_info['business_price']
g.total_cash -= business_amount # 马上更新资金状态

 
g.total_cash -= business_amount # 马上更新资金状态g.total_cash是一个全局的可用资金, 可以提前设定好,亦可以是开盘前读取一次你的账户可用资金。

每次成交的那一刻,on_trade_response这个函数就会被动触发,在这里就可以简单的更新你的资金状态了。上面的例子是最基础的更新资金。

实际可以使用其他的诸如dict或类对象来更新仓位。


20230706003.jpg



上面代码是把仓位更新放到一个全局dict里面,key是股票代码,value也是一个dict,里面包含交易时间,持仓数目,价格等等。

好了,时间有限,今天的教程就到这里了,码字不易,欢迎点赞+收藏哦~
 

目前支持量化接口的万一免五的券商有哪些?

量化交易-Ptrade-QMT李魔佛 发表了文章 • 0 个评论 • 2517 次浏览 • 2023-07-04 22:52 • 来自相关话题

支持量化交易的券商如下:




 
其中能够股票免五的有国金证券,国盛证券,国信证券,安信证券。
 
其中,国金证券,国盛证券支持QMT、MiniQMT、Ptrade。
 
国信证券,安信证券支持QMT。
 
东莞证券支持Ptrade
 
可转债默认免五。
 





 
开户后可加入量化技术交流群,可获得编程技术指导。
【提问者需要把问题描述清楚即可,PS: 有些人动不动就说:“Ptrade不行呀”,“QMT垃圾呀”,结果让他贴代码上来瞅瞅,是他本身代码写的拉垮,目前贴出来的已知的问题,90%是个人代码问题。】
 
扫码添加微信咨询开户:

  查看全部
支持量化交易的券商如下:
20230704002.jpg

 
其中能够股票免五的有国金证券,国盛证券,国信证券,安信证券。
 
其中,国金证券,国盛证券支持QMT、MiniQMT、Ptrade。
 
国信证券,安信证券支持QMT。
 
东莞证券支持Ptrade
 
可转债默认免五。
 

20230704003.jpg

 
开户后可加入量化技术交流群,可获得编程技术指导。
【提问者需要把问题描述清楚即可,PS: 有些人动不动就说:“Ptrade不行呀”,“QMT垃圾呀”,结果让他贴代码上来瞅瞅,是他本身代码写的拉垮,目前贴出来的已知的问题,90%是个人代码问题。】
 
扫码添加微信咨询开户:

 

Ptrade/QMT 可转债转股操作 python代码

量化交易李魔佛 发表了文章 • 0 个评论 • 1654 次浏览 • 2023-06-19 18:14 • 来自相关话题

如果想进行折价套利(裸套),需要对持有的转债进行转股操作。
 
而这个转股操作是要在交易时间,也就是盘中时间下一个债转股的命令,然后盘后交易所会更会你盘中下的转股指令,将对应的可转债转为对应的股票,这是,持仓里面的可转债会消失,变成该可转债对应的正股。
 
(当然这是在全部转股的前提下的情况,也有可能有部分人转债只转一部分,这样持仓里面还仍然会有部分可转债没有被转为股票)
 
那么在Ptrade和QMT里面,如何调用API接口进行可转债转股呢?
 
Ptrade:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)

def before_trading_start(context, data):
g.count = 0

def handle_data(context, data):
if g.count == 0:
# 对持仓内的贝斯进行转股操作
debt_to_stock_order("123075.SZ", -1000)
g.count += 1
# 查看委托状态
log.info(get_orders())
g.count += 1
 主要是上面的函数, 
debt_to_stock_order 传入可转债代码和转股的数量,注意数量用加一个负号。
 
 
QMT可转债转股操作
#coding:gbk
c = True
account = '11111111' # 个人账户
def init(ContextInfo):
pass

def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
#历史k线不应该发出实盘信号 跳过
return

if c:
passorder(80,1101,account,s,5,0,-100,'1',2,'tzbz',ContextInfo)
c=False

 passorder 里面的 80是 普通账户可转债转股
 
更多Ptrade,qmt知识,可以关注公众号

 
  查看全部
如果想进行折价套利(裸套),需要对持有的转债进行转股操作。
 
而这个转股操作是要在交易时间,也就是盘中时间下一个债转股的命令,然后盘后交易所会更会你盘中下的转股指令,将对应的可转债转为对应的股票,这是,持仓里面的可转债会消失,变成该可转债对应的正股。
 
(当然这是在全部转股的前提下的情况,也有可能有部分人转债只转一部分,这样持仓里面还仍然会有部分可转债没有被转为股票)
 
那么在Ptrade和QMT里面,如何调用API接口进行可转债转股呢?
 
Ptrade:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)

def before_trading_start(context, data):
g.count = 0

def handle_data(context, data):
if g.count == 0:
# 对持仓内的贝斯进行转股操作
debt_to_stock_order("123075.SZ", -1000)
g.count += 1
# 查看委托状态
log.info(get_orders())
g.count += 1

 主要是上面的函数, 
debt_to_stock_order 传入可转债代码和转股的数量,注意数量用加一个负号。
 
 
QMT可转债转股操作
#coding:gbk
c = True
account = '11111111' # 个人账户
def init(ContextInfo):
pass

def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
#历史k线不应该发出实盘信号 跳过
return

if c:
passorder(80,1101,account,s,5,0,-100,'1',2,'tzbz',ContextInfo)
c=False

 passorder 里面的 80是 普通账户可转债转股
 
更多Ptrade,qmt知识,可以关注公众号

 
 

宁稳可转债全表数据 - 历史数据更新至2023年06-18日

可转债李魔佛 发表了文章 • 0 个评论 • 1250 次浏览 • 2023-06-19 11:16 • 来自相关话题

包含全字段:
转债代码  转债名称  满足  发行日期  股票代码  股票名称  行业  子行业  转债价格  本息  涨跌  日内套利  股价  正股涨跌  剩余本息  转股价格  转股溢价率  转股价值  距离转股日  剩余年限  回售年限  剩余余额  成交额(百万)  转债换手率 余额/市值  余额/股本  股票市值(亿)  P/B 税前收益率  税后收益率  税前回售收益  税后回售收益 回售价值 纯债价值 弹性 信用 折现率 老式双低 老式排名 新式双低 新式排名 热门度





点击查看大图





点击查看大图
 
数据会定期更新,目前更新到本文发文日期,2023-06-18
  查看全部
包含全字段:
转债代码  转债名称  满足  发行日期  股票代码  股票名称  行业  子行业  转债价格  本息  涨跌  日内套利  股价  正股涨跌  剩余本息  转股价格  转股溢价率  转股价值  距离转股日  剩余年限  回售年限  剩余余额  成交额(百万)  转债换手率 余额/市值  余额/股本  股票市值(亿)  P/B 税前收益率  税后收益率  税前回售收益  税后回售收益 回售价值 纯债价值 弹性 信用 折现率 老式双低 老式排名 新式双低 新式排名 热门度

20230619002.jpg

点击查看大图

20230619001-v2.jpg

点击查看大图
 
数据会定期更新,目前更新到本文发文日期,2023-06-18
 

高效操作!linux在终端里快速跳转到文件管理器对应的目录下

Linux马化云 发表了文章 • 0 个评论 • 982 次浏览 • 2023-06-15 19:34 • 来自相关话题

在linux下,可能会有一个经常的操作,是在终端下,进入某个文件夹,用vim修改了某些操作,比如修改了一个html文件;


然后你想用chrome打开这个html文件,那么你可能需要打开文件管理器,切换到上述路径,选中上述修改的html文件。

(具体可以参考vs code的打开方式, cd 到某个目录, 然后运行: "code . " 然后就可以直接用vs code打开当前目录 )

你可以使用以下命令在Linux终端中打开文件浏览器并将其设置为当前目录:

- GNOME桌面环境:在终端中输入 `nautilus .`,即可在当前目录下打开Nautilus文件管理器。
- KDE桌面环境:在终端中输入 `dolphin .`,即可在当前目录下打开Dolphin文件管理器。
- Xfce桌面环境:在终端中输入 `thunar .`,即可在当前目录下打开Thunar文件管理器。
- LXDE桌面环境:在终端中输入 `pcmanfm .`,即可在当前目录下打开PCManFM文件管理器。



这些命令都会在当前目录下启动相应的文件管理器,以便您进行文件操作。



当然,手动敲那么多字也是挺累的。

### 如何自动化?

可以做成别名写到启动环境里面vim ~/.bashrc在这个文件里面的最后一行

加入对应的语句alias here="nautilus ."

以后只要你在终端下面输入 here
那么就会自动打开文件管理器,然后文件管理器的路径和你的终端路径一样。这样很方便吧? 查看全部
在linux下,可能会有一个经常的操作,是在终端下,进入某个文件夹,用vim修改了某些操作,比如修改了一个html文件;


然后你想用chrome打开这个html文件,那么你可能需要打开文件管理器,切换到上述路径,选中上述修改的html文件。

(具体可以参考vs code的打开方式, cd 到某个目录, 然后运行: "code . " 然后就可以直接用vs code打开当前目录 )

你可以使用以下命令在Linux终端中打开文件浏览器并将其设置为当前目录:

- GNOME桌面环境:在终端中输入 `nautilus .`,即可在当前目录下打开Nautilus文件管理器。
- KDE桌面环境:在终端中输入 `dolphin .`,即可在当前目录下打开Dolphin文件管理器。
- Xfce桌面环境:在终端中输入 `thunar .`,即可在当前目录下打开Thunar文件管理器。
- LXDE桌面环境:在终端中输入 `pcmanfm .`,即可在当前目录下打开PCManFM文件管理器。



这些命令都会在当前目录下启动相应的文件管理器,以便您进行文件操作。



当然,手动敲那么多字也是挺累的。

### 如何自动化?

可以做成别名写到启动环境里面
vim ~/.bashrc
在这个文件里面的最后一行

加入对应的语句
alias here="nautilus ."


以后只要你在终端下面输入 
here

那么就会自动打开文件管理器,然后文件管理器的路径和你的终端路径一样。这样很方便吧?

国盛Ptrade又可以重新开了,需要的小伙伴抓紧开啦

Ptrade李魔佛 发表了文章 • 0 个评论 • 1398 次浏览 • 2023-06-14 11:34 • 来自相关话题

作为目前为止,唯一一个可以和外部通讯的Ptrade券商,之前因为账户号码耗尽的原因,暂停了开通Ptrade的业务。
而目前又可以重新开启这个量化业务了。
 
如果不太懂的小伙伴,笔者这里可以稍加详细解释。
这里的外网,指的外部网络,相对券商部署的服务器内网而言的,并不是指墙外的网络哈,这里小伙伴们注意一下哈。
 
 在大部分券商里,Ptrade是封闭环境下运行的,Ptrade是在券商的内部服务器上执行,所以它无法把数据传出外部的服务器,同样也不能访问外面服务器的数据。比如我想获取同花顺的热门概念,由于Ptrade无法访问外部网络,如果内置的Ptrade数据没有提供,就没有办法了。或者用Ptrade想要搞点可转债溢价率,规模的数据,如果没办法联通外网,实际你的策略就无法下手,因为基础数据已经缺乏了。
 
好在国盛的Ptrade支持外网联通,可以用爬虫的方式,读取mysql的方式,读取MQ队列的方式的等等获取外部数据,弥补内置数据的不足。
 
具体可以看这个文章:
http://30daydo.com/article/44453
 
比如下面代码是在ptrade里面访问百度的:
 
import requests

def initialize(context):
# 初始化策略
g.security = "600570.SS"
set_universe(g.security)


def handle_data(context, data):

url='http://www.baidu.com'
headers={'User-Agent':'Google'}
try:
r=requests.get(url,headers=headers)
r.encoding='utf8'
print(r.text)
except Exception as e:
print('error')
print(e)

 
可以看到能够使用requests这个库正常获取数据的,当然requests库是ptrade本身就有的,不需要你再pip安装,当然ptrade也无法pip安装第三方库。
 
ptrade支持的内置库名单:
http://www.30daydo.com/article/44458
 
APScheduler (3.3.1)
arch (3.2)
bcolz (1.2.1)
beautifulsoup4 (4.6.0)
bleach (1.5.0)
boto (2.43.0)
Bottleneck (1.0.0)
bz2file (0.98)
cachetools (3.1.0)
click (4.0)
contextlib2 (0.4.0)
crypto (1.4.1)
cvxopt (1.1.8)
cx-Oracle (8.0.1)
cycler (0.10.0)
cyordereddict (0.2.2)
Cython (0.22.1)
decorator (4.0.10)
entrypoints (0.2.2)
fastcache (1.0.2)
gensim (0.13.3)
h5py (2.6.0)
hmmlearn (0.2.0)
hs-udata (0.3.6)
html5lib (0.9999999)
ipykernel (4.5.0)
ipython (5.1.0)
ipython-genutils (0.1.0)
ipywidgets (5.2.2)
jieba (0.38)
Jinja2 (2.8)
jsonpickle (1.0)
jsonschema (2.5.1)
jupyter (1.0.0)
jupyter-client (4.4.0)
jupyter-console (5.0.0)
jupyter-core (4.2.0)
jupyter-kernel-gateway (1.1.1)
Keras (2.3.1)
Keras-Applications (1.0.8)
Keras-Preprocessing (1.1.0)
line-profiler (2.1.2)
Logbook (1.4.3)
lxml (4.5.0)
Markdown (2.2.0)
MarkupSafe (0.23)
matplotlib (1.5.3)
mistune (0.7.3)
Naked (0.1.31)
nbconvert (4.2.0)
nbformat (4.1.0)
networkx (1.9.1)
nose (1.3.6)
notebook (4.2.3)
numexpr (2.6.1)
numpy (1.11.2)
pandas (0.23.4)
patsy (0.4.0)
pexpect (4.2.1)
pickleshare (0.7.4)
pip (9.0.1)
pkgconfig (1.0.0)
prompt-toolkit (1.0.8)
protobuf (3.3.0)
ptvsd (2.2.0)
ptyprocess (0.5.1)
PyBrain (0.3)
pycrypto (2.6.1)
Pygments (2.1.3)
PyMySQL (0.9.3)
pyparsing (2.1.10)
python-dateutil (2.7.5)
pytz (2015.4)
PyWavelets (0.4.0)
PyYAML (5.3.1)
pyzmq (16.1.0.dev0)
qtconsole (4.2.1)
requests (2.7.0)
retrying (1.3.3)
scikit-learn (0.18)
scipy (0.18.0)
seaborn (0.7.1)
setuptools (28.7.1)
setuptools-scm (3.1.0)
shellescape (3.4.1)
simplegeneric (0.8.1)
simplejson (3.17.0)
six (1.10.0)
sklearn (0.0)
smart-open (1.3.5)
SQLAlchemy (1.0.8)
statsmodels (0.10.2)
TA-Lib (0.4.10)
tables (3.3.0)
tabulate (0.7.5)
tensorflow (1.3.0rc1)
tensorflow-tensorboard (0.1.2)
terminado (0.6)
Theano (0.8.2)
toolz (0.7.4)
tornado (4.4.2)
traitlets (4.3.1)
tushare (1.2.48)
tzlocal (1.3)
wcwidth (0.1.7)
Werkzeug (0.12.2)
wheel (0.29.0)
widgetsnbextension (1.2.6)
xcsc-tushare (1.0.0)
xgboost (0.6a2)
xlrd (1.1.0)
xlwt (1.3.0)
zipline (0.8.3)
You are using pip version 9.0.1, however version 22.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
需要开户可以关注微信公众号
费率优惠多多(万一免五)

后台回复:ptrade开通
 
 
  查看全部
作为目前为止,唯一一个可以和外部通讯的Ptrade券商,之前因为账户号码耗尽的原因,暂停了开通Ptrade的业务。
而目前又可以重新开启这个量化业务了。
 
如果不太懂的小伙伴,笔者这里可以稍加详细解释。
这里的外网,指的外部网络,相对券商部署的服务器内网而言的,并不是指墙外的网络哈,这里小伙伴们注意一下哈。
 
 在大部分券商里,Ptrade是封闭环境下运行的,Ptrade是在券商的内部服务器上执行,所以它无法把数据传出外部的服务器,同样也不能访问外面服务器的数据。比如我想获取同花顺的热门概念,由于Ptrade无法访问外部网络,如果内置的Ptrade数据没有提供,就没有办法了。或者用Ptrade想要搞点可转债溢价率,规模的数据,如果没办法联通外网,实际你的策略就无法下手,因为基础数据已经缺乏了。
 
好在国盛的Ptrade支持外网联通,可以用爬虫的方式,读取mysql的方式,读取MQ队列的方式的等等获取外部数据,弥补内置数据的不足。
 
具体可以看这个文章:
http://30daydo.com/article/44453
 
比如下面代码是在ptrade里面访问百度的:
 
import requests

def initialize(context):
# 初始化策略
g.security = "600570.SS"
set_universe(g.security)


def handle_data(context, data):

url='http://www.baidu.com'
headers={'User-Agent':'Google'}
try:
r=requests.get(url,headers=headers)
r.encoding='utf8'
print(r.text)
except Exception as e:
print('error')
print(e)


 
可以看到能够使用requests这个库正常获取数据的,当然requests库是ptrade本身就有的,不需要你再pip安装,当然ptrade也无法pip安装第三方库。
 
ptrade支持的内置库名单:
http://www.30daydo.com/article/44458
 
APScheduler (3.3.1)
arch (3.2)
bcolz (1.2.1)
beautifulsoup4 (4.6.0)
bleach (1.5.0)
boto (2.43.0)
Bottleneck (1.0.0)
bz2file (0.98)
cachetools (3.1.0)
click (4.0)
contextlib2 (0.4.0)
crypto (1.4.1)
cvxopt (1.1.8)
cx-Oracle (8.0.1)
cycler (0.10.0)
cyordereddict (0.2.2)
Cython (0.22.1)
decorator (4.0.10)
entrypoints (0.2.2)
fastcache (1.0.2)
gensim (0.13.3)
h5py (2.6.0)
hmmlearn (0.2.0)
hs-udata (0.3.6)
html5lib (0.9999999)
ipykernel (4.5.0)
ipython (5.1.0)
ipython-genutils (0.1.0)
ipywidgets (5.2.2)
jieba (0.38)
Jinja2 (2.8)
jsonpickle (1.0)
jsonschema (2.5.1)
jupyter (1.0.0)
jupyter-client (4.4.0)
jupyter-console (5.0.0)
jupyter-core (4.2.0)
jupyter-kernel-gateway (1.1.1)
Keras (2.3.1)
Keras-Applications (1.0.8)
Keras-Preprocessing (1.1.0)
line-profiler (2.1.2)
Logbook (1.4.3)
lxml (4.5.0)
Markdown (2.2.0)
MarkupSafe (0.23)
matplotlib (1.5.3)
mistune (0.7.3)
Naked (0.1.31)
nbconvert (4.2.0)
nbformat (4.1.0)
networkx (1.9.1)
nose (1.3.6)
notebook (4.2.3)
numexpr (2.6.1)
numpy (1.11.2)
pandas (0.23.4)
patsy (0.4.0)
pexpect (4.2.1)
pickleshare (0.7.4)
pip (9.0.1)
pkgconfig (1.0.0)
prompt-toolkit (1.0.8)
protobuf (3.3.0)
ptvsd (2.2.0)
ptyprocess (0.5.1)
PyBrain (0.3)
pycrypto (2.6.1)
Pygments (2.1.3)
PyMySQL (0.9.3)
pyparsing (2.1.10)
python-dateutil (2.7.5)
pytz (2015.4)
PyWavelets (0.4.0)
PyYAML (5.3.1)
pyzmq (16.1.0.dev0)
qtconsole (4.2.1)
requests (2.7.0)
retrying (1.3.3)
scikit-learn (0.18)
scipy (0.18.0)
seaborn (0.7.1)
setuptools (28.7.1)
setuptools-scm (3.1.0)
shellescape (3.4.1)
simplegeneric (0.8.1)
simplejson (3.17.0)
six (1.10.0)
sklearn (0.0)
smart-open (1.3.5)
SQLAlchemy (1.0.8)
statsmodels (0.10.2)
TA-Lib (0.4.10)
tables (3.3.0)
tabulate (0.7.5)
tensorflow (1.3.0rc1)
tensorflow-tensorboard (0.1.2)
terminado (0.6)
Theano (0.8.2)
toolz (0.7.4)
tornado (4.4.2)
traitlets (4.3.1)
tushare (1.2.48)
tzlocal (1.3)
wcwidth (0.1.7)
Werkzeug (0.12.2)
wheel (0.29.0)
widgetsnbextension (1.2.6)
xcsc-tushare (1.0.0)
xgboost (0.6a2)
xlrd (1.1.0)
xlwt (1.3.0)
zipline (0.8.3)
You are using pip version 9.0.1, however version 22.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

需要开户可以关注微信公众号
费率优惠多多(万一免五)

后台回复:ptrade开通
 
 
 

ChatGPT开启GPT4不限次数使用插件

深度学习马化云 发表了文章 • 0 个评论 • 1704 次浏览 • 2023-06-07 17:50 • 来自相关话题

ChatGPT开启GPT4不限次数使用插件

一个ChatGPT开启GPT4不限次数使用插件:
ChatGPT开启不限次数的GPT4-Mobile,是一个油猴插件,取自iOS客户端的GPT4模型,
因为目前iOS上的客户端GPT4使用次数没有限制,而这个插件就是利用了这个特性实现的GPT4不限次数使用,
 
不过前提是你也是开通ChatGPT Plus的用户才可以的,不过目前插件无法和ChatGPT增强插件:KeepChatGPT同时启用。
感兴趣的同学可以下载体验。
 





 
 
ChatGPT开启GPT4不限次数使用插件下载

地址:ChatGPT开启不限次数的GPT4-Mobile

其他ChatGPT插件
 
1、ChatGPT增强插件 解决各种报错-KeepChatGPT

2、更多ChatGPT工具资源
  查看全部
ChatGPT开启GPT4不限次数使用插件

一个ChatGPT开启GPT4不限次数使用插件:
ChatGPT开启不限次数的GPT4-Mobile,是一个油猴插件,取自iOS客户端的GPT4模型,
因为目前iOS上的客户端GPT4使用次数没有限制,而这个插件就是利用了这个特性实现的GPT4不限次数使用,
 
不过前提是你也是开通ChatGPT Plus的用户才可以的,不过目前插件无法和ChatGPT增强插件:KeepChatGPT同时启用。
感兴趣的同学可以下载体验。
 

ChatGPT开启GPT4不限次数使用插件-GPT4-Mobile.jpg

 
 
ChatGPT开启GPT4不限次数使用插件下载

地址:ChatGPT开启不限次数的GPT4-Mobile

其他ChatGPT插件
 
1、ChatGPT增强插件 解决各种报错-KeepChatGPT

2、更多ChatGPT工具资源
 

国金证券QMT量化新人培训教程

QMT李魔佛 发表了文章 • 0 个评论 • 3745 次浏览 • 2023-05-29 00:37 • 来自相关话题

最近国金证券邀请了QMT技术人员对内部用户进行了新人培训,并提供视频回放。
视频已经整理放到B站:
https://space.bilibili.com/73827743/channel/seriesdetail?sid=3326385&ctype=0
 
视频目录:
 





 
量化新人用QMT+chat GPT快速上手量化策略(一)QMT基础介绍

量化新人用QMT+chat GPT快速上手量化策略(二)QMT均线盘后选股

量化新人用QMT+chat GPT快速上手量化策略(三)一个基本的回测策略代码

量化新人用QMT+chat GPT快速上手量化策略(四) QMT运行一个策略的整体流程

量化新人用QMT+chat GPT快速上手量化策略(五) 获取股票数据

量化新人用QMT+chat GPT快速上手量化策略(六) tablib计算指标

量化新人用QMT+chat GPT快速上手量化策略(七) 下单代码编写
 
欢迎观看并提出疑问。
 
公众号:可转债量化分析 查看全部
最近国金证券邀请了QMT技术人员对内部用户进行了新人培训,并提供视频回放。
视频已经整理放到B站:
https://space.bilibili.com/73827743/channel/seriesdetail?sid=3326385&ctype=0
 
视频目录:
 

20230529001.jpg

 
量化新人用QMT+chat GPT快速上手量化策略(一)QMT基础介绍

量化新人用QMT+chat GPT快速上手量化策略(二)QMT均线盘后选股

量化新人用QMT+chat GPT快速上手量化策略(三)一个基本的回测策略代码

量化新人用QMT+chat GPT快速上手量化策略(四) QMT运行一个策略的整体流程

量化新人用QMT+chat GPT快速上手量化策略(五) 获取股票数据

量化新人用QMT+chat GPT快速上手量化策略(六) tablib计算指标

量化新人用QMT+chat GPT快速上手量化策略(七) 下单代码编写
 
欢迎观看并提出疑问。
 
公众号:可转债量化分析

akshare 官网地址

量化交易-Ptrade-QMT李魔佛 发表了文章 • 0 个评论 • 3102 次浏览 • 2023-05-25 21:50 • 来自相关话题

https://akshare.xyz/





 
不明白为啥百度前面几页都显示不到akshare的官网。对这个搜索结果实在有点无语。
https://akshare.xyz/

20230525214855705.png

 
不明白为啥百度前面几页都显示不到akshare的官网。对这个搜索结果实在有点无语。

QMT获取实时分笔委托数据用哪个函数?

QMT李魔佛 发表了文章 • 0 个评论 • 1499 次浏览 • 2023-05-24 15:31 • 来自相关话题

.get_market_data 和 get_market_data_ex (第二版)都可以。
 
现在官方更加推荐使用第二版,速度要比第一版的要快,也就是推荐使用  .get_market_data_ex。
 
具体怎么使用呢?
 
def init(ContextInfo):
ContextInfo.run_time('execution', '3nSecond', '2019-10-14 13:20:00',)

def execution(ContextInfo):
if not ContextInfo.is_last_bar():
return
data = ContextInfo.get_market_data_ex(
[], ['123136.SZ'], period='tick'
, start_time='', end_time='', count=1
, dividend_type='follow', fill_data=True
, subscribe=True)
print(data)


def handlebar(ContextInfo):
#计算当前主图的cci
pass上面代码是每个3秒获取一次 城市转债 的分笔/逐笔数据。
 
然后在实盘重运行得到下面的结果:





 
(点击放大)
 
可以拿到分笔委托的价格,委卖1到5,委托量也可以看到,买和卖的5挡数据。
 
更多QMT的知识分享: 查看全部
.get_market_data 和 get_market_data_ex (第二版)都可以。
 
现在官方更加推荐使用第二版,速度要比第一版的要快,也就是推荐使用  .get_market_data_ex。
 
具体怎么使用呢?
 
def init(ContextInfo):
ContextInfo.run_time('execution', '3nSecond', '2019-10-14 13:20:00',)

def execution(ContextInfo):
if not ContextInfo.is_last_bar():
return
data = ContextInfo.get_market_data_ex(
[], ['123136.SZ'], period='tick'
, start_time='', end_time='', count=1
, dividend_type='follow', fill_data=True
, subscribe=True)
print(data)


def handlebar(ContextInfo):
#计算当前主图的cci
pass
上面代码是每个3秒获取一次 城市转债 的分笔/逐笔数据。
 
然后在实盘重运行得到下面的结果:

20230524152638683.png

 
(点击放大)
 
可以拿到分笔委托的价格,委卖1到5,委托量也可以看到,买和卖的5挡数据。
 
更多QMT的知识分享:

QMT委托对象orderInfo的属性以及对应的值

QMT李魔佛 发表了文章 • 0 个评论 • 1479 次浏览 • 2023-05-18 15:43 • 来自相关话题

又得吐槽一次QMT的文档设计与撰写者。纯粹是业余水平+为了完成任务滥竽充数的API接口文档。
 
官网给出了来的oderInfo里面的字段以及简单的介绍(已经简单得不能再简单了,连对应的是什么类型都不写,懒的一笔)
 
m_strAccountID: 资金账号,账号,账号,资金账号

m_strExchangeID: 证券市场

m_strExchangeName: 交易市场

m_strProductID: 品种代码

m_strProductName: 品种名称

m_strInstrumentID: 证券代码

m_strInstrumentName: 证券名称,合约名称

m_strOrderRef: 内部委托号,下单引用等于股票的内部委托号

m_nOrderPriceType: EBrokerPriceType 类型,例如市价单、限价单

m_nDirection: EEntrustBS 类型,操作,多空,期货多空,股票买卖永远是 48,其他的 dir 同理

m_nOffsetFlag: EOffset_Flag_Type类型,买卖/开平,用此字段区分股票买卖,期货开、平仓,期权买卖等

m_nHedgeFlag: EHedge_Flag_Type 类型,投保

m_dLimitPrice: 委托价格,限价单的限价,就是报价

m_nVolumeTotalOriginal: 委托量,最初委托量

m_nOrderSubmitStatus: EEntrustSubmitStatus 类型,报单状态,提交状态,股票中不需要报单状态

m_strOrderSysID: 合同编号,委托号

m_nOrderStatus: EEntrustStatus,委托状态

m_nVolumeTraded: 成交数量,已成交量

m_nVolumeTotal: 委托剩余量,当前总委托量,股票的含义是总委托量减去成交量

m_nErrorID: 状态信息

m_strErrorMsg: 状态信息

m_nTaskId:任务号

m_dFrozenMargin: 冻结金额,冻结保证金

m_dFrozenCommission: 冻结手续费

m_strInsertDate: 委托日期,报单日期

m_strInsertTime: 委托时间

m_dTradedPrice: 成交均价(股票)

m_dCancelAmount: 已撤数量

m_strOptName: 买卖标记,展示委托属性的中文

m_dTradeAmount: 成交金额,成交额,期货 = 均价 * 量 * 合约乘数

m_eEntrustType: EEntrustTypes,委托类别

m_strCancelInfo: 废单原因

m_strUnderCode: 标的证券代码

m_eCoveredFlag: ECoveredFlag,备兑标记 '0' - 非备兑,'1' - 备兑

m_dOrderPriceRMB: 委托价格(人民币),目前用于港股通

m_dTradeAmountRMB: 成交金额(人民币),目前用于港股通

m_dReferenceRate: 汇率,目前用于港股通

m_strCompactNo: 合约编号

m_eCashgroupProp: EXTCompactBrushSource类型,头寸来源

m_dShortOccupedMargin: 预估在途占用保证金,用于期权

m_strXTTrade: 是否是迅投交易

m_strAccountKey: 账号key,唯一区别不同账号的key

m_strRemark:投资备注但我们可以直接使用枚举的方法,把上面的属性和对应的值列出来。
 
attr EBrokerPriceType value <class 'EBrokerPriceType'>
attr ECoveredFlag value <class 'ECoveredFlag'>
attr EEntrustBS value <class 'EEntrustBS'>
attr EEntrustStatus value <class 'EEntrustStatus'>
attr EEntrustSubmitStatus value <class 'EEntrustSubmitStatus'>
attr EEntrustTypes value <class 'EEntrustTypes'>
attr EFutureTradeType value <class 'EFutureTradeType'>
attr EHedge_Flag_Type value <class 'EHedge_Flag_Type'>
attr EOffset_Flag_Type value <class 'EOffset_Flag_Type'>
attr ESideFlag value <class 'ESideFlag'>
attr EXTCompactBrushSource value <class 'EXTCompactBrushSource'>
attr EXTCompactStatus value <class 'EXTCompactStatus'>
attr EXTCompactType value <class 'EXTCompactType'>
attr EXTSloTypeQueryMode value <class 'EXTSloTypeQueryMode'>
attr EXTSubjectsStatus value <class 'EXTSubjectsStatus'>
attr __class__ value <class 'COrderDetail'>
attr __delattr__ value <method-wrapper '__delattr__' of COrderDetail object at 0x000000004AD59A60>
attr __dict__ value {}
attr __dir__ value <built-in method __dir__ of COrderDetail object at 0x000000004AD59A60>
attr __doc__ value None
attr __eq__ value <method-wrapper '__eq__' of COrderDetail object at 0x000000004AD59A60>
attr __format__ value <built-in method __format__ of COrderDetail object at 0x000000004AD59A60>
attr __ge__ value <method-wrapper '__ge__' of COrderDetail object at 0x000000004AD59A60>
attr __getattribute__ value <method-wrapper '__getattribute__' of COrderDetail object at 0x000000004AD59A60>
attr __gt__ value <method-wrapper '__gt__' of COrderDetail object at 0x000000004AD59A60>
attr __hash__ value <method-wrapper '__hash__' of COrderDetail object at 0x000000004AD59A60>
attr __init__ value <bound method __init__ of <COrderDetail object at 0x000000004AD59A60>>
attr __init_subclass__ value <built-in method __init_subclass__ of Boost.Python.class object at 0x0000000044C55368>
attr __instance_size__ value 1088
attr __le__ value <method-wrapper '__le__' of COrderDetail object at 0x000000004AD59A60>
attr __lt__ value <method-wrapper '__lt__' of COrderDetail object at 0x000000004AD59A60>
attr __ne__ value <method-wrapper '__ne__' of COrderDetail object at 0x000000004AD59A60>
attr __new__ value <built-in method __new__ of Boost.Python.class object at 0x000007FEDCF525C0>
attr __reduce__ value <bound method <unnamed Boost.Python function> of <COrderDetail object at 0x000000004AD59A60>>
attr __reduce_ex__ value <built-in method __reduce_ex__ of COrderDetail object at 0x000000004AD59A60>
attr __repr__ value <method-wrapper '__repr__' of COrderDetail object at 0x000000004AD59A60>
attr __setattr__ value <method-wrapper '__setattr__' of COrderDetail object at 0x000000004AD59A60>
attr __sizeof__ value <built-in method __sizeof__ of COrderDetail object at 0x000000004AD59A60>
attr __str__ value <method-wrapper '__str__' of COrderDetail object at 0x000000004AD59A60>
attr __subclasshook__ value <built-in method __subclasshook__ of Boost.Python.class object at 0x0000000044C55368>
attr __weakref__ value None
attr j value j
attr m_bEnable value True
attr m_dCancelAmount value 0.0
attr m_dFrozenCommission value 0.15
attr m_dFrozenMargin value 1000.0
attr m_dLimitPrice value 2.3
具体的获取方式,可以到个人的知识星球获取。
星球也会不定时更新一些QMT常见的坑和问题,也可以提问:





 
 
这里简单介绍一下几个常用的字段:
attr m_nOrderStatus value  50
委托状态: 50代表已报, 注意,这里有个坑, 委托状态会返回2次,一次是先显示49,下一次是显示50,状态从待报-变成已报。 
 
  查看全部
又得吐槽一次QMT的文档设计与撰写者。纯粹是业余水平+为了完成任务滥竽充数的API接口文档。
 
官网给出了来的oderInfo里面的字段以及简单的介绍(已经简单得不能再简单了,连对应的是什么类型都不写,懒的一笔)
 
m_strAccountID: 资金账号,账号,账号,资金账号

m_strExchangeID: 证券市场

m_strExchangeName: 交易市场

m_strProductID: 品种代码

m_strProductName: 品种名称

m_strInstrumentID: 证券代码

m_strInstrumentName: 证券名称,合约名称

m_strOrderRef: 内部委托号,下单引用等于股票的内部委托号

m_nOrderPriceType: EBrokerPriceType 类型,例如市价单、限价单

m_nDirection: EEntrustBS 类型,操作,多空,期货多空,股票买卖永远是 48,其他的 dir 同理

m_nOffsetFlag: EOffset_Flag_Type类型,买卖/开平,用此字段区分股票买卖,期货开、平仓,期权买卖等

m_nHedgeFlag: EHedge_Flag_Type 类型,投保

m_dLimitPrice: 委托价格,限价单的限价,就是报价

m_nVolumeTotalOriginal: 委托量,最初委托量

m_nOrderSubmitStatus: EEntrustSubmitStatus 类型,报单状态,提交状态,股票中不需要报单状态

m_strOrderSysID: 合同编号,委托号

m_nOrderStatus: EEntrustStatus,委托状态

m_nVolumeTraded: 成交数量,已成交量

m_nVolumeTotal: 委托剩余量,当前总委托量,股票的含义是总委托量减去成交量

m_nErrorID: 状态信息

m_strErrorMsg: 状态信息

m_nTaskId:任务号

m_dFrozenMargin: 冻结金额,冻结保证金

m_dFrozenCommission: 冻结手续费

m_strInsertDate: 委托日期,报单日期

m_strInsertTime: 委托时间

m_dTradedPrice: 成交均价(股票)

m_dCancelAmount: 已撤数量

m_strOptName: 买卖标记,展示委托属性的中文

m_dTradeAmount: 成交金额,成交额,期货 = 均价 * 量 * 合约乘数

m_eEntrustType: EEntrustTypes,委托类别

m_strCancelInfo: 废单原因

m_strUnderCode: 标的证券代码

m_eCoveredFlag: ECoveredFlag,备兑标记 '0' - 非备兑,'1' - 备兑

m_dOrderPriceRMB: 委托价格(人民币),目前用于港股通

m_dTradeAmountRMB: 成交金额(人民币),目前用于港股通

m_dReferenceRate: 汇率,目前用于港股通

m_strCompactNo: 合约编号

m_eCashgroupProp: EXTCompactBrushSource类型,头寸来源

m_dShortOccupedMargin: 预估在途占用保证金,用于期权

m_strXTTrade: 是否是迅投交易

m_strAccountKey: 账号key,唯一区别不同账号的key

m_strRemark:投资备注
但我们可以直接使用枚举的方法,把上面的属性和对应的值列出来。
 
attr EBrokerPriceType value  <class 'EBrokerPriceType'>
attr ECoveredFlag value <class 'ECoveredFlag'>
attr EEntrustBS value <class 'EEntrustBS'>
attr EEntrustStatus value <class 'EEntrustStatus'>
attr EEntrustSubmitStatus value <class 'EEntrustSubmitStatus'>
attr EEntrustTypes value <class 'EEntrustTypes'>
attr EFutureTradeType value <class 'EFutureTradeType'>
attr EHedge_Flag_Type value <class 'EHedge_Flag_Type'>
attr EOffset_Flag_Type value <class 'EOffset_Flag_Type'>
attr ESideFlag value <class 'ESideFlag'>
attr EXTCompactBrushSource value <class 'EXTCompactBrushSource'>
attr EXTCompactStatus value <class 'EXTCompactStatus'>
attr EXTCompactType value <class 'EXTCompactType'>
attr EXTSloTypeQueryMode value <class 'EXTSloTypeQueryMode'>
attr EXTSubjectsStatus value <class 'EXTSubjectsStatus'>
attr __class__ value <class 'COrderDetail'>
attr __delattr__ value <method-wrapper '__delattr__' of COrderDetail object at 0x000000004AD59A60>
attr __dict__ value {}
attr __dir__ value <built-in method __dir__ of COrderDetail object at 0x000000004AD59A60>
attr __doc__ value None
attr __eq__ value <method-wrapper '__eq__' of COrderDetail object at 0x000000004AD59A60>
attr __format__ value <built-in method __format__ of COrderDetail object at 0x000000004AD59A60>
attr __ge__ value <method-wrapper '__ge__' of COrderDetail object at 0x000000004AD59A60>
attr __getattribute__ value <method-wrapper '__getattribute__' of COrderDetail object at 0x000000004AD59A60>
attr __gt__ value <method-wrapper '__gt__' of COrderDetail object at 0x000000004AD59A60>
attr __hash__ value <method-wrapper '__hash__' of COrderDetail object at 0x000000004AD59A60>
attr __init__ value <bound method __init__ of <COrderDetail object at 0x000000004AD59A60>>
attr __init_subclass__ value <built-in method __init_subclass__ of Boost.Python.class object at 0x0000000044C55368>
attr __instance_size__ value 1088
attr __le__ value <method-wrapper '__le__' of COrderDetail object at 0x000000004AD59A60>
attr __lt__ value <method-wrapper '__lt__' of COrderDetail object at 0x000000004AD59A60>
attr __ne__ value <method-wrapper '__ne__' of COrderDetail object at 0x000000004AD59A60>
attr __new__ value <built-in method __new__ of Boost.Python.class object at 0x000007FEDCF525C0>
attr __reduce__ value <bound method <unnamed Boost.Python function> of <COrderDetail object at 0x000000004AD59A60>>
attr __reduce_ex__ value <built-in method __reduce_ex__ of COrderDetail object at 0x000000004AD59A60>
attr __repr__ value <method-wrapper '__repr__' of COrderDetail object at 0x000000004AD59A60>
attr __setattr__ value <method-wrapper '__setattr__' of COrderDetail object at 0x000000004AD59A60>
attr __sizeof__ value <built-in method __sizeof__ of COrderDetail object at 0x000000004AD59A60>
attr __str__ value <method-wrapper '__str__' of COrderDetail object at 0x000000004AD59A60>
attr __subclasshook__ value <built-in method __subclasshook__ of Boost.Python.class object at 0x0000000044C55368>
attr __weakref__ value None
attr j value j
attr m_bEnable value True
attr m_dCancelAmount value 0.0
attr m_dFrozenCommission value 0.15
attr m_dFrozenMargin value 1000.0
attr m_dLimitPrice value 2.3

具体的获取方式,可以到个人的知识星球获取。
星球也会不定时更新一些QMT常见的坑和问题,也可以提问:

20230518001.jpg

 
 
这里简单介绍一下几个常用的字段:
attr m_nOrderStatus value  50
委托状态: 50代表已报, 注意,这里有个坑, 委托状态会返回2次,一次是先显示49,下一次是显示50,状态从待报-变成已报。 
 
 

vim配置运行node.js快捷键

Linux马化云 发表了文章 • 0 个评论 • 892 次浏览 • 2023-05-17 11:55 • 来自相关话题

我们知道在vim下可以按下 :!node hello.js

这样的方式来运行nodejs程序,这样就可以不用再开一个窗口去输入命令,运行。
 
不过手动输入那么多,显然是不符合vim的用法的。
那么我们使用一个快捷键定义,把按键次数减少。
 
打开.vimrc
 
加入一行 
nnoremap nr :!node %<CR> 
 
这样就是设置一个快捷键 nr
 
每次在命令行模式下,按下nr,
 
就可以运行当前的node文件了。快捷不?
 
  查看全部
我们知道在vim下可以按下 :!node hello.js

这样的方式来运行nodejs程序,这样就可以不用再开一个窗口去输入命令,运行。
 
不过手动输入那么多,显然是不符合vim的用法的。
那么我们使用一个快捷键定义,把按键次数减少。
 
打开.vimrc
 
加入一行 
nnoremap nr :!node %<CR> 
 
这样就是设置一个快捷键 nr
 
每次在命令行模式下,按下nr,
 
就可以运行当前的node文件了。快捷不?
 
 

技术大佬@haoel 一路走好,RIP

网络李魔佛 发表了文章 • 0 个评论 • 987 次浏览 • 2023-05-16 01:14 • 来自相关话题

Cloudflare上貌似已经访问不了源站,克隆了一个源站( http://rip.30daydo.com )。曾经得到技术大佬的一个邮件回复,给与的技术支持与鼓励,永不忘。
希望技术大佬的文章能够常驻。
 
RIP
走好~ 查看全部

20230516001.jpg

Cloudflare上貌似已经访问不了源站,克隆了一个源站( http://rip.30daydo.com )。曾经得到技术大佬的一个邮件回复,给与的技术支持与鼓励,永不忘。
希望技术大佬的文章能够常驻。
 
RIP
走好~

QMT运行后的历史日志保存在哪个位置?

QMT李魔佛 发表了文章 • 0 个评论 • 1473 次浏览 • 2023-05-11 14:10 • 来自相关话题

如果退出了QMT,那么在当前窗口运行的日志就会跟着消失。
 
PS: 知乎上这位是抄袭我的:
https://zhuanlan.zhihu.com/p/650119640
 
我这里有很多QMT的文章,都是没有原创没有加水印的





 
如果想要找回以前的历史日志,可以到下面的路径寻找;
以国信证券的iquant为例:
 
C:\iquant_gx\userdata\log
 
具体以你的券商路径安装名字为准
 





 
个人的日志输出在文件名:
XtClient_FormulaOutput_20230426 (后面的是日期,具体根据你要查找的时间来找)
 





 
看到没?
上面的日志就是记录当时的策略输出。
 
国信证券iQuant, 万一免五 开户,无门槛开通,
需要的可以联系:
可开通miniqmt 查看全部
如果退出了QMT,那么在当前窗口运行的日志就会跟着消失。
 
PS: 知乎上这位是抄袭我的:
https://zhuanlan.zhihu.com/p/650119640
 
我这里有很多QMT的文章,都是没有原创没有加水印的

20230511001.jpg

 
如果想要找回以前的历史日志,可以到下面的路径寻找;
以国信证券的iquant为例:
 
C:\iquant_gx\userdata\log
 
具体以你的券商路径安装名字为准
 

mmexport1683784887096.png

 
个人的日志输出在文件名:
XtClient_FormulaOutput_20230426 (后面的是日期,具体根据你要查找的时间来找)
 

20230511002.jpg

 
看到没?
上面的日志就是记录当时的策略输出。
 
国信证券iQuant, 万一免五 开户,无门槛开通,
需要的可以联系:
可开通miniqmt

拼多多上的台式主机坑真多

Linux李魔佛 发表了文章 • 0 个评论 • 3669 次浏览 • 2023-05-10 16:49 • 来自相关话题

本来想升级下主机,结果下单后才发现一堆深坑。 我觉得可能普通消费者未必能够发现的。这里罗列一下。
(pdd上面的价格虽然价格很低,但是要相信一分价钱一分货)
 
首先是CPU
比如常见的i7 11800H , 11代的i7, 可能性能很炸裂。
可是H后缀的CPU,不是给台式机的! 它是属于笔记本系列的弱鸡CPU! 性能上比同样台式机的要秒飞不少。
 
比如下面的这张图:




 
什么i5 12500H,i7 11800H,都是笔记本CPU。
 
比如11代的i7.
正常上京东的主板+cpu。





价格要3000多。
 
而带H后缀的CPU+主板





 
1500不到,价格比台式机的要腰斩一半哦。
 
然后还有显卡。
有些显卡带有Laptop后缀的。
 
比如这样的。




 
这个显卡的核心 GPU,是Laptop的, 不懂英文的可以百度词典一下, 这个是笔记本的意思,
 
也就是说这个显卡的核心,也是给笔记本的。
 
同样,京东或者pdd上也有卖这样的移动端核心的显卡。3060的laptop版本的显卡,只要1000多。
 
而台式机版本的要2000多。
 
我就说,我在京东上用京东装机,自己搞下来了,无论怎么搞,价格都无法比拼多多的要低,主要是他们的价格还低很多,低到让人怀疑。
  查看全部
本来想升级下主机,结果下单后才发现一堆深坑。 我觉得可能普通消费者未必能够发现的。这里罗列一下。
(pdd上面的价格虽然价格很低,但是要相信一分价钱一分货)
 
首先是CPU
比如常见的i7 11800H , 11代的i7, 可能性能很炸裂。
可是H后缀的CPU,不是给台式机的! 它是属于笔记本系列的弱鸡CPU! 性能上比同样台式机的要秒飞不少。
 
比如下面的这张图:
1683707737121.jpg

 
什么i5 12500H,i7 11800H,都是笔记本CPU。
 
比如11代的i7.
正常上京东的主板+cpu。

20230510002.jpg

价格要3000多。
 
而带H后缀的CPU+主板

20230510003.jpg

 
1500不到,价格比台式机的要腰斩一半哦。
 
然后还有显卡。
有些显卡带有Laptop后缀的。
 
比如这样的。
1683708182688-v2.jpg

 
这个显卡的核心 GPU,是Laptop的, 不懂英文的可以百度词典一下, 这个是笔记本的意思,
 
也就是说这个显卡的核心,也是给笔记本的。
 
同样,京东或者pdd上也有卖这样的移动端核心的显卡。3060的laptop版本的显卡,只要1000多。
 
而台式机版本的要2000多。
 
我就说,我在京东上用京东装机,自己搞下来了,无论怎么搞,价格都无法比拼多多的要低,主要是他们的价格还低很多,低到让人怀疑。
 

用户问的比较多的关于ptrade基础问题

Ptrade李魔佛 发表了文章 • 0 个评论 • 1759 次浏览 • 2023-05-04 01:19 • 来自相关话题

一些星友(星球好友)问的比较多的问题: 
 
1. 国金的Ptrade 实盘交易客户端是无法进行回测的,在任何时间段;
而模拟客户端可以,可以找自己的经理申请一个Ptrade模拟客户端账户; 
 
2. 国盛的Ptrade实盘交易客户端仅在交易时间无法回测,但非交易时间可以回测;
主要是因为实盘回测和交易在同一个服务器,回测占用过多资源会影响实盘交易;模拟客户端没有这个问题;

任何时间段均可以回测; (之前某个券商的ptrade实盘服务器,因为某个用户开了40多个回测策略,一直在后台运行,而且是关于运算密集型的,导致实盘交易的程序也崩溃了)
 
3. 国金Ptrade无法回测星球上面的可转债实盘代码,实盘代码是基于当前的实时数据,用来进行回测没有意义,因为获取不到可转债的历史数据(溢价率,规模等),只有历史的价格数据; 
 
4. 国金Ptrade无法使用星球上的可转债代码进行实盘,因为无法访问外网,无法访问我部署的接口数据; 而国盛的Ptrade可以;如果国金Ptrade需要实盘交易可转债,需要手工上传一些基础数据,Ptrade提供上传功能,具体操作可查找星球相关文章; 
 
5. 在共享的Ptrade模拟试用账户上,不要保留个人代码记录,跑完后记得删除,否则其他共有同一个账户的人可以进去修改复制你的策略和代码;如果是单独的个人模拟账户,则没有这个问题。
  查看全部
一些星友(星球好友)问的比较多的问题: 
 
1. 国金的Ptrade 实盘交易客户端是无法进行回测的,在任何时间段;
而模拟客户端可以,可以找自己的经理申请一个Ptrade模拟客户端账户; 
 
2. 国盛的Ptrade实盘交易客户端仅在交易时间无法回测,但非交易时间可以回测;
主要是因为实盘回测和交易在同一个服务器,回测占用过多资源会影响实盘交易;模拟客户端没有这个问题;

任何时间段均可以回测; (之前某个券商的ptrade实盘服务器,因为某个用户开了40多个回测策略,一直在后台运行,而且是关于运算密集型的,导致实盘交易的程序也崩溃了)
 
3. 国金Ptrade无法回测星球上面的可转债实盘代码,实盘代码是基于当前的实时数据,用来进行回测没有意义,因为获取不到可转债的历史数据(溢价率,规模等),只有历史的价格数据; 
 
4. 国金Ptrade无法使用星球上的可转债代码进行实盘,因为无法访问外网,无法访问我部署的接口数据; 而国盛的Ptrade可以;如果国金Ptrade需要实盘交易可转债,需要手工上传一些基础数据,Ptrade提供上传功能,具体操作可查找星球相关文章; 
 
5. 在共享的Ptrade模拟试用账户上,不要保留个人代码记录,跑完后记得删除,否则其他共有同一个账户的人可以进去修改复制你的策略和代码;如果是单独的个人模拟账户,则没有这个问题。
 

如何下载Ptrade上的数据?

Ptrade李魔佛 发表了文章 • 0 个评论 • 1469 次浏览 • 2023-04-29 02:40 • 来自相关话题

很多菜鸟会觉得不能下载或者上传数据到Ptrade的。

部分券商的Ptrade可以连通外网,只需要部署一个mysql服务器,或者rabbitMQ,就可以快捷的接受数据了。为啥是这两个,而不是mongodb?

因为ptrade内置的pip装好的库就有pymysql和pyzmq,可以配置下就可以直接开箱使用。如果需要开通有外网功能的Ptrade券商,可以关注公众号:可转债量化分析,后台留言:ptrade外网,即可咨询开通。


1. 首先,我们把数据保存到ptrade的服务端,保存方法多样,比如csv,excel,sql文件等,比如df.to_csv, df.to_excel等等。这里要注意一下,保存的路径。需要指定,/home/fly/notebookimport pickle
from collections import defaultdict
NOTEBOOK_PATH = '/home/fly/notebook/'
'''
持仓N日后卖出,仓龄变量每日pickle进行保存,重启策略后可以保证逻辑连贯
'''
def initialize(context):
#尝试启动pickle文件
try:
with open(NOTEBOOK_PATH+'hold_days.pkl','rb') as f:
g.hold_days = pickle.load(f)

2. 文件保存了之后,接着就可以下载了。

   数据在研究的页面那里。







然后点击某个文件,

如果是非纯文本文件,比如excel文件,会显示:Error! not UTF-8 encoded

Saving disable

See console for more details
不用理会,直接点击左上角的文件,下载,选择本地的路径,然后文件就可以下载下来了。 查看全部
很多菜鸟会觉得不能下载或者上传数据到Ptrade的。

部分券商的Ptrade可以连通外网,只需要部署一个mysql服务器,或者rabbitMQ,就可以快捷的接受数据了。为啥是这两个,而不是mongodb?

因为ptrade内置的pip装好的库就有pymysql和pyzmq,可以配置下就可以直接开箱使用。如果需要开通有外网功能的Ptrade券商,可以关注公众号:可转债量化分析,后台留言:ptrade外网,即可咨询开通。


1. 首先,我们把数据保存到ptrade的服务端,保存方法多样,比如csv,excel,sql文件等,比如df.to_csv, df.to_excel等等。这里要注意一下,保存的路径。需要指定,/home/fly/notebook
import pickle
from collections import defaultdict
NOTEBOOK_PATH = '/home/fly/notebook/'
'''
持仓N日后卖出,仓龄变量每日pickle进行保存,重启策略后可以保证逻辑连贯
'''
def initialize(context):
#尝试启动pickle文件
try:
with open(NOTEBOOK_PATH+'hold_days.pkl','rb') as f:
g.hold_days = pickle.load(f)


2. 文件保存了之后,接着就可以下载了。

   数据在研究的页面那里。


20230429001.jpg


然后点击某个文件,

如果是非纯文本文件,比如excel文件,会显示:
Error! not UTF-8 encoded

Saving disable

See console for more details

不用理会,直接点击左上角的文件,下载,选择本地的路径,然后文件就可以下载下来了。

20230429002.jpg

迅投QMT修改编辑器字体大小,4个空格缩进(默认是TAB),背景颜色

QMT李魔佛 发表了文章 • 0 个评论 • 1756 次浏览 • 2023-04-25 12:22 • 来自相关话题

QMT的默认编辑器是非常难用的。字体,大小,颜色,编码,缩进,一言难尽。
 
而且在菜单里面也找不到设置的地方。
 
其实用户是可以修改这个编辑器的配置的。
 
找到QMT的安装目录,找到config文件夹,里面有个editor.xml 的文件,用记事本或者notepad++等文本编辑器打开。
 





 
如果要修改字体大小,可以修改: 
 
  <font FamilyName="Courier New" IsBold="false" size="16"/>
 
把size设置大一点,字体即可变大。
 
如果要把tab缩进改为空格缩进(主流IDE,pycharm vscode都是4个空格缩进的),可以改成下面的
        <font FamilyName="Courier New" IsBold="false" size="20"/>

        <align TabStop="4" AutoIndent="true" IndentationsUseTabs="false" WrapWord="false"/>
 






 
如果需要修改背景色:
同理:
        <color bgcolor="255,255,255"/>
修改这一行,
比如变成黑色背景
        <color bgcolor="0,0,0"/>
 
PS: 上述配置部分券商可以在QMT的IDE上设置,比如字体大小等,而在这个xml里面修改却生效不了
 
改为后记得重启QMT生效
 
公众号后台回复:
qmt配置文件 
可以获取修改为tab缩进的配置文件
  查看全部
QMT的默认编辑器是非常难用的。字体,大小,颜色,编码,缩进,一言难尽。
 
而且在菜单里面也找不到设置的地方。
 
其实用户是可以修改这个编辑器的配置的。
 
找到QMT的安装目录,找到config文件夹,里面有个editor.xml 的文件,用记事本或者notepad++等文本编辑器打开。
 

20230425001.jpg

 
如果要修改字体大小,可以修改: 
 
  <font FamilyName="Courier New" IsBold="false" size="16"/>
 
把size设置大一点,字体即可变大。
 
如果要把tab缩进改为空格缩进(主流IDE,pycharm vscode都是4个空格缩进的),可以改成下面的
        <font FamilyName="Courier New" IsBold="false" size="20"/>

        <align TabStop="4" AutoIndent="true" IndentationsUseTabs="false" WrapWord="false"/>
 

20231012200620.png


 
如果需要修改背景色:
同理:
        <color bgcolor="255,255,255"/>
修改这一行,
比如变成黑色背景
        <color bgcolor="0,0,0"/>
 
PS: 上述配置部分券商可以在QMT的IDE上设置,比如字体大小等,而在这个xml里面修改却生效不了
 
改为后记得重启QMT生效
 
公众号后台回复:
qmt配置文件 
可以获取修改为tab缩进的配置文件
 

QMT vs Ptrade 速度对比 (二)实时行情速度对比

QMT李魔佛 发表了文章 • 0 个评论 • 1729 次浏览 • 2023-04-23 00:33 • 来自相关话题

上一篇文章(QMT vs Ptrade 速度对比 (一) 历史行情获取速度)对了了QMT和Ptrade的获取历史行情速度,本篇文章继续对它俩的实时行情速度。

本文以获取市场所有可转债的实时行情为例子,比较二者的速度。



Ptrade获取所有可转债实时行情

目前市场上有480多只可转债,由于Ptrade内置的数据源不足以支撑可转债的大部分策略,所以需要调用外部数据源,因此使用国盛证券的Ptrade进行交易,因为目前只有它可以链接外网,你可以把可转债的数据写入到数据库或者写成自己的接口,传递给Ptrade就可以了。

比如下面的基础数据接口。



【目前星球用户可以提供数据接口免费调用功能,提供实时数据功能,强赎倒数多个API接口】

然后调用端使用python的requests库请求下就有了。下面代码可以在Ptrade里面部署运行,用于获取可转债溢价率,剩余规模等数据。







然后在Ptrade的定时执行函数里面获取实时tick数据,使用get_snapshot,把所有的转债代码传入get_snapshot就可以拿到可转债的行情数据了,行情数据3秒更新一次。





在Ptrade里面的运行情况



红框的地方是几个时间点要关注的。

481:获取的转债个数有481

红色数字1的位置: time used

获取行情数据所用的时间,大概在17毫秒(ms)左右,数据一直比较稳定。返回的数据里面字段除了价格,还有昨收价,委买卖1队列,涨停价,成交量等多个数据,参考上图里面的那个字典格式的数据。 具体可以参考接口文档(http://ptradeapi.com)

红色数字2的位置:日志输出时候的时间,也就是程序当前所在时刻,在目前程序在14:42:51,红色数字3的时间,是当前价格的里面的时间,也就tick对应的时间,当前的tick时间是hsTimeStamp: 20230419144251000, 也就是 2023-04-19 14:42:51:000, 所以当前时间程序获取的tick时间是一致的。为什么这里要强调这个呢? 假如当前程序时刻是14:42:51, 而获取的tick timestamp数据是14:42:48,那么说明当前程序拿到的最新tick数据却是在48秒时的数据,也就是数据延时了3秒。所以Ptrade里面的tick数据并没有出现延时滞后。



QMT 实时行情

同样QMT提供的可转债基础也是少的可怜,几乎为零。所以同样调用个人部署的可转债接口数据,如法炮制。PS:通过数据解耦的方式,不同数据可以在不同的量化软件里面使用,省去很多重复编写的代码,即使后面接入掘金,聚宽等平台,你只需要编写下单接口逻辑即可。



QMT取实时行情代码如下:








Bond是一个类,和ptrade里面的一样的,用来获取转债基础数据。

同样在QMT的实盘模式下执行:



网络环境:500M宽带网络,PC:CPU I7 - 内存24GB


stock num : 481 同样获取的是481个转债实时行情数据

红色数字1时间:日志输出的当前时间,获取行情数据前的时间14:43:25

红色数字2时间:日志输出的当前时间,此时为已经获取行情数据后的时间:14:43:34

红色数字3:第一次获取行情数据时间差,达到了9.5秒! 这个数字简直惊呆了。 反复测试几次后,依然如此,使用get_market_data获取实时行情数据,第一次数据到达的时候都要挺久的。

新人刚使用这个函数获取实时行情的时候,往往会以为自己代码出bug,等待很久没数据出来,尤其是获取超过1000个股票代码的行情的时候,等待时候更久,等待时间随着输入的个数增加而增加; 同时QMT占用内存也会稳步增加,如果机子的内存太小,可能还会卡死了。(qmt里面的坑还挺多的)









红色数字6,第二次获取实时行情所用的时间,这一次就快很多了,只用了800毫秒。



随着后续运行,获取实时行情的时间就趋于稳定,从800毫秒慢慢降到150毫秒,最后到13-20毫秒,基本和ptrade差不多级别了。











实时行情延时方面,对比通达信








取110048.SH 这个转债的行情数据作为参考,因为QMT返回字段里面没有带tick的时间戳,所以拿通达信作的分时数据作为的对比,没有用L2,所以框住的位置时间约在14:47:03 ~ 14:47:06

图片上半部分通达信的分时数据,左下角的数据时间是14:47:06,所以数据并没有出现很大的延时。



总结

QMT稳定运行的时候,实时行情基本和Ptrade同一级别水平。但QMT的行情波动性大一些。而在初始启动获取数据时,QMT会非常耗费资源,且等待时间较长,而Ptrade则不存在这种问题。

QMT可以随意获取外部数据,所以对券商没有很高要求;而Ptrade目前只有一家券商(国盛证券)可以自由访问外部数据,如果缺少需要的数据或者指标,将无法实现相应的策略。


参考API接口文档:

Ptrade: http://ptradeapi.com/
QMT: http://qmt.ptradeapi.com/

公众号: 查看全部

上一篇文章(QMT vs Ptrade 速度对比 (一) 历史行情获取速度)对了了QMT和Ptrade的获取历史行情速度,本篇文章继续对它俩的实时行情速度。

本文以获取市场所有可转债的实时行情为例子,比较二者的速度。



Ptrade获取所有可转债实时行情

目前市场上有480多只可转债,由于Ptrade内置的数据源不足以支撑可转债的大部分策略,所以需要调用外部数据源,因此使用国盛证券的Ptrade进行交易,因为目前只有它可以链接外网,你可以把可转债的数据写入到数据库或者写成自己的接口,传递给Ptrade就可以了。

比如下面的基础数据接口。



【目前星球用户可以提供数据接口免费调用功能,提供实时数据功能,强赎倒数多个API接口】

然后调用端使用python的requests库请求下就有了。下面代码可以在Ptrade里面部署运行,用于获取可转债溢价率,剩余规模等数据。







然后在Ptrade的定时执行函数里面获取实时tick数据,使用get_snapshot,把所有的转债代码传入get_snapshot就可以拿到可转债的行情数据了,行情数据3秒更新一次。





在Ptrade里面的运行情况



红框的地方是几个时间点要关注的。

481:获取的转债个数有481

红色数字1的位置: time used

获取行情数据所用的时间,大概在17毫秒(ms)左右,数据一直比较稳定。返回的数据里面字段除了价格,还有昨收价,委买卖1队列,涨停价,成交量等多个数据,参考上图里面的那个字典格式的数据。 具体可以参考接口文档(http://ptradeapi.com

红色数字2的位置:日志输出时候的时间,也就是程序当前所在时刻,在目前程序在14:42:51,红色数字3的时间,是当前价格的里面的时间,也就tick对应的时间,当前的tick时间是hsTimeStamp: 20230419144251000, 也就是 2023-04-19 14:42:51:000, 所以当前时间程序获取的tick时间是一致的。为什么这里要强调这个呢? 假如当前程序时刻是14:42:51, 而获取的tick timestamp数据是14:42:48,那么说明当前程序拿到的最新tick数据却是在48秒时的数据,也就是数据延时了3秒。所以Ptrade里面的tick数据并没有出现延时滞后。



QMT 实时行情

同样QMT提供的可转债基础也是少的可怜,几乎为零。所以同样调用个人部署的可转债接口数据,如法炮制。PS:通过数据解耦的方式,不同数据可以在不同的量化软件里面使用,省去很多重复编写的代码,即使后面接入掘金,聚宽等平台,你只需要编写下单接口逻辑即可。



QMT取实时行情代码如下:


20230420013.jpg



Bond是一个类,和ptrade里面的一样的,用来获取转债基础数据。

同样在QMT的实盘模式下执行:



网络环境:500M宽带网络,PC:CPU I7 - 内存24GB


stock num : 481 同样获取的是481个转债实时行情数据

红色数字1时间:日志输出的当前时间,获取行情数据前的时间14:43:25

红色数字2时间:日志输出的当前时间,此时为已经获取行情数据后的时间:14:43:34

红色数字3:第一次获取行情数据时间差,达到了9.5秒! 这个数字简直惊呆了。 反复测试几次后,依然如此,使用get_market_data获取实时行情数据,第一次数据到达的时候都要挺久的。

新人刚使用这个函数获取实时行情的时候,往往会以为自己代码出bug,等待很久没数据出来,尤其是获取超过1000个股票代码的行情的时候,等待时候更久,等待时间随着输入的个数增加而增加; 同时QMT占用内存也会稳步增加,如果机子的内存太小,可能还会卡死了。(qmt里面的坑还挺多的)









红色数字6,第二次获取实时行情所用的时间,这一次就快很多了,只用了800毫秒。



随着后续运行,获取实时行情的时间就趋于稳定,从800毫秒慢慢降到150毫秒,最后到13-20毫秒,基本和ptrade差不多级别了。











实时行情延时方面,对比通达信

20230420004-v1.jpg




取110048.SH 这个转债的行情数据作为参考,因为QMT返回字段里面没有带tick的时间戳,所以拿通达信作的分时数据作为的对比,没有用L2,所以框住的位置时间约在14:47:03 ~ 14:47:06

图片上半部分通达信的分时数据,左下角的数据时间是14:47:06,所以数据并没有出现很大的延时。



总结

QMT稳定运行的时候,实时行情基本和Ptrade同一级别水平。但QMT的行情波动性大一些。而在初始启动获取数据时,QMT会非常耗费资源,且等待时间较长,而Ptrade则不存在这种问题。

QMT可以随意获取外部数据,所以对券商没有很高要求;而Ptrade目前只有一家券商(国盛证券)可以自由访问外部数据,如果缺少需要的数据或者指标,将无法实现相应的策略。


参考API接口文档:

Ptrade: http://ptradeapi.com/
QMT: http://qmt.ptradeapi.com/

公众号:

【100行python代码实现可转债日内网格-成交驱动】 自定义买卖步长

Ptrade李魔佛 发表了文章 • 0 个评论 • 1662 次浏览 • 2023-04-19 13:27 • 来自相关话题

基于ptrade的可转债日内网格实盘,基于成交驱动,成交后马上挂入下一轮的网格委托。
 
 ## 2023-04-19 更新: 部分成交的需要等待全部成交才触发下一轮挂单

简单的可转债日内网格策略,自定义买卖步长,基准价格,买入与卖出数量,保留底仓张数

开始同时挂买入和卖出委托,如果买入成交后,撤掉委卖(如果是卖出先成交,则撤掉委买),继续挂入下一个步长的委买与委卖,不断循环。


把注释和空格去了100行不到。

代码仅供参考学习具体用法:

用于实盘亏损盈亏自负

后续如果有需要再贴个升级版:多标的网格

或者,额,qmt版本。。。

部分代码截图:




 
 
实盘交易日志:点击查看大图





 






完整代码请参见知识星球.
知识无价,请尊重知识。
  查看全部
基于ptrade的可转债日内网格实盘,基于成交驱动,成交后马上挂入下一轮的网格委托。
 
 ## 2023-04-19 更新: 部分成交的需要等待全部成交才触发下一轮挂单

简单的可转债日内网格策略,自定义买卖步长,基准价格,买入与卖出数量,保留底仓张数

开始同时挂买入和卖出委托,如果买入成交后,撤掉委卖(如果是卖出先成交,则撤掉委买),继续挂入下一个步长的委买与委卖,不断循环。


把注释和空格去了100行不到。

代码仅供参考学习具体用法:

用于实盘亏损盈亏自负

后续如果有需要再贴个升级版:多标的网格

或者,额,qmt版本。。。

部分代码截图:
20230419001.jpg

 
 
实盘交易日志:点击查看大图

20230419003.jpg

 

20230419004.jpg


完整代码请参见知识星球.
知识无价,请尊重知识。
 

本地CPU部署的stable diffusion webui 环境,本地不受限,还可以生成色图黄图

深度学习马化云 发表了文章 • 0 个评论 • 4066 次浏览 • 2023-04-17 00:27 • 来自相关话题

正常输出,生成图的纹理贴图光线很逼真。





 






需要不断调节词汇(英语),打造你想要的人物设定
 






由于本地使用的词汇不限制,还能够生成细节丰富的黄图。(宅男福音)
提供一个语法给你们用用:prompt: beautiful, masterpiece, best quality, extremely detailed face, perfect lighting, (1girl, solo, 1boy, 1girl, NemoNelly, Slight penetration, lying, on back, spread legs:1.5), street, crowd, ((skinny)), ((puffy eyes)), brown hair, medium hair, cowboy shot, medium breasts, swept bangs, walking, outdoors, sunshine, light_rays, fantasy, rococo, hair_flower,low tied hair, smile, half-closed eyes, dating, (nude), nsfw, (heavy breathing:1.5), tears, crying, blush, wet, sweat, <lora:koreanDollLikeness_v15:0.4>, <lora:povImminentPenetration_ipv1:0>, <lora:breastinclassBetter_v14:0.1>





 
整体来说,现在的AI技术和效果就像跃迁了一个台阶。
  查看全部
正常输出,生成图的纹理贴图光线很逼真。

00015-31697332801.png

 

common_(22).jpeg


需要不断调节词汇(英语),打造你想要的人物设定
 

20230416002.jpg


由于本地使用的词汇不限制,还能够生成细节丰富的黄图。(宅男福音)
提供一个语法给你们用用:
prompt: beautiful, masterpiece, best quality, extremely detailed face, perfect lighting, (1girl, solo, 1boy, 1girl, NemoNelly, Slight penetration, lying, on back, spread legs:1.5), street, crowd, ((skinny)), ((puffy eyes)), brown hair, medium hair, cowboy shot, medium breasts, swept bangs, walking, outdoors, sunshine, light_rays, fantasy, rococo, hair_flower,low tied hair, smile, half-closed eyes, dating, (nude), nsfw, (heavy breathing:1.5), tears, crying, blush, wet, sweat, <lora:koreanDollLikeness_v15:0.4>, <lora:povImminentPenetration_ipv1:0>, <lora:breastinclassBetter_v14:0.1>

20230416001.jpg


 
整体来说,现在的AI技术和效果就像跃迁了一个台阶。