当前位置: 首页 > article >正文

量化交易实操入门

量化交易实操入门

  • 检验策略效果
  • 量化交易策略基本框架
    • 例子
    • 回测、编译运行、运行回测都是什么意思?
    • 几个常用的下单函数
    • context含义和用法
    • 止损
  • 获取典型常用数据
    • 获取指数成分股
  • 量化交易综合策略实战
  • 量化课堂
    • 双均线策略
    • PEG估值法
    • Fama-French三因子模型
    • 凯利公式
      • 一般性的凯利公式

下面开始进行量化交易入门实操,选用的量化交易平台为聚宽,jointquant。

检验策略效果

假设现在计算机理解了你的策略,你现在可以借助计算机的力量来验证你的策略了。基本的检验策略方法有回测和模拟交易两种方法。

回测是让计算机能根据一段时间的历史数据模拟执行该策略,根据结果评价并改进策略。继续之前的那个均价的策略例子的话就是这样的:

设定初始的虚拟资产比如500000元、一个时期比如20060101到20160101,把这一时期的各种数据如估计股价行情等发给计算机,计算机会利用这些数据模仿真实的市场,执行你刚才告诉它的策略程序。最后计算机会给你一份报告,根据这个报告你就会知道,在20060101的500000元,按照你的策略交易到20160101,会怎样?一般包括盈亏情况,下单情况,持仓变化,以及一些统计指标等,从而你能据此评估交易策略的好坏。

如果结果不好,则需要分析原因并改进。如果结果不错,则可以考虑用模拟交易进一步验证。

模拟交易是让计算机能根据实际行情模拟执行该策略一段时间,根据结果评价并改进策略。与回测不同,回测是用历史数据模拟,模拟交易使用实际的实时行情来模拟执行策略的。举例就是这样:

设定初始的虚拟资产比如500000元,选择开始执行模拟交易的时间点,比如明天。那么从明天开始,股市开始交易,真实的行情数据就会实时地发送到计算机,计算机会利用真实的数据模仿真实的市场,执行你的策略程序。同时,你会得到一份实时更新的报告。这报告类似于回测得到的报告,不同的是会根据实际行情变化更新。同样你能据此评估交易策略的好坏。

可见,回测是用历史数据模拟执行策略,模拟交易是用未来的实际行情模拟执行策略。如果策略在回测与模拟交易的表现都非常好,你可以考虑进行完全真实的真金白银的实盘交易。

量化交易策略基本框架

一般最常见的为初始化+周期循环框架

初始化即指策略最开始运行前要做的事。比如,准备好要交易的股票。

周期循环即指策略开始后,随着时间一周期一周期地流逝时,每个周期要做的事。如例中,周期为天,周期循环的则是每天买100股的平安银行。

能帮助你理解这一框架的是,其实人本身日常做交易就是符合“初始化+周期循环”框架的,初始化就是已存在人脑的交易思想与知识,周期循环就是每天或每分钟地查看行情、判断、下单等行为。

例子

从一个非常简单的交易策略开始
先看一个非常简单的交易策略:

每天买100股的平安银行。
为了让这个策略能让计算机执行,首先,要使策略符合“初始化+周期循环”框架,像这样:

初始化:选定要交易的股票为平安银行
每天循环:买100股的平安银行

写法一

 def initialize(context):
      这里是用来写初始化代码的地方,例子中就是选定要交易的股票为平安银行

  def handle_data(context,data):
      这里是用来写周期循环代码的地方,例子中就是买100股的平安银行

写法二(更推荐)

def initialize(context):
      run_daily(period,time='every_bar')
      这里是用来写初始化代码的地方,例子中就是选定要交易的股票为平安银行

  def period(context):
      这里是用来写周期循环代码的地方,例子中就是买100股的平安银行

回测、编译运行、运行回测都是什么意思?

像刚刚那样,用一段时间内的历史的真实行情数据,来验证一个确定的交易策略在这段时间表现如何,这个过程叫回测

运行回测就是是字面意思,让计算机运行这次回测,运行后会告诉你策略在这段时间表现情况,比如收益率、年化收益率、最大回撤、夏普比率等指标,而且一般也会包括下单记录、持仓记录等。

编译运行其实也是让计算机运行这次回测,不过相比于点击运行回测,编译运行的结果比运行回测要简单,只有收益率等指标,因此也速度更快。所以,当还不必要得到详细的结果时,或只是想调试下策略的代码,看是否无误可运行时,编译运行就比运行回测更方便。

几个常用的下单函数

order(security,amount,style=None,side='long',pindex=0)
'''
secuity:标的代码
amount:交易数量
style: None表示MarketOrder
side:开空单还是多单,默认为多单,股票和基金不支持空单
pindex:默认为0,在多资金仓位时选择仓位的,股票一般用不到
'''
order_target(secuity,amount)
# 通过买卖,将股票仓位调整至一定的数量(单位:股)
# order_target("000001.XSHE",1000)
order_value(security,value)
#买卖一定价值量(单位:元)股票
order_target_value(security, value)
#通过买卖,将股票仓位调整至一定的价值量

context含义和用法

  • context是一个


http://www.kler.cn/a/442028.html

相关文章:

  • Netty的相关组件之间的关系
  • Java——Stream流的peek方法详解
  • 第12篇:从入门到精通:掌握python高级函数与装饰器
  • Mockito+PowerMock+Junit单元测试
  • 左神算法基础提升--3
  • 后盾人JS -- 好用的 JavaScript Symbol 类型
  • SQLite 安装与使用
  • vue的elementUI 给输入框绑定enter事件失效
  • 【C语言】指针数组和数组指针
  • 25上半年软考《电子商务设计师》,备考大纲已出!
  • 为什么 Teams 中搜索不到 Power Automate
  • 电脑开机提示error loading operating system怎么修复?
  • 新手谷歌浏览器的使用(使用国内的搜索引擎)
  • lc238除自身以外数组的乘积——动态规划前缀积
  • Java全栈项目 - 智能小区物业管理平台开发实践
  • 新知DAC维修,换牛,
  • Rust操作符和符号全解析
  • Java对集合的操作方法
  • 面试小札:闪电五连鞭_7
  • opencv # Sobel算子、Laplacian算子、Canny边缘检测、findContours、drawContours绘制轮廓、外接矩形
  • Sentry日志管理thinkphp8 tp8 sentry9 sentry8 php8.x配置步骤, tp8自定义异常处理类使用方法
  • NSDT 3DConvert:高效实现大模型文件在线预览与转换
  • 关于llama2:从原始llama-2-7b到llama-2-7b-hf的权重转换教程
  • cesium 与 threejs 对比
  • attack xv6
  • Pytorch | 从零构建ResNet对CIFAR10进行分类