+ - 0:00:00
Notes for current slide
Notes for next slide

量化金融与金融编程

L01 开课啦 📅


曾永艺

厦门大学管理学院

2022-09-16

1 / 31

1. 课程简介

3 / 31

{{知乎神回复}}

Q:考上好大学学 IT 是不是当今中国穷人家孩子晋级中产唯一的出路?

4 / 31

{{知乎神回复}}

Q:考上好大学学 IT 是不是当今中国穷人家孩子晋级中产唯一的出路?

A:对,就4条路:写代码;搞金融;在代码圈搞金融;在金融圈写代码

4 / 31

1.1 量化金融 与 金融编程

  • Paul Wilmott著,郑振龙 等译,机械工业出版社,2015年
6 / 31

1.1 量化金融 与 金融编程

  • Paul Wilmott著,郑振龙 等译,机械工业出版社,2015年
  • 83章,1200+页!

    • 第一部分 数理与金融基础、衍生品基本理论、风险与收益

    • 第二部分 奇异合约及路径依赖

    • 第三部分 固定收益的建模和衍生品

    • 第四部分 信用风险

    • 第五部分 进阶主题

6 / 31

1.1 量化金融 与 金融编程

  • Paul Wilmott著,郑振龙 等译,机械工业出版社,2015年
  • 83章,1200+页!

    • 第一部分 数理与金融基础、衍生品基本理论、风险与收益

    • 第二部分 奇异合约及路径依赖

    • 第三部分 固定收益的建模和衍生品

    • 第四部分 信用风险

    • 第五部分 进阶主题

🚀 🚪

6 / 31

1.1 量化金融 与 金融编程 R 语言编程

7 / 31

1.1 量化金融 与 金融编程 R 语言编程




  • "free software environment for ..."

  • "... statistical computing and graphics"

7 / 31

1.1 量化金融 与 金融编程 R 语言编程




  • "free software environment for ..."

  • "... statistical computing and graphics"

  • 支持 Windows、MacOS、Unix 等众多主流操作系统

  • 功能强大,“几乎”应有尽有

  • 学习曲线适中

  • 良好的编程社区支持

  • 免费、开源!

7 / 31

9 / 31

1.2 学好这门课的正确方式

10 / 31

1.2 学好这门课的正确方式


🤔

10 / 31

1.2 学好这门课的正确方式

☑ 掌握科学的workflow,提升效率


11 / 31

1.2 学好这门课的正确方式

12 / 31

1.2 学好这门课的正确方式

☑ Start with tidyverse

{{R Markdown}} | {{Quarto}}

  • 将( ...)代码(及其动态计算结果,如图表等)和 文字汇编成文档,并可转化为多种格式的输出
    -> efficient and reproducible research


☑ Stay in  

12 / 31

1.2 学好这门课的正确方式

13 / 31

1.2 学好这门课的正确方式

task导向,掌握核心 📦

13 / 31

1.2 学好这门课的正确方式

task导向,掌握核心 📦

  • 专题任务

    • 数据搜集-整理-可视化

    • 投资组合优化

    • 资产定价模型

    • 衍生品定价

    • 量化交易策略

    • 实证研究文献复刻 ...

13 / 31

1.2 学好这门课的正确方式

task导向,掌握核心 📦

  • 专题任务

    • 数据搜集-整理-可视化

    • 投资组合优化

    • 资产定价模型

    • 衍生品定价

    • 量化交易策略

    • 实证研究文献复刻 ...

  • {{CRAN Task views}}

    • Econometrics
    • Finance
    • TimeSeries
    • Optimization
    • MachineLearning
    • Graphics
    • ReproducibleResearch ...
13 / 31

1.2 学好这门课的正确方式

practice makes perfect!  🏋 ➡️ 💯!

纸上得来终觉浅,绝知此事要躬行。

      ——陆游·冬夜读书示子律

14 / 31

1.2 学好这门课的正确方式

practice makes perfect!  🏋 ➡️ 💯!

纸上得来终觉浅,绝知此事要躬行。

      ——陆游·冬夜读书示子律

  • 课上 2 学时/周

    • 我:围绕工作流程讲解核心 R 包

    • 同学:听讲 + 练习 + 反馈

  • 课后 4 小时/周

    • 同学:课前预习 + 课后作业

    • 我:(在线)答疑解惑

14 / 31

1.2 学好这门课的正确方式

practice makes perfect!  🏋 ➡️ 💯!

纸上得来终觉浅,绝知此事要躬行。

      ——陆游·冬夜读书示子律

  • 课上 2 学时/周

    • 我:围绕工作流程讲解核心 R 包

    • 同学:听讲 + 练习 + 反馈

  • 课后 4 小时/周

    • 同学:课前预习 + 课后作业

    • 我:(在线)答疑解惑

  • 课程的成绩构成:

    • 考勤+课堂参与:10%

    • 个人作业/随堂小测:50%

    • 小组研究项目:40% *

* 每个小组 ~ 4 名同学 

14 / 31

1.3 谁该选这门课?

15 / 31

1.3 谁该选这门课?

☑ 想继续读研深造的同学

15 / 31

1.3 谁该选这门课?

☑ 想继续读研深造的同学

☑ 毕业后想和金融(🤑)、数据打交道的同学

15 / 31

1.3 谁该选这门课?

☑ 想继续读研深造的同学

☑ 毕业后想和金融(🤑)、数据打交道的同学

☑ 想更好理解金工、固收、金融数学、风险管理等专业课程的同学

15 / 31

1.3 谁该选这门课?

☑ 想继续读研深造的同学

☑ 毕业后想和金融(🤑)、数据打交道的同学

☑ 想更好理解金工、固收、金融数学、风险管理等专业课程的同学

☑ 希望能学习并掌握酷炫好玩新工具和新“姿势”的同学

15 / 31

1.3 谁该选这门课?

☑ 想继续读研深造的同学

☑ 毕业后想和金融(🤑)、数据打交道的同学

☑ 想更好理解金工、固收、金融数学、风险管理等专业课程的同学

☑ 希望能学习并掌握酷炫好玩新工具和新“姿势”的同学

☑ 其他 ……

15 / 31

2. RStudio 概览

< R 语言的赋能工具!>

16 / 31

>> RStudio 为 R 赋能 {{rstudio-IDE-cheatsheet}} {{本地pdf版本}}

17 / 31

>> RStudio 快捷键

- Search command history Ctrl+↑
- Interrupt current command Esc
- Clear console Ctrl+L
- Restart R Session Ctrl+Shift+F10
- Run current line/selection Ctrl+Enter
- Attempt completion Tab or Ctrl+Space
- Insert <- Alt+-
- Insert %>% Ctrl+Shift+M
- (Un)Comment lines Ctrl+Shift+C
- Knit document (knitr) Ctrl+Shift+K
- Insert chunk Ctrl+Alt+I
- Run the current chunk Ctrl+Alt+C
- Search shortcuts Ctrl+Shift+P
- Keyboard shortcuts help Alt+Shift+K
18 / 31

>> RStudio's



19 / 31

3. SOS

(getting help)

20 / 31

>> help()

help(topic, package = NULL, lib.loc = NULL,
verbose = getOption("verbose"),
try.all.packages = getOption("help.try.all.packages"),
help_type = getOption("help_type"))
21 / 31

>> help()

help(topic, package = NULL, lib.loc = NULL,
verbose = getOption("verbose"),
try.all.packages = getOption("help.try.all.packages"),
help_type = getOption("help_type"))
help(mean) # ?mean
help("for") # ?"for"
help(files) # ?files
help(package = "fs") # package?fs
#-----------------------------------
example(topic, package = NULL,
lib.loc = NULL, ...)
vignette(topic, package = NULL,
lib.loc = NULL,
all = TRUE)
browseVignettes(package = NULL,
lib.loc = NULL,
all = TRUE)
21 / 31

>> help()

help(topic, package = NULL, lib.loc = NULL,
verbose = getOption("verbose"),
try.all.packages = getOption("help.try.all.packages"),
help_type = getOption("help_type"))
help(mean) # ?mean
help("for") # ?"for"
help(files) # ?files
help(package = "fs") # package?fs
#-----------------------------------
example(topic, package = NULL,
lib.loc = NULL, ...)
vignette(topic, package = NULL,
lib.loc = NULL,
all = TRUE)
browseVignettes(package = NULL,
lib.loc = NULL,
all = TRUE)

21 / 31

>> help.search() & RSiteSearch()

help.search(pattern, fields = c("alias", "concept", "title"),
apropos, keyword, whatis, ignore.case = TRUE,
package = NULL, lib.loc = NULL,
help.db = getOption("help.db"),
verbose = getOption("verbose"), rebuild = FALSE,
agrep = NULL, use_UTF8 = FALSE,
types = getOption("help.search.types"))
22 / 31

>> help.search() & RSiteSearch()

help.search(pattern, fields = c("alias", "concept", "title"),
apropos, keyword, whatis, ignore.case = TRUE,
package = NULL, lib.loc = NULL,
help.db = getOption("help.db"),
verbose = getOption("verbose"), rebuild = FALSE,
agrep = NULL, use_UTF8 = FALSE,
types = getOption("help.search.types"))
# Search for key words or phrases in help pages, vignettes or task views,
# using the search engine at http://search.r-project.org and view them
# in a web browser.
RSiteSearch(string,
restrict = c("functions", "descriptions", "news", "Rfunctions",
"Rmanuals", "READMEs", "views", "vignettes"),
format,
sortby = c("score", "date:late", "date:early", "subject",
"subject:descending", "size", "size:descending"),
matchesPerPage = 20,
words = c("all", "any"))
22 / 31

>> sos::findFn() & packagefinder::fp()

# Search Contributed R Packages, Sort by Package
# install.packages("sos")
help(package = "sos")
sos::findFn(string, maxPages = 100, sortby = NULL, verbose = 1, ...)
## ???string(maxPages)
# Returns a data.frame from RSiteSearch(string, "functions") which can be
# sorted and subsetted by user specifications and viewed in an HTML table.
23 / 31

>> sos::findFn() & packagefinder::fp()

# Search Contributed R Packages, Sort by Package
# install.packages("sos")
help(package = "sos")
sos::findFn(string, maxPages = 100, sortby = NULL, verbose = 1, ...)
## ???string(maxPages)
# Returns a data.frame from RSiteSearch(string, "functions") which can be
# sorted and subsetted by user specifications and viewed in an HTML table.
# Comfortable Search for R Packages on CRAN
# remotes::install_github("jsugarelli/packagefinder")
help(package = "packagefinder")
findPackage(keywords = NULL, query = NULL, mode = "or",
case.sensitive = FALSE, always.sensitive = NULL,
weights = c(2, 2, 1, 2), display = "viewer",
results.longdesc = FALSE, limit.results = 15,
silent = FALSE, index = NULL,
advanced.ranking = TRUE, return.df = FALSE,
clipboard = FALSE)
23 / 31

>> {{CRAN Task views}}

# install.packages("ctv")
ctv::available.views(repos = "https://cran.r-project.org")[[14]]
#> CRAN Task View
#> --------------
#> Name: Finance
#> Topic: Empirical Finance
#> Maintainer: Dirk Eddelbuettel
#> Contact: Dirk.Eddelbuettel@R-project.org
#> Version: 2022-08-26
#> Repository: https://cran.r-project.org
#> Source: https://github.com/cran-task-views/Finance/
#> Packages: actuar, AmericanCallOpt, AssetCorr, backtest, bayesGARCH,
#> BCC1997, BenfordTests, betategarch, bidask, bizdays,
#> BLModel, bmgarch, bondAnalyst, BurStFin, BurStMisc,
#> CADFtest, car, ChainLadder, copula, copulaData, credule,
#> crseEventStudy, cvar, data.table, derivmkts, dlm,
#> DOSPortfolio, Dowd, DriftBurstHypothesis, dse, DtD, dyn,
#> dynlm, ESG, etrm, factorstochvol, fame, fAssets*,
#> FatTailsR, fBasics*, fBonds*, fCopulae*, fExtremes*,
#> FFdownload, fGarch*, fImport*, FinancialMath, FinAsym,
#> finreportr, fixedincome, fmdates, fMultivar*,
#> fNonlinear*, forecast, fPortfolio*, fracdiff, FRAPO,
#> fRegression*, frenchdata, fTrading*, GARCHSK, garchx,
#> GCPM, gets, GetTDData, ghyp, gmm, gogarch, greeks, GUIDE,
#> HDShOP, highfrequency, IBrokers, ichimoku, InfoTrad,
#> lgarch, lifecontingencies, lmForc, lmtest, longmemo,
#> LSMonteCarlo, LSMRealOptions, markovchain, MarkowitzR,
#> matchingMarkets, monobin, MSGARCH, mvtnorm,
#> NetworkRiskMeasures, NFCP, nlme, NMOF, nvmix,
#> obAnalytics, OptHedging, OptionPricing, pa, parma, pbo,
#> PeerPerformance, PerformanceAnalytics*,
#> PortfolioEffectHFT, PortfolioOptim, PortRisk, qrmdata,
#> qrmtools, quantmod, ragtop, Rblpapi, Rcmdr,
#> RcppQuantuccia, reinsureR, restimizeapi, Risk,
#> riskParityPortfolio, RiskPortfolios, riskSimul, RM2006,
#> rmgarch, RND, RQuantLib, RTL, rugarch*, sandwich, sde,
#> SharpeR, Sim.DiffProc, simfinapi, stochvol, strand,
#> strucchange, TAQMNGR, tidyquant, timeDate*, timeSeries*,
#> timsac, tis, tsDyn, tseries*, tseriesChaos, TTR, tvm,
#> ufRisk, urca*, vars, vrtest, wavelets, waveslim,
#> wavethresh, XBRL, xts*, zoo*
#> (* = core package)
24 / 31

>> 网络社区

25 / 31

>> 网络社区

  • 有问题就问 或者直接上
25 / 31

>> 网络社区

25 / 31

>> 网络社区

25 / 31

>> 网络社区


  • 登录
25 / 31

>> QQ课程群


26 / 31

>> 领域 + R 书籍

28 / 31

课后作业 与 课前预习

29 / 31


🕐 明确是否选修这门课程——若不选修,请于今天下午2点前在 {{厦门大学教学服务平台}} 上提出退课申请,我会在3点前完成审核

30 / 31


🕐 明确是否选修这门课程——若不选修,请于今天下午2点前在 {{厦门大学教学服务平台}} 上提出退课申请,我会在3点前完成审核


🕑 初步了解 RStudio 的工作界面,并大致浏览下 {{rstudio-IDE-cheatsheet}}

🕒 在 RStudio 命令窗口中键入 help(mean)help(files),了解 R 帮助文档的整体结构

🕓 到前面课件中提到的那些 {{网络社区}} 随意逛逛

🕔 2022年9月18日22:00前通过 {{坚果云链接}} 回答几道问题

30 / 31


🕐 明确是否选修这门课程——若不选修,请于今天下午2点前在 {{厦门大学教学服务平台}} 上提出退课申请,我会在3点前完成审核


🕑 初步了解 RStudio 的工作界面,并大致浏览下 {{rstudio-IDE-cheatsheet}}

🕒 在 RStudio 命令窗口中键入 help(mean)help(files),了解 R 帮助文档的整体结构

🕓 到前面课件中提到的那些 {{网络社区}} 随意逛逛

🕔 2022年9月18日22:00前通过 {{坚果云链接}} 回答几道问题


🕔 完成课前预习(具体任务下周三前我会在 QQ 课程群上通知)

30 / 31
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
oTile View: Overview of Slides
Esc Back to slideshow