用户名:密 码:注册|找回密码设置首页 | 股市论坛

当前位置 > 股市资讯网 > 中国财经 > 财经新闻 > LTR陈东阳:货币对的平均涨跌比

LTR陈东阳:货币对的平均涨跌比

发布时间:2018-02-01 18:29来源:中国股市在线作者:n02阅读:

  【作者简介】陈东阳,LTR首席基金经理,拥有多年量化交易经验,尤其擅长R语言,并精通外汇、商品期货和美股ETF等市场运行机制。坚信数学和编程是打败市场的唯一方式,擅长时间序列分析和统计建模,使用自动化模型进行分析和交易,定期测试模型的预测能力和平稳性,及时进行订单管理及风险管理。

  预测股票价格波动通常被视为分类问题,研究员使用逻辑回归,支持向量机等模型预测未来k个交易日会“上涨”或“下跌”。假设我们建立了一个模型,能够在80%的概率下预测未来一个交易日的波动,这是否意味着找到了打败市场的圣杯?答案是否定的,举个简单的例子,假设预测精度达到80%,但平均涨幅与平均跌幅之比低于0.25,仍然会亏损。在已知胜率p的情况下,平均盈亏比(盈利交易均值/亏损交易均值)必须大于(1/p-1)才能盈利。

  很多分类模型会预测未来一个交易日的涨跌概率,本文研究货币对的平均涨幅和平均跌幅,如果两者之比接近1.0,胜率超过50%的分类模型就有望盈利。

  library(tidyverse)

  library(lubridate)

  读取数据。

  get_data <- function(file) {

  # file: string, file path

  # return a dataframe contains OHLC

  if(!file.exists(file)) {

  stop("file doesn't exist.")

  }

  df <- read_csv(file, col_types = "c_dddd_",

  col_names = c("date", "open", "high", "low", "close"),

  skip = 1) %>%

  mutate(date = ymd(date))

  return(df)

  }

  currencys <- c("AUDUSD", "EURGBP", "EURUSD", "GBPJPY", "GBPUSD", "USDCAD", "USDJPY")

  destfiles <- paste("daily forex/", currencys, ".csv", sep = "")

  results <- vector("list", length(currencys))

  for(i in seq_along(results)) {

  results[[i]] <- get_data(destfiles[i]) %>%

  mutate(currency = currencys[i])

  }

  df <- bind_rows(results)

  查看数据结构。

  str(df)

  ## Classes 'tbl_df', 'tbl' and 'data.frame': 16420 obs. of 6 variables:

  ## $ date : Date, format: "2010-01-01" "2010-01-02" ...

  ## $ open : num 0.897 0.897 0.898 0.913 0.914 ...

  ## $ high : num 0.897 0.897 0.914 0.917 0.917 ...

  ## $ low : num 0.897 0.897 0.894 0.91 0.909 ...

  ## $ close : num 0.897 0.897 0.914 0.914 0.917 ...

  ## $ currency: chr "AUDUSD" "AUDUSD" "AUDUSD" "AUDUSD" ...

  选择样本:2010年1月至2017年6月30号。

日波动性:
。最后把日波动的单位转化成点数(pips),这样有利于对比。

  剔除周末数据,因为周末的波动性非常低,通常不会进场交易。

  df <- df %>%

  filter(date >= ymd("2010-01-01") & date <= ymd("2017-06-30")) %>%

  group_by(currency) %>%

  mutate(dclose = c(NA, diff(close))) %>%

  mutate(pips = ifelse(currency %in% c("USDJPY", "GBPJPY"),

  round(dclose * 100, 1),

  round(dclose * 10000, 1))) %>%

  filter(wday(date, label = F, week_start = 1) != 6)

  df

  ## # A tibble: 13,691 x 8

  ## # Groups: currency [7]

  ## date open high low close currency dclose pips

  ##

  ## 1 2010-01-01 0.89725 0.89745 0.89713 0.89741 AUDUSD NA NA

  ## 2 2010-01-04 0.89823 0.91356 0.89379 0.91351 AUDUSD 0.01629 162.9

  ## 3 2010-01-05 0.91348 0.91737 0.90981 0.91444 AUDUSD 0.00093 9.3

  ## 4 2010-01-06 0.91442 0.91706 0.90916 0.91666 AUDUSD 0.00222 22.2

  ## 5 2010-01-07 0.91670 0.92661 0.91587 0.91886 AUDUSD 0.00220 22.0

  ## 6 2010-01-08 0.91876 0.92323 0.91226 0.91946 AUDUSD 0.00060 6.0

  ## 7 2010-01-11 0.92871 0.93247 0.92738 0.93086 AUDUSD 0.00715 71.5

  ## 8 2010-01-12 0.93091 0.93196 0.92054 0.92552 AUDUSD -0.00534 -53.4

  ## 9 2010-01-13 0.92554 0.92671 0.91701 0.92266 AUDUSD -0.00286 -28.6

  ## 10 2010-01-14 0.92270 0.93296 0.92050 0.92986 AUDUSD 0.00720 72.0

  ## # ... with 13,681 more rows

  增加一个分类变量trend,上涨记为1,下跌记为-1,然后按照currency和trend两个分类变量对日波动性分组,计算均值。

  by_trend <- df %>%

  mutate(trend = factor(ifelse(dclose > 0, 1, -1))) %>%

  filter(!is.na(trend)) %>%

  group_by(currency, trend) %>%

  summarise(mean_change = mean(pips))

  by_trend

  ## # A tibble: 14 x 3

  ## # Groups: currency [?]

  ## currency trend mean_change

  ##

  ## 1 AUDUSD -1 -48.07027

  ## 2 AUDUSD 1 45.52568

  ## 3 EURGBP -1 -31.23220

  ## 4 EURGBP 1 33.33613

  ## 5 EURUSD -1 -54.60387

  ## 6 EURUSD 1 54.50359

  ## 7 GBPJPY -1 -82.11813

  ## 8 GBPJPY 1 78.54186

  ## 9 GBPUSD -1 -61.70304

  ## 10 GBPUSD 1 59.85367

  ## 11 USDCAD -1 -43.21478

  ## 12 USDCAD 1 44.32697

  ## 13 USDJPY -1 -43.05808

  ## 14 USDJPY 1 43.42761

  绘制柱状图。

  by_trend %>%

  ggplot(aes(x = currency, y = abs(mean_change), fill = trend)) +

  geom_bar(stat = "identity", position = "dodge") +

  labs(title = "Daily volatility by Currency and Trend",

  x = "", y = "pips") +

  theme_bw()

  上图清楚表明,7个主要货币对在上涨和下跌的日子里的平均波幅几乎一致,没有明显差异。换句话来说,只要预测模型的胜率超过50%,都有望在长期内打败市场。

  这里并没有考虑到交易成本,点差,滑点,隔夜利息会对交易业绩构成显著冲击,为了实现持续盈利,个人认为一个专门预测未来涨跌概率的模型必须具备超过55%的胜率。

  欢迎加入【和高手一起玩赚EA】社群(群主QQ:3157002952,加好友时请注明暗号:66),在这里聚集了”外汇EA交易者、EA技术大神、EA爱好者、计算机宽客、金融极客、数据大师、草根经济学家”分享各种想法、算法、策略,共享思维碰撞带来的灵感。不仅有料,更有圈子!

  本社群有哪些资源?

  1)外汇资管业务,传统外汇资管业务,传统拨头皮EA+对冲EA+马丁EA

  2)外汇培训课程+外汇线下活动+外汇线下展会。

  3)EA编程,EA测试,DLL加密等MT4+MT5业务。

  4)海外私募挂靠

  5)策略资金对接

(郑重声明:内容独家供稿,转载请注明出处)