返回列表 发布新帖

迅投Python量化建模新手入门02录音笔记

971 0
发表于 2023-12-26 12:36:31 | 显示全部楼层 阅读模式
本帖最后由 *******6980 于 2023-12-26 12:46 编辑

面向新人小白上手 迅投  Python 编写策略建模的入门指南。
帮助0基础学员起手操作的课程录音,智能交易*姚
仅文字版,相关视频课程请咨询其发布者。

《量化交易就那点事儿》系列视频可在 BiliBili 视频站免费观看
----------------------------------------------------------------------------------------------

列表和时间戳


大家好,我是姚老师,我们开始上课。

上节课各位学员的作业我都已经看过了,这个基本上没有难度,很多有编程基础的学员觉得上节课的内容太 easy 了,毕竟是第1课,分分钟搞定。有个别学员,只是犯了一些马虎的错误,比如引号打成中文的啦,圆括号没有配对啊,这些都是小事情。重要的是大家要理解量化交易建模,编程,教电脑替我们干活就是要把每一步操作步骤明确的告诉电脑,你提一个需求,电脑找到对应的数据回应你,这个过程也叫做人机对话,这就是编程。你的需求描述的越清楚越确定,那电脑执行的速度就是他最大的优势,这样人机结合咱们的效率那就是扭转乾坤。

各位学员,我的课上一定要动手操作啊,上课的时候就首先要打开我们的讯投QMT这个软件,然后登录好你的账户,包括仿真账户都要登录成功。这非常重要啊,不能光看不动手,眼睛会了,结果手都在那闲着,这肯定是不行的。登录之后看到右下角的两个绿灯都已经亮了,这就OK了。

各位学员的作业我都看过啊,没有任何的问题。这不废话,有问题了,报错了,你们也不敢发给我看吧?好意思吗?脸这么大吗?
在我们动手编写每一个策略模型之前,我再强调一次,一定要在第1行写上
  1. # coding:gbk
复制代码


因为统一的编码格式,字符集是GBK,其中会用到中文字符。这是我说的,当然也是讯投官方文档当中的强制规定,这一条一定要遵守。其次,根据 Python 语法的约定,是有缩进要求的,也就是要空格的,这4个空格必须是4个点,或者是这种向右的箭头的形式,必须要统一!你要么都是4个点,要么都是右箭头。不能一会儿是4个点,一会儿是箭头,记住没有,这是强制的规定,必须要按照这样的格式来写代码。

上次课程当中的我们已经学会了使用一个方法来设置我们的交易账号,这个应该都能理解,自己的账号都设置错了,那还玩什么呢?后面就不用玩了,对不对?它就是
  1. ContextInfo.set_account()
复制代码


第2个我们学会的就是如何订阅我们自己关心的股票品种,最终的结果,各位学员也看到了,是不是有一个方括号括起来的,其中就是我们所关心的股票品种代码呀。比如:

[000004.SZ,600027.SH,002202.SZ,600570.SH]

像这种用一对方括号括起来的,其中包含一个元素或多个元素,中间用逗号分隔的这种格式,我们称之为列表。列表是一个重要的概念啊,这个学员一定要记住。有基础的学员不要在那里自己偷笑了,也要照顾一下后进的学员们,这在Python语言当中,也是一个非常重要的概念,我们以后会经常使用的。列表有一个重要的特性,各位学员一定要牢记。只要是放在列表中的元素,这每一项,它都有索引编号的,也就是说这个位置从左到右,是有号码牌的。最左边的是 0号,往右一个是 1号,再往右一个是 2号, 依此类推。同时,还有一套索引编号是从右往左编的,最右边的是 -1 号,往左一个是 -2 号,再往左一个是 -3 号,依此类推。

哎,有学员看到这儿说,这不就是 数组 嘛 。不错!这个要表扬一下啊,说明你初中的数学知识还没有还给老师啊。可以的,数组 也是这样的格式,其中每一个元素,都是有标号的,对吧。各位也可以称之为 数组。列表,数组,可以互通。

光说不练假把式,来,我们上手试试,看看有没有这个索引编号,证明一下。
看下面这个例子:

  1. # coding:gbk

  2. slist = ['000004.SZ','000009.SZ','600027.SH','000035.SZ','601827.SH']

  3. print("列表中最左边 0 号位置是什么品种?",slist[0])

  4. print("列表中 3 号位置是什么品种?",slist[3])

  5. print("列表中 最右边的位置是什么品种?",slist[-1])
复制代码


对了,在列表名称后面写个方括号,在其中写上索引编号的数字,就可以快速的取到对应位置的元素了。就象点名报数一样简单,各位学会了吗?还是学废了吗?

上次我们已经学会了,把我们所关心的股票品种放到一个板块当中,然后去订阅这个板块,最终你就获得了这样一个列表。这个列表当中可以容纳很多很多的元素,比如沪深A股6000多只股票的代码都可以放在里面,各位的作业当中我已经看到好家伙,密密麻麻的是不是?当然实际工作中,我们也看不了那么多品种,比如我可能比较关心的就是 可转债品种,所以我订阅的这个列表当中,可能就包括 300 --  400 只 可转债 的品种,当然经过筛选过滤,最终要进行交易的,也就10来个品种或者几十个品种,不得了啊,不要那么贪心。

有心的朋友可能已经注意到了,列表当中的这些股票代码的后面都有一个点.SH,.SZ,对了,你用脚也猜到了它就代表是 上海市场 还是 深圳市场,这就是交易所的名称代码。讯投也是可以做期货交易的,因此如果是期货品种,他也会带上交易所的名称代码,比如:
[IF2311.IF,CU2312.SF]
分别表示:中金所的300股指,上期所的 沪铜

所以,这个市场简称代码,各位要有一个印象啊。也就是在迅投眼中,我们的各个交易所,就是这些代码名称。

那么问题来了,600018.SZ 是个什么股票吗?给我说中文,代码我反应不过来。怎么办。这就要用到一个方法了,就是:


  1. ContextInfo.get_stock_name()
复制代码


看这个例子:

  1. # coding:gbk

  2. def init(ContextInfo):
  3.     print('告诉我 000001.SZ 这是个什么股票:',ContextInfo.get_stock_name('000001.SZ'))
复制代码


你看,这就是人机对话,你提一个问题,电脑马上告诉你答案。你的问题越具体、越清晰,电脑回应的就越快,越准确。(嗯,是谁在那儿问:“谁是这个世界上最美的女人?信不信下药给你毒哑了!)

上次有个课后作业,我也看到了学员们基本都完成了。就是有关时间的这个方法。关于时间的概念还是有必要说明一下。
在计算机的世界里,时间是从我们的 1970年1月1号0点开始的。电脑不懂什么中华上下5000年啊。第一台能称得上是计算机的东西,来到这个世界才不到70年,年轻着呢。从它认识时间这个概念开始,它就以 秒 为基本单位。当然现在都可以到 毫秒甚至纳秒了,那是后来的故事。所以对电脑来说,你问它现在几点了,它会回应你一串数字,这串数字就是从 1970年1月1号0点到现在的秒数。比如:

  1. # coding:gbk

  2. def handlebar(ContextInfo):
  3.     index = ContextInfo.barpos  # 图表中最新一根K线的索引编号
  4.     realtime = ContextInfo.get_bar_timetag(index)  # 最新一根K线对应的时间戳
  5.     print("现在市场上的最新时间是:",realtime)
复制代码


你看到的回应可能就是:
现在市场上的最新时间是: 1700013600000。
这么一长串数字,这都啥啊?我问的是时间,你就给我这?这是要造反吗?其实这就是  1970年1月1号0点以来,到当前时间 所经过的 秒 数。这简直反人类啊,给我翻译翻译。
这时候就用到了,在各位的作业中出现过的,那个方法。


  1. timetag_to_datetime(timetag, format)
复制代码



它的功能,就是把电脑以秒为单位的时间戳格式,转换成 我们人类可以阅读的 年月日 时分秒 的格式。这下不就顺了嘛。所以,沟通的方式很重要啊!各位交作业的时候,就顾着复制粘帖去了,是吧? 都不过脑子?这合适吗?

那有没有不这么反人类的时间,敢不敢让我们一下就能看懂的,还转换来转换去的,烦~~~
有,就是

  
  1. get_market_time()
复制代码



方法。只要是在开市的时候,用这个方法,就可以直接获取到当前的时间。返回的结果就是 时分秒 的格式。这是不是很直接,很简单,请看下面的例子:


  1. # coding:gbk

  2. def handlebar(ContextInfo):
  3.     print("上海沪市的最新时间是:",get_market_time("SH"))
  4.     print("深圳市的最新时间是:",get_market_time("SZ"))
复制代码


结果各位看到了。
我曾一度还很不理解,这时间怎么这样表达,这不乱套了。后来想想,这很科学啊,这很方便啊。因为一天当中,程序运行的时候肯定是在 市场开市的时候嘛。休市的时候你把电脑开着跑量化程序干啥啊?费电啊?你直说你玩游戏不得了呗,还做研究,还学习,骗家长呢?哄自己呢?别甩锅给量化程序好不好,有点人类的担当。
既然是开市的时间,那用这个方法,获取的时间,精确到 秒 为最小单位,基本也够用了。当然你必须要玩高频,必须要上 level 2 行情,高级行情,那你牛批,你玩得666666,你上服务器,用 纳秒级的时间戳,没毛病。

好,今天给各位介绍2个重要的概念,一个是 列表,一个是 时间戳。列表是很重要数据类型,我们以后会经常用到它的特性,就是它自带的索引编号。这一点各位学员一定要牢牢掌握,熟练于胸。时间戳,就是计算机世界里的时间表达法,和我们人类的时间格式,年月日 时分秒 是可以相互翻译转换的,记住哦。在实际工作中,一个订单的委托时间、成交时间、撤消时间,这都是需要记录并核对的,这可不能乱。

课后必须有作业啊。我的文档中从 2.3.07 到 2.3.18 这些 ContextInfo 的方法,各位要自己动手,自己在电脑上操作,就算是复制粘帖,也要在你的电脑上运行一遍,把结果截图下来,发给我看。明白?结果不对的,出错的,你也好意思发给我?我看看谁心这么大啊?在这儿唬弄谁呢?各位都是成年人啊,对自己的学习负责。我还是那句,我随时劝退啊。因为我的课程是可以单节次购买的,也就是说你买了这节课,下节课可以不买了。你都看不懂,或者你压根就不看,你花那钱干吗?你钱多啊?那直接捐点呗,费劲儿。

好,不扯闲的了。各位抓紧动手操作。期待各位学员的成果。我们下次再见。
==========================================================================================

可扫描以下二维码打赏作者,或咨询相关问题。





回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表