python 了解量化交易

Posted 季布,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 了解量化交易相关的知识,希望对你有一定的参考价值。

股票的特性

1.股票、基金、债券的区别

  • 股票:是股份公司发行的所有权凭证,属于投资,投资进去的钱,公司赚你就赚,公司亏你就亏 盈亏自负。
  • 基金:投资组合(股票、债券、现金)大部分基金一半以上的持仓都是股票。
  • 债券:本质是“欠条”,还本付息的有价证券(国债、企业债、金融债券)

以上是概念上,三个投资品类的区别。

2.风险
风险:股票(10%)> 基金(5%)> 债券 (1%)

风险和投资对象的波动情况以及投资特性是紧密相关的, 股票很考验个人对企业或股票走势的判断,A股市场只能上下百分之10,其他市场大跌会出现熔断、跌个百分之二十几都有可能。基金的波动较小。债券的波动更低,一天的波动百分之1都不到。债券和基金股票不太一样的地方是 它作为欠条的特性不太可能亏欠。当然也有企业债暴雷的情况。但是非常少。

3.收益
收益:股票 > 基金 > 债券

一、什么是量化交易

  • 针对可交易的投资商品,理性的啊运用逻辑分析和归纳统计判断市场的趋势

二、有哪些指标可以用于分析呢

赚钱因子

  • 盈利能力
  • 财报数据没用,主要踏踏实实去看去分析,靠虚无缥缈的消息去买入卖出不靠谱

基本面分析

  • 居民消费指数
  • 人均国内生产总值(GDP)
  • 净资产收益率(ROE)

技术面分析

  • 股票收盘价
  • K线(日、周、年)
  • 均线(5/10/20)

技术面和基本面的区别
技术面更关注具体的价格,比如每天的开盘价。收盘价。以及和开盘价、收盘价、最低价、最高价相关的K线,以及基于收盘价计算出来的均线

技术面更关注企业本身以及大的市场环境的变换,因为外在的经济会影响企业的效益进而影响股价,比如疫情的出现,股市立即暴跌,这就是因为市场的外在环境变化,大多数企业的效益都会收到影响,连着股价也会受到影响,所有敏感的人都会抛售股票这类风险较大的市场

我们需要首先确定我们要按照什么类型的数据去做交易的策略

择时策略
以赚钱为目的,看均线指标。
低买高卖,便宜的时候买入,贵的时候卖出

选股策略
基于公司的盈利能力(净利润,现金流),以及和股价结合来看的性价比来判断是不是值得投资的公司

板块轮动策略:
通过观察不同行业的个股周期性,利用指数的涨跌幅,来找到买入卖出的节奏

三, 了解量化交易系统的简单构成

量化交易系统=数据端(可视化、行情)+决策端(交易策略)+执行端(柜台【证券公司委托,执行交易,计算持仓,计算资金,做最终结算核对的部分】)

四 根据构建写代码

主要包含4个部分
1.Data
Data就是行情,属于数据端,和股票相关的行情主要分2块,一个是股票指数,另一个是个股。
指数:股票指数是上证50,沪深300。它等于把一堆股票做组合。

  • 持仓个股:表示我这个指数到底持仓哪些股票,
  • 行情:每日的指数价格和成交数据,
  • 资金流:比如北向资金,从海外市场通过港股通留到上海或者深圳交易所的资金流。

个股:比如说比亚迪,就是一个个股,五粮液是一家个股。

  • 基本信息:比如说是哪家公司的,做的是什么业务,属于什么板块,
  • 行情:价格,包括分钟价格,每日价格,每周价格。
  • 资金流:比如北向资金,从海外市场通过港股通留到上海或者深圳交易所的资金流。

2.Strategy
Strategy属于决策端。交易端可以有各种各样的交易策略。

  • 择时策略:(选入买入卖出点)
  • 选股策略:即可以和基本面相关,比如说“市值”“估值”,也可以和技术面相关,比如说“盈利能力”

3.Trade
Trade交易端,当我们知道什么时候买入,什么时候卖出,我们需要调用交易端的接口,去买入卖出股票。如果委托成交了,就会有具体的成交信息。并且记录到我的持仓里面。后期用来计算收益。以及我的资金情况。

4.Chart
以上是最重要的3大块。
最后还有个辅助的模块叫做Chart。就是图表的模块,帮助我们记录资金以及交易的明细。让我们有直观的感受。

以上就是关于如果使用Python来实现量化交易的一个思路。

用Python编程借助现有量化平台编写股票交易策略和回测分析

一、简介

大家好,我是启航。今天给大家分享的内容是基于Python编程,实现股票交易相关功能开发,如果读者对股票或金融衍生物交易不太了解,又比较感兴趣的话可自行查询相关资料。

接下来笔者会给大家介绍股票交易中的常见几种交易策略实现思路和源码编写过程,如果大家听说过量化交易这个词语的话,对其中的交易策略或许了解过,大概意思就是在股票、加密货币或者金融衍生物在价格的波动过程中根据其交易策略进行不断的买入和卖出,不断的套利,降低持仓陈本,来达到收益最大化

常见的交易策略有很多种,例如趋势型,网格型,剥头皮,概率法则,高频交易等,今天主要给大家介绍2种低频的交易策略,高抛低吸网格交易策略、日内做T策略。其他的交易策略较复杂,读者可自行百度了解,笔者这里推荐一个量化交易网站,仅供参考,米筐量化:

https://www.ricequant.com/doc/quant/

 

二、需求分析&实现思路

每个交易日的股票都会上涨或者下跌,在这个过程中笔者们偶尔会想针对部分股票进行股价的涨跌幅进行监控,或者自动进行交易,在这个需求前提下,现有券商、股票分析软件都会带有机器人自动交易策略功能,大部分都需要收费或者部分策略不能满足自己的需求,笔者这边提供2种实现思路:

1、借助现有量化平台编写策略和回测分析,然后在券商软件层面进行策略执行。

2、自己编写功能代码来监控估价,对股价波动进行特殊处理满足特殊需求。

第一种实现成本较低,但功能受限于平台;第二种实现成本毋庸置疑相对较高,但是逻辑可以自己控制。

 

三、借助现有量化平台编写策略和回测分析

这里利用米筐量化实现和分析自己的交易策略,需要先注册个账号,然后进入到平台-笔者的策略中进行策略编写,平台的功能使用可以参考平台文档。

笔者这里贴出笔者自己写的2种策略代码,这个平台只支持使用Python脚本编写。

1)价差交易策略

平台截图:

Image

部分代码如下,详细代码可以自己手撸实现,也可以在文末进行获取:

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
...
    if newPrice >= context.nextSellPrice:
        logger.info("执行高抛交易,对应价格:{}".format(newPrice))
        amount = context.portfolio.positions[context.s1].quantity
        if amount >= context.tradeNumber:
            logger.info("执行高抛交易,对应数量:{}".format(context.tradeNumber))
            order_shares(context.s1, -context.tradeNumber)
            plot("S", newPrice)
        elif amount >= 100:
            logger.info("执行高抛交易,对应数量:{}".format(amount))
            order_shares(context.s1, -amount)
            plot("S", newPrice) 
        
        calc_next_trade_price(context,newPrice)
        obj = {
            "nextSellPrice":context.nextSellPrice,
            "nextBuyPrice":context.nextBuyPrice,
            "curTradePrice":context.curTradePrice
        }
        context.buyTradeList.append(obj)

    if newPrice <= context.nextBuyPrice:
        logger.info("执行低吸交易,对应价格:{}".format(newPrice))
        amount = int(context.portfolio.cash / newPrice / 100.0)  * 100
        if amount >= context.tradeNumber:
            logger.info("执行低吸交易,对应数量:{}".format(context.tradeNumber))
            order_shares(context.s1, context.tradeNumber)
            plot("B", newPrice)

        calc_next_trade_price(context,newPrice)
       
        obj = {
            "nextSellPrice":context.nextSellPrice,
            "nextBuyPrice":context.nextBuyPrice,
            "curTradePrice":context.curTradePrice
        }
        context.sellTradeList.append(obj) 

选择回测时间段,点击右侧平台右侧按钮运行回测,结果页面如下

Image

从结果中可以看到,对招商银行[600036]这只股票进行价差网格交易,其参数设置在上涨8%的时候卖出,下跌8%的时候买入,最大连续下跌买入次数为3次。

回测收益:13.628%

回测年化收益:17.096%

比基准年化收益-6%高出非常之大,这是在股价波动的过程中可以进行执行该策略来不断的降低持仓成本。从交易详情面板来看,这个策略可以通过参数调节交易频率,在上涨下跌比率较大的情况下,其交易次数是能控制的相对较少,结果图如下:

Image

 

2)日内做T策略

同样的,只贴部分代码

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
...
    newPrice = bar_dict[context.s1].last
    if newPrice >= context.nextSellPrice:
        context.lastTradeType = 1
        logger.info("执行高抛交易,对应价格:{}".format(newPrice))
        amount = context.portfolio.positions[context.s1].quantity
        #if amount - context.tradeNumber >= context.lockStockNumber:
        if amount - context.tradeNumber >= 0:
            logger.info("执行高抛交易,对应数量:{}".format(context.tradeNumber))
            order_shares(context.s1, -context.tradeNumber)
            plot("S", newPrice)
        else:
            logger.info("股票数量不足,无法执行高抛交易,对应数量:{}".format(amount))
            return    
        
        calc_next_trade_price(context,newPrice)

        obj = {
            "nextSellPrice":context.nextSellPrice,
            "nextBuyPrice":context.nextBuyPrice,
            "curTradePrice":context.curTradePrice
        }
        context.buyTradeList.append(obj)

    if newPrice <= context.nextBuyPrice:
        context.lastTradeType = 0
        logger.info("执行低吸交易,对应价格:{}".format(newPrice))
        amount = int(context.portfolio.cash / newPrice / 100.0)  * 100
        if amount >= context.tradeNumber:
            logger.info("执行低吸交易,对应数量:{}".format(context.tradeNumber))
            order_shares(context.s1, context.tradeNumber)
            plot("B", newPrice)
        else:
            logger.info("现金不足,无法执行低吸交易,对应数量:{}".format(amount))
            return    

        calc_next_trade_price(context,newPrice)
       
        obj = {
            "nextSellPrice":context.nextSellPrice,
            "nextBuyPrice":context.nextBuyPrice,
            "curTradePrice":context.curTradePrice
        }
        context.sellTradeList.append(obj)

总体来说,代码逻辑还是比较简单,就是对价格的涨跌进行处理,其参数设置在日内上涨2%的时候卖出,下跌2%的时候买入,初始买入资金比例7成,锁定最低仓位5成。然后运行回测,其结果如下

Image

回测收益:5.501%

回测年化收益:6.839%

基准收益:19.26%

可以看到日内做T这种高频交易,在长期来看收益可能并不高,适合在短期价格内运行。

 

四、总结

我是启航。这个量化平台在笔者的熟悉情况下,它可以很方便的回测你的交易策略,但是在股价盯盘上,或者自定义逻辑上支持的不是很完善,很多功能也是需要收费才能使用。本文基于Python,借助现有量化平台编写策略和回测分析,希望对大家的学习有所帮助。

最后需要本文代码的小伙伴,可以在同名公众号后台回复“价差交易”关键词进行获取,觉得不错,记得三连支持噢~

在这里插入图片描述

 文章到这里就结束了,感谢你的观看

说实在的,每次在后台看到一些读者的回应都觉得很欣慰,我想把我收藏的一些编程干货贡献给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤    Python所有知识点汇总(可以弄清楚Python的所有方向和技术)

*如果你用得到的话可以直接拿走,在我的QQ技术交流群里,可以自助拿走,群号是857113825。*
在这里插入图片描述

以上是关于python 了解量化交易的主要内容,如果未能解决你的问题,请参考以下文章

FIL挖矿比特币以太坊行情分析(数字货币量化交易app)2021.4.24

比特币今日盘面观点跟资讯106/CCR量化炒币机器人+挖矿

共识实验室“数字货币交易超级联赛(第三届)KOL精英赛”将于4月中旬正式启动

python异步加协程获取比特币市场信息

比特币之隔离见证

一起学习比特币白皮书--交易--比特币长什么样子?