繁簡切換您正在訪問的是FX168財經網,本網站所提供的內容及信息均遵守中華人民共和國香港特別行政區當地法律法規。

FX168财经网>人物频道>帖子

十行代码带你量化交易入门

作者/我是一个土豆 2019-05-09 17:25 0 来源: FX168财经网人物频道

新手可以去看新版,更系统详细,量化交易零基础入门教程


说起量化交易入门,很多时候得到的答案要么是谈理论、要么列书单、要么就过程繁琐难以实践,结果往往是让对量化交易感兴趣的人迈不出那最初的一步。另外一方面,如果已经学了一些Python基础又希望能够用上,学以致用,那么这篇文章将教你简单的使用Python去写一个 策略。

这篇文章,力求以简单的例子,手把手教你如何用十行代码,写一个能根据实际行情发送交易信号到微信的量化交易策略!

学习内容:

  • 学会写一个简单的量化交易策略

  • 理解策略的基本框架

  • 学会建立连接实盘的模拟交易,并使其自动发送交易的信号到微信

首先,进入JoinQuant,新建策略并清空原本模板代码,如下图。注意,未登录用户无法保存编写的策略以及查看回测详情,最好先登录,免得编的策略保存不了白做了。
新建空白策略

左侧是编写策略代码,右侧是策略运行结果。我们就在左侧写策略代码。(图片是老版示例,跟上图不相连,只看大体界面就好)
enter image description here
下面教你用10行代码写个量化交易策略——单股票均线策略

1 确定策略内容与框架

我们明确下策略内容:
若昨日收盘价高出过去20日平均价今天开盘买入股票
若昨日收盘价低于过去20日平均价今天开盘卖出股票

只操作一只股票,很简单对吧,但怎么用代码说给计算机听呢?

想想人是怎么操作的,应该包括这样两个部分

  1. 既然是单股票策略,事先决定好交易哪一个股票。

  2. 每天看看昨日收盘价是否高出过去20日平均价,是的话开盘就买入,不是开盘就卖出。每天都这么做,循环下去

对应代码也是这两个部分

def initialize(context):用来写最开始要做什么的地方def handle_data(context,data):用来写每天循环要做什么的地方

答疑与延伸:

  • def后面的空格和最后的冒号不能少!

  • 符号都要用英文输入法!

  • 为什么这么写?就这么规定的,先别管了:)

  • handle_data 按天循环时,如此处,其中的操作都是在9:30执行。

几乎所有策略都基于这个基本的策略框架:先初始化,然后循环操作
1 初始化,即最开始要做的事情,如选定股票,设置变量、参数等等
2 周期循环:即每个周期要做的事情,如计算指标,买入卖出等,周期可能是分钟,天等,本文策略的周期是一天。当你要做一些盘中短线操作的时候,周期就要调成分钟,先别着急会遇到的。

2 初始化

我们要写设置要交易的股票的代码,比如 兔宝宝(002043) ,真的有这个股票哦。

def initialize(context):g.security = '002043.XSHE'# 存入兔宝宝的股票代码

答疑与延伸:

  • "g."是什么?全局变量前都要写"g.",全局变量就是全局都能用的变量,一般变量只能在该函数下使用。如security不加"g.",只能在第一部分即initialize里用,不能在第二部分handle_data里用。

  • 什么是变量?,可以当变量是各种存放数据的容器,每个都要有个名字,比如g.security = '002043.XSHE',就是把数据'002043.XSHE'放到变量g.security中,如果变量中里面有别的数据会替换掉。具体到量化课堂的python编程里学习下基础内容,或者问问百度。

  • "XSHE"是什么? 股票代码使用时要加后缀,深交所股票代码后缀为 ".XSHE ",上交所股票代码后缀为 ".XSHG"。

  • 代码中“#”是什么?”#“后的内容都是注释,是为代码做说明的,不会被计算机当做代码处理。

3 获取收盘价与均价

首先,获取昨日股票的收盘价

# 用法:变量 = data[股票代码].closelast_price = data[g.security].close# 取得最近日收盘价,命名为last_price

然后,获取近二十日股票收盘价的平均价

# 用法:变量 = data[股票代码].m*g(天数,‘close’)# 获取近二十日股票收盘价的平均价,命名为*erage_price*erage_price = data[g.security].m*g(20, 'close')

答疑与延伸:

  • data是什么?

  • data[股票代码]后面除了平均价.m*g还能接什么?

  • 这些写法其实都是python写法,如果你觉得不好“理解”可以先记住。

4 判断是否买卖

数据都获取完,该做买卖判断了

# 如果昨日收盘价高出二十日平均价, 则买入,否则卖出if last_price > *erage_price:
    买入elif last_price < *erage_price:
    卖出

问题来了,现在该写买卖下单了,但是拿多少钱去买我们还没有告诉计算机,所以每天还要获取账户里现金量。

# 用法:变量 = context.portfolio.cashcash = context.portfolio.cash# 取得当前的现金量,命名为cash

答疑与延伸:

  • context.portfolio 是什么?

这句看着有点复杂,先记住吧。然后我们看看买入卖出怎么写。

5 买入卖出

# 用法:order_value(要买入股票股票的股票代码,要多少钱去买)order_value(g.security, cash)# 用当前所有资金买入股票# 用法:order_target(要买卖股票的股票代码,目标持仓金额)order_target(g.security, 0)# 将股票仓位调整到0,即全卖出

答疑与延伸:

  • 为什么没有指定交易价格?此策略是按天回测进行的且使用的较为简单的市价单下单方法,交易价格为开盘价(加上滑点)

  • 无法交易的情况?涨跌停,停牌,T 1制度等无法交易的情况,系统会自动使下单不成交并在日志中发出警告。

  • 滑点是什么?简言之是为成交误差留出余地。

  • 下单方法有哪些?

6 策略代码写完,进行回测

把买入卖出的代码写好,策略就写完了,如下

def initialize(context):#初始化g.security = '002043.XSHE'# 股票名:兔宝宝def handle_data(context, data):#每日循环last_price = data[g.security].close# 取得最近日收盘价# 取得过去二十天的平均价格*erage_price = data[g.security].m*g(20, 'close')
    cash = context.portfolio.cash# 取得当前的现金# 如果昨日收盘价高出二十日平均价, 则买入,否则卖出。if last_price > *erage_price:
        order_value(g.security, cash)# 用当前所有资金买入股票elif last_price < *erage_price:
        order_target(g.security, 0)# 将股票仓位调整到0,即全卖出

现在,在策略回测界面右上部,设置回测时间从20140101到20160601,设置初始资金100000,设置回测频率,然后点击运行回测。
cd5be5a9-6f32-4a86-bc28-c13d3d23ebfd.png

答疑与延伸:

  • 什么是回测?回测是量化交易策略研究中的关键,是指给定一段时间的历史数据(如此处是20140101到20160601的每日数据),计算机按照所编写的策略进行模拟仿真交易,以测试策略效果好坏。

如果你代码没有问题,就会顺利的进行回测,回测结果如下图:
6a878da0-b17f-4b40-a857-632979bcd1d2.png
至此,你就完成了一个简单策略的回测了。

答疑与延伸:

  • 如何根据回测结果评价策略好坏?很初级地讲,有三:

  • 盈利能力:策略收益与年化收益高,则说明盈利能力强。盈利能力不行说啥都没用。

  • 盈利稳定性:最大回撤要低。最大回撤是指最大亏损幅度,50%则意味着历史上看最大亏损率为50%。

  • 回测可靠性:交易次数要多。交易次数越多意味着经历了越多次的检验,回测的结果也越可靠。
    更多说明见:风险指标说明

  • 这个策略回撤大,交易次数少,只交易一只股票,并不靠谱。但是结构简单适合新手入门理解整个流程。

7 建立模拟交易,使策略和行情实时连接自动运行

策略写好,回测完成,点击回测结果界面(如上图)右上部红色模拟交易按钮,新建模拟交易如下图。
f8cb32d1-b214-449b-a74a-b586550ef364.png
写好交易名称,设置初始资金,数据频率,此处是每天,设置好后点提交。

答疑与延伸:

  • 模拟交易创建成功后,需要等待A股至少开盘一次,才能查看模拟交易结果。

8 开启微信通知,接收交易信号

点击聚宽导航栏我的交易,可以看到创建的模拟交易,如下图。
9fd52c6c-c159-4e99-92ef-d8e195582d91.png
点击右边的微信通知开关,将OFF调到ON,按照指示扫描二维码,绑定微信,就能微信接收交易信号了。
当策略买卖操作,微信会收到信号提醒类似下图。
845a915b-9b71-496b-8e2c-0fa76eb2dbe3.png

答疑与延伸:

  • 能不能自动下单?目前不能,敬请期待。你可根据信号手动下单买卖,施行策略。

自测与自学

  1. 能否理解整个策略框架。

  2. 能否成功编写单股票均线策略,成功回测,建立模拟,开启微信通知。

  3. 能否理解年化收益,最大回撤。

  4. 浏览聚宽新手指南,干货,答疑,指路,一应俱全。

摘要回顾:

  1. 确定策略内容与框架

  2. 初始化

    • 全局变量 g.

    • 股票后缀

    • 注释格式 #

  3. 获取收盘价与均价

    • 获取二十日均价

    • 获取收盘价

  4. 判断是否买卖

    • 利用 if 进行判断

    • 获取当前账户现金

  5. 买入卖出

    • 下市价单

    • 滑点

    • 下单方法有哪些

    • 无法交易的情况

  6. 进行回测

    • 回测含义及其方法

    • 如何根据回测结果评价策略

  7. 建立模拟交易,行情实时连接

  8. 开启微信通知,接收交易信号

分享到:
举报财经168客户端下载

全部回复

0/140

投稿 您想发表你的观点和看法?

更多人气分析师

  • 张亦巧

    人气2184文章4145粉丝45

    暂无个人简介信息

  • 梁孟梵

    人气2176文章3177粉丝39

    qq:2294906466 了解群指导添加微信mfmacd

  • 指导老师

    人气1864文章4423粉丝52

    暂无个人简介信息

  • 李冉晴

    人气2320文章3821粉丝34

    李冉晴,专业现贷实盘分析师。

  • 刘钥钥1

    人气2024文章3119粉丝34

    专业从事现货黄金、现货白银模似实盘操作分析指导

  • 张迎妤

    人气1896文章3305粉丝34

    个人专注于行情技术分析,消息面解读剖析,给予您第一时间方向...

  • 金泰铬J

    人气2328文章3925粉丝51

    投资问答解咨询金泰铬V/信tgtg67即可获取每日的实时资讯、行情...

  • 金算盘

    人气2696文章7761粉丝125

    高级分析师,混过名校,厮杀于股市和期货、证券市场多年,专注...

  • 金帝财神

    人气4760文章8329粉丝119

    本文由资深分析师金帝财神微信:934295330,指导黄金,白银,...

FX168财经

FX168财经学院

FX168财经

FX168北美