量化交易开发之基本语法

量化交易开发之基本语法(三)

前文讲解了量化交易中策略运行的基本框架以及实现方法,其中虽然给出一个简单策略的完整代码,但只是初步认识,想完全看懂并自己写需要掌握python这门编程语言。

一般常见的python教程都是针对程序员的,所以很多内容在做量化写策略时都往往用不到。而本教程则是以量化的情景从零讲解python编程,所以将更适合想学做量化策略的人。

本周主要讲解python的基本语法,如下图所示:

1705908853182.png

一、python是什么

python是与计算机交流的一种语言。

我们把想让计算机做的事情用python写出来,就如同前文那样的一行行代码,从而,计算机才能理解并去按我们的想法去做。

二、基础语法

基础语法

  • 大小写敏感

     比较容易理解,就是字母的大写与小写是区分的,所以如果你把前文例子的代码中的若干个字母从小写变成大写,系统会报错。
    
  • 要用英文符号

     之前讲过,冒号、逗号、分号、括号、引号等各种符号必须用英文的,中文的会不识别而报错。
    
  • 注释

     (#)会把所在行的其后的所有内容设定为注释
    
       # 这是一个注释
   三个单引号(''')或三个双引号(""")会把之间的内容设定为注释
    '''
        这也是一个注释;
        这也是一个注释;
    '''
  • 缩进

      之前讲过,代码缩进的时候要对齐,缩进方法是四个空格或一个tab键(推荐用tab),不要混着用。
    
    # initialize这条语句包含了其下的两条语句
    def initialize(context):
        # 这两条语句是要被其上的initialize包含的,要缩进
        run_daily(period,time='every_bar')
        g.security = '000001.XSHE'
  • 一行写多条语句

    一般习惯是一行只写一条语句,如果要一行写多条语句要用分号隔开。

    def initialize(context):
        run_daily(period,time='every_bar');g.security = '000001.XSHE'
  • 一条语句写在多行

    有时一条语句可能就会很长,为了便于阅读会用斜杠;

    def initialize(context):
      run_daily(period,\
      time='every_bar')
      g.security = '000001.XSHE'

三、变量与赋值

变量通俗的理解是,计算机中存放数据的有名字的盒子。另外变量名字是在赋值语句中定义的。

赋值,即赋予变量数据,写法是等号,含义是把等号右边的数据(或变量里的数据)放入左边的变量中去。

    # 用法: 变量名 = 数据或变量

    a=1
    b='你好'

    # 把a中的数据1赋值给了c
    c=a
    # 把b中的数据'你好'赋值给了a,此时a中的1被替换了
    a=b

四、打印print

print是非常常用而重要的语句,它能把变量里的内容在日志中打印输出出来,通过它我们能了解程序运行的细节。

1705909957375.png

五、全局变量

你可能会发现初始化里的变量与周期循环里的变量是不通的,比如你运行如下的代码会报错:

    def initialize(context):
        run_daily(period,time='every_bar')
        a=1
    def period(context):
        print(a)

报错信息如下,含义是a没有被定义:

NameError: global name 'a' is not defined

为了让变量能在全局被使用,需要在变量前加'g.',使之成为全局变量:

    def initialize(context):
        run_daily(period,time='every_bar')
        g.a=1
    def period(context):
        print(g.a)

所以,把刚刚的代码中的a改为全局变量就能正确运行了。

六、数字与字符串

数字(number)

  • 数字具体分为int(整数)、float(浮点数,即 包含小数位)、bool(布尔值,即True和False,True是1,False是0)等。
    a = 3      # 整数
    b = 3.1415 # 浮点数
    c = True   # 布尔值

字符串(String)

  • Python 可使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须的相同类型的。
    # 其中三引号可以由多行组成来编写多行文本
    a = '九歌'
    b = "袅袅兮秋风"
    c ="""袅袅兮秋风,
    洞庭波兮木叶下。
    ——屈原《九歌》""" 

七、算术运算

  • 数字变量之间是可以进行算术运算的。
    a=3.0
    b=2.0   
    # 为了查看结果我用了print打印
    # 加
    print("a+b=%s" % (a+b))
    # 减
    print("a-b=%s" % (a-b))
    # 乘
    print("a*b=%s" % (a*b))
    # 除
    print("a/b=%s" % (a/b))
    # a除以b的商的整数部分
    print("a//b=%s" % (a//b))
    # a的b次幂,即指数运算
    print("a**b=%s" % (a**b))
    # a除以b的余数,即取余运算,为了打印“%”百分号要用两个百分号代表“%”百分号
    print("a%%b=%s" % (a%b))    
    # 用之前的方法执行后结果如下,日期信息省去了
    a+b=5.0
    a-b=1.0
    a*b=6.0
    a/b=1.5
    a//b=1.0
    a**b=9.0
    a%b=1.0

八、数据类型type

  • type语句可以,告诉我们变量里存放的是什么类型的数据。
    # 用法:type(变量名)
    a=1
    b='1'
    # 为了看到结果需要用print把结果在日志中打印
    print(type(a))
    print(type(b))

九、列表与字典

列表(list):

列表数据类型能方便我们操作一组数据。比如一组股价、一组股票名等。

建立方法:

    # 建立一个list: 变量名=[数据或变量名,数据或变量名,......]

    a=[1,1,2,3,5,8,13,21]

    b=['000001.XSHE','002043.XSHE','002582.XSHE','600000.XSHG']

    c=[1,2,'good',[1,2,'luck'],a,b]

    # 值得注意的是例子中的c,c是一个list,其中的包含了6个元素,其中有数字(1,2),有字符串('good'),以及三个list([1,2,'luck'],a,b)。

    # 因此你应该知道,list中可混合的存放多种数据类型,list中放一个list也行。

选取list中的某个元素:

    # 方法: list类型的变量[位置(或称下标或索引)]
    # 索引从0开始
    # 可以用负数代表倒数第几    
    c=[1,2,3,4] 
    # 为了看到结果我们用print打印
    print(c[0])
    print(c[1])
    print(c[2])
    print(c[-1])    
    # 用之前的方法执行后结果如下:(前面的日期以后就不写了)
    1
    2
    3
    4

字典(dictionary):

字典数据类型同样能方便我们操作一组数据,与list不同的是我们可以为这组数据自定义地建立索引。

建立方法如下:

    # 建立方法: 变量名={索引名:数据,索引名:数据,....}
    # dict中的索引也叫键(key),数据也叫值(value)    
    a={'平安银行':'000001.XSHE','浦发银行':'600000.XSHG'}
    b={'开盘价':10.0,'收盘价':11.0,'涨跌幅':0.10}

选取dict中的某个key的值方法如下:

    # 选取方法 dict类型的变量[key]
    a={'平安银行':'000001.XSHE','浦发银行':'600000.XSHG'}

    # 为了看到结果我们用print打印
    print(a['平安银行'])

    # 执行后结果如下:
    000001.XSHE

十、未完待续

下章将继续介绍量化策略的python基本语法和变量。

欢迎关注知乎:北京不北

欢迎关注douyin:near.X (北京不北)

欢迎+V:beijing_bubei

获得免费答疑,长期技术交流。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353