量化交易策略:经典量化交易策略大汇总(内附开通方法)

01、什么是量化交易?

量化交易是一种依赖于先进的数学模型和计算机技术的交易方式,旨在制定能带来超额收益的多种“大概率”事件策略。

这个过程从大量的历史数据中筛选,极大地减少了投资者情绪波动的影响,避免了在市场极度狂热或悲观的情况下作出非理性的投资决策

这种交易方式不依赖人的主观判断,而是以数学模型替代,通过分析数据和趋势来制定交易策略。

比如可以利用Python语言实现布林线策略,并以特定指数为例绘制交易信号图。

此外,量化交易并不局限于某一特定的交易方法,例如股票多因子策略(阿尔法)、期货CTA策略等都可以被认为是量化交易的方法。

总的来说,量化交易就是利用计算机技术从庞大的历史数据中筛选出能带来超额收益的事件以制定策略并进行交易的过程。

02、详解十种量化交易经典策略

量化交易策略模型是量化交易的核心,而一些经典的量化交易策略更是被视为量化交易的基石

这些策略包括:

一、市场中性策略:

市场中性策略是一种投资策略,旨在通过同时构建多头和空头头寸以对冲市场风险,从而实现无论市场上涨或下跌环境下都能获得稳定收益。

这种策略不依赖市场的上涨或下跌来赚钱,而是通过对整体收益的保护来获取利润。

中性策略的构建方式多种多样,其主要分为股票多头端、对冲端及中性三部分。

其中,股票多头端通常采用量化多头策略,这是因为在当前市场环境下,主观多头策略所采用的主要投资方式(中长周期、集中持仓等)难以通过对冲有效获取稳定收益,不符合股票中性策略设计的初衷。

对冲端则是利用各类对冲工具建立空头头寸进行对冲,以达到对系统性风险的敏感度为0的目标。

目前市场上股票中性策略所使用的对冲工具主要为股指期货及场内外融券两类。

二、均值回归策略:

均值回归策略是一种广泛应用于量化交易中的策略,它依赖于股票价格无论高于均值回归策略是一种广泛应用于量化交易中的策略,它依赖于股票价格无论高于或低于价值中枢都会以很高的概率向价值中枢回归的趋势,即当标的价格由于波动而偏离移动的均线时,它将调整并重新归于均线。

这是一种赌趋势反转的策略,与趋势跟踪策略——赌趋势的继续不同。

均值回归策略的运行方式可以有多种。

例如,可以利用股票每天的平均回报率来找出股票回报率的分布,然后找出标准差(即均值),设定交易策略,如当回报率的pct change高于+5σ时卖出,低于-5σ时买入等。

另外,相对强弱指数(RSI)也是一个重要的工具,它是利用14天股票数据计算出来的,由0-100,超过70时为超买,低于30时为超卖。

通过计算RSI和股价的pct_change,可以帮助我们找出市场在指定RSI数值下的情绪及表现,从而制定有效的交易策略。

三、套利策略:

套利策略是一种广泛应用在金融市场中的交易方式,它依赖于同一种资产在不同市场或不同时间的价格差异,即“一价定律”。

投资者通过低买高卖的方式,利用这些价格差异获取收益。

套利策略的种类繁多,主要包括期货套利、统计套利和期权套利等。

期货套利策略是最常见的一种,它利用期货市场上不同合约之间的价差进行套利的交易行为。

根据具体的合约选择与策略构建,通常可以分为跨期套利、跨品种套利、跨市场套利三类策略。

跨期套利策略是同一市场中相同品种的不同月份期货合约之间的套利交易;

跨市场套利策略是不同市场内相同品种或高相关性品种期货合约之间的套利交易;

跨品种套利策略是高相关性品种间同一到期月份期货合约之间的套利交易。

此外,统计套利和期权套利也是重要的套利策略。

统计套利是通过分析历史数据,找出金融资产价格之间的关系,从而制定交易策略。

期权套利则是利用期权价格与标的资产价格之间的关系进行套利。

四、趋势跟踪策略:

趋势跟踪策略是一种主流且盈利能力强的交易策略,它的基本思想是“顺势而为”,即在市场存在趋势时,通过跟随趋势方向来获取收益。

这种策略通常遵循非常明确的准则:当进入信号出现时买入,退出信号出现时卖出;

价格是最重要的因素,同时资产管理和风险控制也是非常重要的组成部分。

最为经典的趋势跟踪策略之一是唐奇安通道突破系统,也被称为“四周规则”

这个系统最原始的版本是在创20个交易日新高之后买入,创20个交易日新低之后卖出。

这是一种无需任何指标的策略,仅需对两个价格的突破进行判断,便可以创下不菲的交易成绩。

五、统计套利策略:

统计套利是一种量化交易策略,这种策略依赖于数学模型和历史数据分析,而不依赖于市场环境。

它的基本操作方法是将股票价格与模型预测的理论价值进行对比,然后根据这个对比结果构建证券投资组合的多头和空头,从而获取稳定的无风险超额收益率。

统计套利最常见的策略是配对交易策略

在配对交易中,投资者会选择两只股票(或更多)进行交易,其中一只股票被买入,而另一只则被卖空,从而建立起一个市场中性的头寸。

如果这两只股票的价格发生同幅度的涨跌,那么无论市场走势如何,这个策略都能带来利润。

六、事件驱动策略:

事件驱动策略是一种主流且成熟的对冲基金投资策略,它依赖于重大的公司事件或转变来获取投资收益。

这种策略的运作方式通常涉及到并购套利、定向增发、大宗交易和复合策略等多种子策略。

并购套利是其中的一种常见形式,它是通过利用企业合并前后的价格差异来获取利润。

在实际操作中,投资者会在预测到两家公司可能会合并的情况下,购买其中一家公司的股票,并卖空另一家公司的股票。

如果这个预测成真,那么无论合并后的公司股票价格上涨还是下跌,投资者都能从中获利。

七、量价分析策略:

量价分析是一种主流的交易策略,它依赖于对价格、交易量以及持仓量三者之间关系的深入理解。

这种策略的目标是通过对市场价格走势和交易量的观察来预测未来的价格变化。

在具体应用时,投资者会密切关注成交量这一重要指标,因为它是股票市场供求关系的表现形式,反映了买卖双方对某只股票即时价格的认可度。

交易量的大小表明了交易者在不同价位上买卖股票的数量,代表了股票的活跃程度和流通性,并由此透露出市场的人气买卖意愿。

根据股价与成交量的不同关系,投资者将量价之间的关系进行了详细的分类,总结出了六种基本形式量增价跌、量增价平、量增价涨、量缩价跌、量缩价平、量缩价涨

此外,还有如无量涨停(一字板)、无量跌停、底部放量、地量地价、天量天价等六种特殊的情况。

八、质量轮动策略:

质量轮动策略是一种投资策略,其基本理念是通过对市场上不同资产的质量进行评估和比较,进而发现并利用价值被低估的资产。

这种策略通常涉及对股票、债券等多类资产的全面研究,包括企业的财务健康状况、经营业绩、市场地位以及行业前景等多个方面。

在实际操作中,质量轮动策略的构建首先需要确定候选池,即待分析的股票或其他资产列表。

然后,投资者会对这些资产进行详细的质量评估,并将它们按照质量的高低进行排序。

接下来,投资者会选择质量最高的若干资产进行投资,同时定期对已投资产进行再评估,以确保投资组合内的资产始终是市场上最优质的。

九、风险平价策略:

风险平价策略是一种投资策略,旨在平衡投资组合中各资产类别的风险贡献度,以实现投资组合风险的最优化。

这种策略的核心理念是通过对不同类别资产的权重进行平衡配置,将整个投资组合的风险均匀地分配到各个资产中去。

在实施风险平价策略时,投资者首先需要确定候选池,即待分析的股票或其他资产列表。

然后,对这些资产进行详细的风险评估,并将它们按照风险的大小进行排序。

接下来,投资者会选择风险最高的若干资产进行投资,同时定期对已投资产进行再评估,以确保投资组合内的资产始终保持均衡的风险分布。

十、CTA策略:

CTA策略,全称为商品交易顾问策略(Commodity Trading Advisor Strategy),是一种主要应用于期货和期权市场的策略。

这种策略的核心思想是通过对市场趋势的追踪,以此作为投资决策的依据。

在实施CTA策略时,投资者首先需要确定一个候选资产列表,这些资产通常是期货,例如股指期货、大宗商品期货和国债期货等。

然后,投资者会对这些资产的价格走势进行详尽的研究,以便找出可能的价格波动范围或者长短期均线的变化模式。

当价格突破这些设定的范围或模式时,投资者会采取相应的交易行动。

03、如何将量化交易策略运用到实战中

投资者了解了每一种量化交易策略的基本逻辑以后,需要自己写好相应的代码,然后运用到量化交易软件上进行回测,看一看这策略在过去的几年行情走势中的实战效果如何,如不理想,还需要进行代码更改。

那么如何在量化交易软件回测的选择上,我们应该如何选择量化交易软件?

这里给大家介绍两款国内主流的量化交易软件:迅投QMT和恒生Ptrade。可以私信或留言博主获取免费软件。佣金股票万一,ETF万0.5,可转债上海万0.44、深圳万0.5,融资5%。

在我们回测好某种交易逻辑可行以后,我们将会把量化交易运用到实战里,这时,我们需要找到量化交易软件的对接端口。

那么怎么对接QMT和Ptrade端口呢,建议投资者直接找证券公司的专业客户经理。

下面给大家介绍一个量化实用策略:

获取行情信息

get_history - 获取历史行情

get_history(count, frequency='1d', field='close', security_list=None, fq=None, include=False, fill='nan', is_dict=False)

使用场景

该函数仅在回测、交易模块可用

接口说明

该接口用于获取最近N条历史行情K线数据。支持多股票、多行情字段获取。

注意事项:

该接口只能获取2005年后的数据。

针对停牌场景,我们没有跳过停牌的日期,无论对单只股票还是多只股票进行调用,时间轴均为二级市场交易日日历,停牌时使用停牌前的数据填充,成交量为0,日K线可使用成交量为0的逻辑进行停牌日过滤。

参数

count: K线数量,大于0,返回指定数量的K线行情;必填参数;入参类型:int;

frequency:K线周期,现有支持1分钟线(1m)、5分钟线(5m)、15分钟线(15m)、30分钟线(30m)、60分钟线(60m)、120分钟线(120m)、日线(1d)、周线(1w/weekly)、月线(mo/monthly)、季度线(1q/quarter)和年线(1y/yearly)频率的数据;选填参数,默认为'1d';入参类型:str;

field:指明数据结果集中所支持输出的行情字段;选填参数,默认为['open','high','low','close','volume','money','price'];入参类型:list[str,str]或str;输出字段包括:

  • open -- 开盘价,字段返回类型:numpy.float64;
  • high -- 最高价,字段返回类型:numpy.float64;
  • low --最低价,字段返回类型:numpy.float64;
  • close -- 收盘价,字段返回类型:numpy.float64;
  • volume -- 交易量,字段返回类型:numpy.float64;
  • money -- 交易金额,字段返回类型:numpy.float64;
  • price -- 最新价,字段返回类型:numpy.float64;
  • preclose -- 昨收盘价,字段返回类型:numpy.float64(仅日线返回);
  • high_limit -- 涨停价,字段返回类型:numpy.float64(仅日线返回);
  • low_limit -- 跌停价,字段返回类型:numpy.float64(仅日线返回);
  • unlimited -- 判断查询日是否是无涨跌停限制(1:该日无涨跌停限制;0:该日不是无涨跌停限制),字段返回类型:numpy.float64(仅日线返回);

security_list:要获取数据的股票列表;选填参数,None表示在上下文中的universe中选中的所有股票;入参类型:list[str,str]或str;

fq:数据复权选项,支持包括,pre-前复权,post-后复权,dypre-动态前复权,None-不复权;选填参数,默认为None;入参类型:str;

include:是否包含当前周期,True –包含,False-不包含;选填参数,默认为False;入参类型:bool;

fill:行情获取不到某一时刻的分钟数据时,是否用上一分钟的数据进行填充该时刻数据,'pre'–用上一分钟数据填充,'nan'–NaN进行填充(仅交易有效);选填参数,默认为'nan';入参类型:str;

is_dict:返回是否是字典(dict)格式{str: array()},True –是,False-不是;选填参数,默认为False;返回为字典格式取数速度相对较快;入参类型:bool;

返回

第一种返回数据:

当获取单支股票(单只股票必须为字符串类型security_list='600570.SS',不能用security_list=['600570.SS'])的时候,无论行情字段field入参单个或多个,返回的都是pandas.DataFrame对象,行索引是datetime.datetime对象,列索引是行情字段,为str类型。比如:

如果当前时间是2017-04-18,get_history(5, '1d', 'open', '600570.SS', fq=None, include=False)将返回:

open
2017-04-1140.30
2017-04-1240.08
2017-04-1340.03
2017-04-1440.04
2017-04-1739.90

第二种返回数据:

当获取多支股票(多只股票必须为list类型,特殊情况:当list只有一个股票时仍然当做多股票处理,比如security_list=['600570.SS'])的时候,如果行情字段field入参为单个,返回的是pandas.DataFrame对象,行索引是datetime.datetime对象,列索引是股票代码的编号,为str类型。比如:

如果当前时间是2017-04-18,get_history(5, '1d', 'open', ['600570.SS','600571.SS'], fq=None, include=False)将返回:

600570.SS600571.SS
2017-04-1140.3017.81
2017-04-1240.0817.56
2017-04-1340.0317.42
2017-04-1440.0417.40
2017-04-1739.9017.49

第三种返回数据:

当获取多支股票(多只股票必须为list类型,特殊情况:当list只有一个股票时仍然当做多股票处理,比如security_list=['600570.SS'])的时候,如果行情字段field入参为多个,则返回pandas.Panel对象,items索引是行情字段(如'open'、'close'等),里面是很多pandas.DataFrame对象,每个pandas.DataFrame的行索引是datetime.datetime对象, 列索引是股票代码,为str类型,比如:

如果当前时间是2015-01-07,get_history(2, frequency='1d', field=['open','close'], security_list=['600570.SS', '600571.SS'], fq=None, include=False)['open']将返回:

600570.SS600571.SS
2015-01-0554.7726.93
2015-01-0651.0025.83

假如要对panel索引中的对象进行转换,比如将items索引由行情字段转换成股票代码,可以通过panel_info = panel_info.swapaxes("minor_axis", "items")的方法转换。

比如:

panel_info = get_history(2, frequency='1d', field=['open','close'], security_list=['600570.SS', '600571.SS'], fq=None, include=False)

按默认索引:df = panel_info['open']

对默认索引做转换:panel_info = panel_info.swapaxes("minor_axis", "items")

转换之后的索引:df = panel_info['600570.SS']

关于numpy和pandas,请看下面的第三方库介绍。

示例

def initialize(context):
    g.security = ['600570.SS', '000001.SZ']
    set_universe(g.security)

def before_trading_start(context, data):
    # 获取农业版块过去10天的每日收盘价
    industry_info = get_history(10, frequency="1d", field="close", security_list="A01000.XBHS")
    log.info(industry_info)

def handle_data(context, data):
    # 股票池中全部股票过去5天的每日收盘价
    his = get_history(5, '1d', 'close', security_list=g.security)
    log.info('股票池中全部股票过去5天的每日收盘价')
    log.info(his)

    # 获取600570(恒生电子)过去5天的每天收盘价,
    # 一个pd.Series对象, index是datatime
    log.info('获取600570(恒生电子)过去5天的每天收盘价')
    log.info(his['600570.SS'])

    # 获取600570(恒生电子)昨天(数组最后一项)的收盘价
    log.info('获取600570(恒生电子)昨天的收盘价')
    log.info(his['600570.SS'][-1])

    # 获取股票池中全部股票昨天的收盘价
    log.info('获取股票池中全部股票昨天的收盘价')
    log.info(his.iloc[-1])

    # 获取600570(恒生电子)昨天(数组最后一项)的收盘价
    log.info('获取600570(恒生电子)昨天的收盘价')
    log.info(his.iloc[-1]['600570.SS'])

    # 取得每一列的平均值
    log.info('取得每一列的平均值')
    log.info(his.mean())

    # 获取股票池中全部股票的过去10分钟的成交量
    his1 = get_history(10, '1m', 'volume')
    log.info('获取股票池中全部股票的过去10分钟的成交量')
    log.info(his1)

    # 获取恒生电子的过去5天的每天的收盘价
    his2 = get_history(5, '1d', 'close', security_list='600570.SS')
    log.info('获取恒生电子的过去5天的每天的收盘价')
    log.info(his2)

    # 获取恒生电子的过去5天的每天的后复权收盘价
    his3 = get_history(5, '1d', 'close', security_list='600570.SS', fq='post')
    log.info('获取恒生电子的过去5天的每天的后复权收盘价')
    log.info(his3)

    # 获取恒生电子的过去5周的每周的收盘价
    his4 = get_history(5, '1w', 'close', security_list='600570.SS')
    log.info('获取恒生电子的过去5天的每天的收盘价')
    log.info(his4)

    # 获取多只股票的开盘价和收盘价数据
    panel_info = get_history(2, frequency='1d', field=['open','close'], security_list=g.security)
    open_df = panel_info['open']
    log.info('获所有股票的取开盘价数据')
    log.info(open_df)
    df = open_df['600570.SS']
    log.info('仅获取恒生电子的开盘价数据')
    log.info(df)
    
    # panel索引中的对象进行转换
    panel_info2 = panel_info.swapaxes("minor_axis", "items")
    df = panel_info2['600570.SS']
    log.info('仅获取恒生电子的开盘价和收盘价数据')
    log.info(df)
    open_df = df['open']
    log.info('获取恒生电子的开盘价数据')
    log.info(open_df)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/628352.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海外住宅IP介绍

住宅IP,通俗的来讲就是分配给家庭的IP地址,ISP默认分配用户为家庭用户,其真实性与安全性都有一定保障。海外住宅IP是指由海外互联网服务提供商分配给家庭用户的IP地址,IP地址通常是静态的,稳定的,可以为用户…

第二证券今日投资参考:美宣布对华电动汽车等加征关税 AI应用或加速落地

昨日,两市股指早盘一度拉升,随后震动回落,盘中保持窄幅震动收拾走势。截至收盘,沪指微跌0.07%报3145.77点,深证成指跌0.05%报9668.73点,创业板指跌0.26%报1855.6点,北证50指数涨0.74%&#xff1…

python将两张图片对齐

目录 需要对齐的照片如下: 源码: 结果: 需要对齐的照片如下: 源码: import cv2 import numpy as np from matplotlib import pyplot as plt# 读取两张图片 imgA cv2.imread(./out/out/3.png) imgB cv2.imread(./…

高德地图简单复制操作两分钟就能有近10元的收益日入500+无上限

嘿,伙计们,今天我要告诉你们一个赚钱的好方法,这个方法真的很简单,而且你可以在家里就能操作,不需要出门,不需要见人,只需要你会复制粘贴就行了,是不是很吸引人?好&#…

FullCalendar日历组件集成实战(5)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

摆脱手工录入烦恼,OCR技术大幅提高增值税发票处理效率

最近,我邂逅了一位得力助手——OCR技术,它犹如一位神通广大的魔法师,为增值税发票处理带来了翻天覆地的变革! 曾几何时,处理增值税发票如同走进了一片迷雾重重的森林,每一步都小心翼翼,生怕出错…

AI绘画进阶工具ComfyUI 傻瓜整合包安装教程!模型共享,一键安装!

哈喽大家好,今天给大家分享一下AI绘画工具Stable Diffusion的另一种UI界面,常见的有: 窗口式界面的WebUI 节点式工作流的ComfyUI ComfyUI更加进阶一些,是一个节点式工作流的AI绘画界面,它高度可定制、自定义编辑Ai生…

数据结构_链表基本操作的实现_代码_例题

一、基本操作实现 1.按位序插入(带头节点) 2.按位序插入(不带头节点) 3.指定结点的后插操作 4.指定结点的前插操作 5.按位序删除(带头节点) 6.指定结点的删除 7.按位查找,返回第i个元素&…

Axure RP移动端交互元件库/交互原型模板

作品类型:元件库/原型模板 更新日期:2023-12-04 当前版本:V1.3 适用范围:App应用/小程序 Axure版本:Axure 9.0均可打开 文件大小:36.7M 历时两个月制作并整理了手机移动端常用的75种组件、90个常用界面模板…

Spring注解驱动开发

1、Spring注解驱动开发图解

英语单词量测试

网址:https://preply.com/en/learn/english/test-your-vocab 测试结果: 细节:英语母语者有20000-35000个单词的词汇量,8岁孩子的词汇量在8000个左右。而不是我们教育系统里说的,6000个单词足够用了。足够用&#xff0…

MSR810-LM快速配置通过LTE模块上网

正文共:1111 字 13 图,预估阅读时间:1 分钟 之前买了一个无线版本的MSR810-W(淘了一台二手的H3C企业路由器,就用它来打开网络世界的大门),并整理了一份快速配置(脚本案例来了&#x…

在pycharm添加pyqt5外部工具插件

一:查看环境所在位置以及安装pyqt5库 1、打开anaconda,输入以下命令,查看环境名,以及环境所在位置。 conda info --envs 从图中得知以下信息,下面根据自己实际情况,记住环境名和路径 ①环境名是&#xf…

redis报错500

之前自己举一反三把value也给序列化了: 然后报错了: 原因是这里传入的是Integer类型,序列化的话就变为string类型了

【Linux】-IP地址、主机名配置[5]

目录 一、IP和主机名 1、IP地址 2、特殊IP地址 3、主机名 4、在Linux中修改主机名 5、配置主机名映射 二、虚拟机配置固定IP 1、为什么需要固定IP 2、在VMware Workstation中配置固定ip 一、IP和主机名 1、IP地址 每一台联网的电脑都会有一个地址,用于和…

ALV 红绿灯

前言 在ABAP ALV中,LIGHTS_FIELDNAME参数是用于实现行级视觉指示或“灯光效果”的一个重要设置项,尤其适用于标记或突出显示列表中符合特定条件的行。这个参数通常是在定义ALV布局(使用结构如LVC_S_LAYOUT或通过SALV类的相应方法)…

IDEA 每次启动都显示选择项目页面

IDEA版本:2021.3.3 打开 Settings > Appearance & Behavior > System Settings 取消勾选 Reopen projects on startup 然后下次启动 IDEA 会显示选择项目页面

Flutter 3.22 发布,快来看看有什么更新吧?

Flutter 3.22 发布,快来看看有什么更新吧? 本次 Flutter 跟随 Google I/O 发布的版本是 3.22 ,该版本主要还是带来了 Vulkan backend 和 Wasm Native 的落地,另外还有一个重点就是 Dart macros ,但是它更多只是一个预…

2025年第十一届北京国际印刷技术展览会

2025年第十一届北京国际印刷技术展览会 展览时间:2025年5月15-19日 展览地点:北京中国国际展览中心(顺义馆) 主办单位:中国印刷及设备器材工业协会中国国际展览中心集团有限公司 承办单位:北京中印协华港国…

2023年国赛高教杯数学建模B题多波束测线问题解题全过程文档及程序

2023年国赛高教杯数学建模 B题 多波束测线问题 原题再现 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀速直线传播,在不同界面上产生反射,利用这一原理,从测量船换能器垂直向海底发射声波信号&#xff…