diff --git a/.DS_Store b/.DS_Store index 836c80c..4077ae5 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/DESCRIPTION b/DESCRIPTION index a200f9a..40defe9 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -33,6 +33,6 @@ License: GPL-3 URL: https://github.com/ShichenXie/pedquant, https://pedquant.com/ BugReports: https://github.com/ShichenXie/pedquant/issues LazyData: true -RoxygenNote: 7.2.3 +RoxygenNote: 7.3.1 Roxygen: list(markdown = TRUE, old_usage = TRUE) Encoding: UTF-8 diff --git a/R/.DS_Store b/R/.DS_Store deleted file mode 100644 index 5008ddf..0000000 Binary files a/R/.DS_Store and /dev/null differ diff --git a/R/md_future.R b/R/md_future.R index 8fadfc6..b6033f0 100755 --- a/R/md_future.R +++ b/R/md_future.R @@ -46,7 +46,7 @@ future_symbols_sybnam = function(symbols) { md_future1_info_sina = function(symbol, ...) { . = name = NULL - dat = read_html(sprintf('https://finance.sina.com.cn/futures/quotes/%s.shtml', symbol), encoding = 'GBK') + dat = rvest::read_html(sprintf('https://finance.sina.com.cn/futures/quotes/%s.shtml', symbol), encoding = 'GBK') dt = html_table(dat)[[7]] setnames(setDT(dt), rep(c('variable','value'), 3)) @@ -67,17 +67,30 @@ md_future1_history_sina = function(symbol, name, freq, from, to, handle, ...) { # url # http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesDailyKLine?symbol=M0 - url0 = 'https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var=/InnerFuturesNewService.get%s?symbol=%s' - if (!(sybnam$exchange %in% c('DCE', 'ZCE', 'CFFEX', 'SHFE', 'GFEX'))) url0 = 'https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var=/GlobalFuturesService.getGlobalFutures%s?symbol=%s' + if (sybnam$exchange %in% c('DCE', 'ZCE', 'SHFE', 'GFEX', 'CFFEX')) { + url0 = 'https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var=/InnerFuturesNewService.get%s?symbol=%s' + } else if (FALSE) { + url0 = 'http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFutures%s?symbol=%s' + } else { + url0 = 'https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var=/GlobalFuturesService.getGlobalFutures%s?symbol=%s' + } + urli = sprintf(url0, freq, syb) dat = try(read_lines(urli), silent = TRUE) # data cols_names = c("date", "open", "high", "low", "close", "volume", "position", "settle") - dt = setDT(fromJSON(sub('.+?(\\[.+\\]).+', '\\1', dat[2]))) - dt = setnames( - dt, cols_names - )[, (cols_names[-1]) := lapply(.SD, as.numeric), .SDcols = cols_names[-1]] + if (FALSE) { + dt = setDT(as.data.frame(fromJSON(dat))) + } else { + dt = setDT(fromJSON(sub('.+?(\\[.+\\]).+', '\\1', dat[2]))) + + dt = setnames( + dt, cols_names + )[, (cols_names[-1]) := lapply(.SD, as.numeric), .SDcols = cols_names[-1]] + } + + if (freq == 'DailyKLine') { dt = dt[, date := as.Date(date)] diff --git a/R/pq_addti.R b/R/pq_addti.R index 01f4c40..cef51db 100755 --- a/R/pq_addti.R +++ b/R/pq_addti.R @@ -467,7 +467,7 @@ pq_addti = function(dt, ...) { arg_addti = function(addti, x) { if (is.null(addti) || is.null(x)) return(addti) lapply(addti, function(a) { - a$x = x + if (inherits(a, 'list')) a$x = x return(a) }) } diff --git a/R/pq_plot2.R b/R/pq_plot2.R index e76315c..f4f4f8a 100644 --- a/R/pq_plot2.R +++ b/R/pq_plot2.R @@ -1,17 +1,13 @@ -pp_yrng = function(dt, y, yb, yrng=NULL, ...) { - if (!is.null(yrng)) return(yrng) - yval = dt[[y]] - if (!is.null(yb)) yval = c(yval, dt[[yb]]) - - range(yval, na.rm = TRUE) -} pp_dtpre = function(dt, x='date', y='close', - addti = NULL, markline = TRUE, - orders = NULL, order_y = 'prices', order_type = 'side_bs', order_term = 'side_term') { - sybnam = symbol = name = markline_value = NULL + addti = NULL, + orders = NULL, order_y = 'prices', order_type = 'side_bs', order_term = 'side_term', ...) { + symbol = name = markline_value = NULL + + dt = setorderv(copy(dt), c('symbol', x)) + + if ('name' %in% names(dt)) dt = dt[, name := NULL] - dt = setorderv(copy(dt), c('symbol', x))[, sybnam := sprintf('%s %s', symbol, name[.N]), by = 'symbol'] if (!is.null(addti)) { dt = suppressWarnings(do.call('pq_addti', args = c(list(dt=dt), addti))) dt = rbindlist(dt) @@ -21,7 +17,7 @@ pp_dtpre = function(dt, x='date', y='close', if (length(rmcols) > 0) dt = dt[, (rmcols) := NULL] } - if (isTRUE(markline)) dt = dt[, markline_value := get(y)[.N], by = 'symbol'] + # if (isTRUE(markline)) dt = dt[, markline_value := get(y)[.N], by = 'symbol'] if (inherits(orders, 'data.frame') && nrow(orders) > 0) { @@ -47,6 +43,7 @@ pp_title = function(dt, title=NULL, sybnam_N=TRUE, ...) { if (sybnam_N == TRUE) { title = setDT(dt)[.N, cols_sn, with=FALSE] } else title = setDT(dt)[1, cols_sn, with=FALSE] + title = paste0(unlist(title), collapse = ' ') } return(title) @@ -65,7 +62,7 @@ pp_xstart = function(dt, x = 'date', date_range = 'max') { } -p_theme = function(e, xstart = 0, xend = 100, yaxis_log = FALSE, #yrng = NULL, +p_theme = function(e, xstart = 0, xend = 100, yaxis_log = FALSE, title = 'none', theme = 'default') { if (isTRUE(yaxis_log)) yaxis_type = 'log' else yaxis_type = 'value' @@ -74,7 +71,7 @@ p_theme = function(e, xstart = 0, xend = 100, yaxis_log = FALSE, #yrng = NULL, e_tooltip(trigger='axis', axisPointer = list(type = 'cross', show = TRUE)) |> e_datazoom(x_index = 0, start = xstart, end = xend) |> e_y_axis( - min='dataMin', # yrng[1], # max=yrng[2], + min='dataMin', type = yaxis_type, position = 'right', axisLabel = list(rotate = 90) ) |> e_toolbox(right='30') |> e_toolbox_feature(c("restore", "dataZoom", "saveAsImage")) |> @@ -83,16 +80,11 @@ p_theme = function(e, xstart = 0, xend = 100, yaxis_log = FALSE, #yrng = NULL, e_theme(theme) } -p_markline = function(e, dt, markline = TRUE) { +p_markline = function(e, markline_yvals, markline = TRUE) { markline_value = NULL if (isFALSE(markline)) return(e) - # e = e |> - # e_line_('markline_value', legend=FALSE, symbol='none', - # lineStyle = list(type = 'dashed', width = 1, color='grey')) - - markline_yvals = dt[, unique(markline_value)] for (yv in markline_yvals) { e = e |> e_mark_line(data = list(yAxis = yv), symbol = 'none', @@ -189,7 +181,7 @@ fun_filter_overlays = function(addti) { return(ti_overlays) } -p_addti_overlay = function(e, dt, addti = NULL) { +p_addti_overlay = function(e, dtcols, addti = NULL) { if (is.null(addti)) return(e) # overlay: mm, sma, ema, smma, bb, sar # overlay technical indicators @@ -204,7 +196,7 @@ p_addti_overlay = function(e, dt, addti = NULL) { serie_symbol = 'circle' } - ti_cols = names(dt)[grep(sprintf('^%s', ti), names(dt))] + ti_cols = dtcols[grep(sprintf('^%s', ti), dtcols)] for (ticol in ti_cols) { if (ticol %in% c('bbands_dn', 'bbands_up', 'pbands_dn', 'pbands_up')) next # tiname = sprintf('%s(%s)', gsub('[0-9._]+', '', ticol), gsub('_', ',', gsub('[a-z]+_', '', ticol))) @@ -282,14 +274,13 @@ p_addti_indicator = function(e, dt, addti = NULL, x = 'date', theme = 'default') } pp_base = function(dt, x = 'date', h='100%', yb=NULL) { - symbol = name = NULL + symbol = name = syb_nam = NULL if (dt[,length(unique(symbol))] > 1) { - e = dt |> - group_by(sybnam) |> + e = dt[, syb_nam := paste(symbol, name)] |> + group_by(syb_nam) |> e_charts_(x) } else { - sybnam = dt[.N, paste(symbol, name)] e = dt |> e_charts_(x) } @@ -303,19 +294,23 @@ pp_line = function( markline = TRUE, nsd_lm = NULL, addti = NULL, orders = NULL, order_y = 'prices', order_type = 'side_bs', ... ) { - dt = pp_dtpre(dt, x, y, addti, markline, orders, order_y, order_type) |> - pp_dtlm(x, y, yaxis_log, nsd_lm) title = pp_title(dt, title, ...) + + dt = dt[, intersect(names(dt), c('symbol', x, y, yb)), with=FALSE] + dt = pp_dtpre(dt, x, y, addti, orders, order_y, order_type) |> + pp_dtlm(x, y, yaxis_log, nsd_lm) + xstart = pp_xstart(dt, x, date_range) - # yrng = pp_yrng(dt=dt, y=y, yb=yb, ...) + markline_yvals = dt[, .SD[.N], by='symbol'][, unique(get(y))] + dtcols = names(dt) e = pp_base(dt, x, yb=yb) |> e_line_(serie = y, legend=TRUE, symbol='none') |> p_orders(orders, color_up, color_down, ...) |> - p_markline(dt = dt, markline = markline) |> + p_markline(markline_yvals = markline_yvals, markline = markline) |> p_lm(x=x, y=y, nsd_lm=nsd_lm) |> - p_addti_overlay(dt = dt, addti = addti) |> - p_theme(xstart = xstart, xend = 100, yaxis_log = yaxis_log, #yrng = yrng, + p_addti_overlay(dtcols = dtcols, addti = addti) |> + p_theme(xstart = xstart, xend = 100, yaxis_log = yaxis_log, title = title, theme = theme) |> p_addti_indicator(dt = dt, addti = addti, x = x, theme = theme) @@ -328,19 +323,23 @@ pp_step = function( markline = TRUE, nsd_lm = NULL, addti = NULL, orders = NULL, order_y = 'prices', order_type = 'side_bs', ... ) { - dt = pp_dtpre(dt, x, y, addti, markline, orders, order_y, order_type) |> - pp_dtlm(x, y, yaxis_log, nsd_lm) title = pp_title(dt, title, ...) + + dt = dt[, intersect(names(dt), c('symbol', x, y, yb)), with=FALSE] + dt = pp_dtpre(dt, x, y, addti, orders, order_y, order_type) |> + pp_dtlm(x, y, yaxis_log, nsd_lm) + xstart = pp_xstart(dt, x, date_range) - # yrng = pp_yrng(dt=dt, y=y, yb=yb, ...) - + markline_yvals = dt[, .SD[.N], by='symbol'][, unique(get(y))] + dtcols = names(dt) + e = pp_base(dt, x, yb=yb) |> e_step_(serie = y, symbol='none') |> p_orders(orders, color_up, color_down, ...) |> - p_markline(dt = dt, markline = markline) |> + p_markline(markline_yvals = markline_yvals, markline = markline) |> p_lm(x=x, y=y, nsd_lm=nsd_lm) |> - p_addti_overlay(dt = dt, addti = addti) |> - p_theme(xstart = xstart, xend = 100, yaxis_log = yaxis_log, # yrng = yrng, + p_addti_overlay(dtcols = dtcols, addti = addti) |> + p_theme(xstart = xstart, xend = 100, yaxis_log = yaxis_log, title = title, theme = theme) |> p_addti_indicator(dt = dt, addti = addti, x = x, theme = theme) @@ -353,11 +352,15 @@ pp_candle = function( markline = TRUE, nsd_lm = NULL, addti = NULL, orders = NULL, order_y = 'prices', order_type = 'side_bs', ... ) { - dt = pp_dtpre(dt, x, y, addti, markline, orders, order_y, order_type) |> - pp_dtlm(x, y, yaxis_log, nsd_lm) title = pp_title(dt, title, ...) + + dt = dt[, intersect(names(dt), c('symbol', x, y, yb, 'close', 'open', 'low', 'high')), with=FALSE] + dt = pp_dtpre(dt, x, y, addti, orders, order_y, order_type) |> + pp_dtlm(x, y, yaxis_log, nsd_lm) + xstart = pp_xstart(dt, x, date_range) - # yrng = pp_yrng(dt=dt, y=y, yb=yb, ...) + markline_yvals = dt[, .SD[.N], by='symbol'][, unique(get(y))] + dtcols = names(dt) dt = copy(dt)[, date := as.factor(date)] e = pp_base(dt, x, yb=yb) |> @@ -365,10 +368,10 @@ pp_candle = function( itemStyle = list(color = color_up, borderColor = color_up, color0 = color_down, borderColor0 = color_down)) |> p_orders(orders, color_up, color_down, ...) |> - p_markline(dt = dt, markline = markline) |> + p_markline(markline_yvals = markline_yvals, markline = markline) |> p_lm(x=x, y=y, nsd_lm=nsd_lm) |> - p_addti_overlay(dt = dt, addti = addti) |> - p_theme(xstart = xstart, xend = 100, yaxis_log = yaxis_log, # yrng = yrng, + p_addti_overlay(dtcols = dtcols, addti = addti) |> + p_theme(xstart = xstart, xend = 100, yaxis_log = yaxis_log, title = title, theme = theme) |> p_addti_indicator(dt = dt, addti = addti, x = x, theme = theme) diff --git a/R/sysdata.rda b/R/sysdata.rda index 0214cd9..b3b32b7 100755 Binary files a/R/sysdata.rda and b/R/sysdata.rda differ diff --git a/data-raw/sysdata.R b/data-raw/sysdata.R index a8d3c27..64c3b8b 100644 --- a/data-raw/sysdata.R +++ b/data-raw/sysdata.R @@ -45,82 +45,84 @@ if (FALSE) { # # symbol_future_sina future1 = fread( 'exchange symbol name board unit - DCE V0 PVC energy 人民币/吨 - DCE L0 乙烯塑料 energy 人民币/吨 - DCE PP0 聚丙烯PP energy 人民币/吨 - DCE EB0 苯乙烯 energy 人民币/吨 - DCE EG0 乙二醇 energy 人民币/吨 - DCE J0 焦炭 energy 人民币/吨 - DCE JM0 焦煤 energy 人民币/吨 - DCE A0 豆一 grain 人民币/吨 - DCE B0 豆二 grain 人民币/吨 - DCE M0 豆粕 grain 人民币/吨 - DCE Y0 豆油 grain 人民币/吨 - DCE C0 玉米 grain 人民币/吨 - DCE CS0 淀粉 grain 人民币/吨 - DCE RR0 粳米 grain 人民币/吨 - DCE JD0 鸡蛋 grain 人民币/500千克 - DCE LH0 生猪 grain 人民币/吨 - DCE I0 铁矿石 metal 人民币/吨 - DCE FB0 纤维板 other 人民币/立方米 - DCE BB0 胶合板 other 人民币/张 - DCE P0 棕榈 soft 人民币/吨 - DCE PG0 液化石油气 energy 人民币/吨 - SHFE NR0 20号胶 other 人民币/吨 - SHFE SP0 纸浆 other 人民币/吨 - SHFE SC0 原油 energy 人民币/桶 - SHFE FU0 燃油 energy 人民币/吨 - SHFE LU0 低硫燃料油 energy 人民币/吨 - SHFE BU0 沥青 energy 人民币/吨 - SHFE RU0 橡胶 energy 人民币/吨 - SHFE AU0 黄金 metal 人民币/克 - SHFE AG0 白银 metal 人民币/千克 - SHFE BC0 国际铜 metal 人民币/吨 - SHFE CU0 沪铜 metal 人民币/吨 - SHFE SS0 不锈钢 metal 人民币/吨 - SHFE RB0 螺纹钢 metal 人民币/吨 - SHFE WR0 线材 metal 人民币/吨 - SHFE HC0 热轧卷板 metal 人民币/吨 - SHFE PB0 沪铅 metal 人民币/吨 - SHFE AL0 沪铝 metal 人民币/吨 - SHFE ZN0 沪锌 metal 人民币/吨 - SHFE SN0 沪锡 metal 人民币/吨 - SHFE NI0 沪镍 metal 人民币/吨 - SHFE AO0 氧化铝 metal 人民币/吨 - SHFE BR0 丁二烯橡胶 energy 人民币/吨 - SHFE EC0 集运指数欧线 other 指数点 - ZCE TA0 PTA energy 人民币/吨 - ZCE ZC0 动力煤 energy 人民币/吨 - ZCE MA0 郑醇 energy 人民币/吨 - ZCE AP0 苹果 grain 人民币/吨 - ZCE CJ0 红枣 grain 人民币/吨 - ZCE PK0 花生 grain 人民币/吨 - ZCE RS0 菜籽 grain 人民币/吨 - ZCE RM0 菜粕 grain 人民币/吨 - ZCE OI0 菜油 grain 人民币/吨 - ZCE WH0 强麦 grain 人民币/吨 - ZCE JR0 粳稻 grain 人民币/吨 - ZCE RI0 早籼稻 grain 人民币/吨 - ZCE LR0 晚籼稻 grain 人民币/吨 - ZCE SF0 硅铁 metal 人民币/吨 - ZCE SM0 锰硅 metal 人民币/吨 - ZCE PF0 短纤 other 人民币/吨 - ZCE SA0 纯碱 other 人民币/吨 - ZCE UR0 尿素 other 人民币/吨 - ZCE FG0 玻璃 other 人民币/吨 - ZCE SR0 白糖 soft 人民币/吨 - ZCE CF0 棉花 soft 人民币/吨 - ZCE CY0 棉纱 soft 人民币/吨 - ZCE SH0 烧碱 other 人民币/吨 - ZCE PX0 对二甲苯 other 人民币/吨 - CFFEX TS0 2年期国债 financial 百元净价报价 - CFFEX TF0 5年期国债 financial 百元净价报价 - CFFEX T0 10年期国债 financial 百元净价报价 - CFFEX IH0 上证50指数 financial 指数点 - CFFEX IF0 沪深300指数 financial 指数点 - CFFEX IC0 中证500指数 financial 指数点 - GFEX SI0 工业硅 other 人民币/吨 - GFEX LC0 碳酸锂 other 人民币/吨') + DCE V0 PVC 化工 人民币/吨 + DCE L0 乙烯塑料 化工 人民币/吨 + DCE PP0 聚丙烯PP 化工 人民币/吨 + DCE EB0 苯乙烯 化工 人民币/吨 + DCE EG0 乙二醇 化工 人民币/吨 + DCE J0 焦炭 煤炭 人民币/吨 + DCE JM0 焦煤 煤炭 人民币/吨 + DCE A0 豆一 谷物 人民币/吨 + DCE B0 豆二 油脂油料 人民币/吨 + DCE M0 豆粕 油脂油料 人民币/吨 + DCE Y0 豆油 油脂油料 人民币/吨 + DCE C0 玉米 谷物 人民币/吨 + DCE CS0 淀粉 谷物 人民币/吨 + DCE RR0 粳米 谷物 人民币/吨 + DCE JD0 鸡蛋 农副 人民币/500千克 + DCE LH0 生猪 农副 人民币/吨 + DCE I0 铁矿石 黑色金属 人民币/吨 + DCE FB0 纤维板 轻工 人民币/立方米 + DCE BB0 胶合板 轻工 人民币/张 + DCE P0 棕榈 油脂油料 人民币/吨 + DCE PG0 液化石油气 化工 人民币/吨 + SHFE NR0 20号胶 化工 人民币/吨 + SHFE SP0 纸浆 轻工 人民币/吨 + SHFE SC0 原油 石油 人民币/桶 + SHFE FU0 燃油 石油 人民币/吨 + SHFE LU0 低硫燃料油 石油 人民币/吨 + SHFE BU0 沥青 石油 人民币/吨 + SHFE RU0 橡胶 化工 人民币/吨 + SHFE AU0 黄金 贵金属 人民币/克 + SHFE AG0 白银 贵金属 人民币/千克 + SHFE BC0 国际铜 有色金属 人民币/吨 + SHFE CU0 沪铜 有色金属 人民币/吨 + SHFE SS0 不锈钢 黑色金属 人民币/吨 + SHFE RB0 螺纹钢 黑色金属 人民币/吨 + SHFE WR0 线材 黑色金属 人民币/吨 + SHFE HC0 热轧卷板 黑色金属 人民币/吨 + SHFE PB0 沪铅 有色金属 人民币/吨 + SHFE AL0 沪铝 有色金属 人民币/吨 + SHFE ZN0 沪锌 有色金属 人民币/吨 + SHFE SN0 沪锡 有色金属 人民币/吨 + SHFE NI0 沪镍 有色金属 人民币/吨 + SHFE AO0 氧化铝 有色金属 人民币/吨 + SHFE BR0 丁二烯橡胶 化工 人民币/吨 + SHFE EC0 集运指数欧线 航运 指数点 + ZCE TA0 PTA 化工 人民币/吨 + ZCE ZC0 动力煤 煤炭 人民币/吨 + ZCE MA0 郑醇 化工 人民币/吨 + ZCE AP0 苹果 农副 人民币/吨 + ZCE CJ0 红枣 农副 人民币/吨 + ZCE PK0 花生 油脂油料 人民币/吨 + ZCE RS0 菜籽 油脂油料 人民币/吨 + ZCE RM0 菜粕 油脂油料 人民币/吨 + ZCE OI0 菜油 油脂油料 人民币/吨 + ZCE WH0 强麦 谷物 人民币/吨 + ZCE JR0 粳稻 谷物 人民币/吨 + ZCE RI0 早籼稻 谷物 人民币/吨 + ZCE LR0 晚籼稻 谷物 人民币/吨 + ZCE SF0 硅铁 黑色金属 人民币/吨 + ZCE SM0 锰硅 黑色金属 人民币/吨 + ZCE PF0 短纤 化工 人民币/吨 + ZCE SA0 纯碱 化工 人民币/吨 + ZCE UR0 尿素 化工 人民币/吨 + ZCE FG0 玻璃 轻工 人民币/吨 + ZCE SR0 白糖 软商品 人民币/吨 + ZCE CF0 棉花 软商品 人民币/吨 + ZCE CY0 棉纱 软商品 人民币/吨 + ZCE SH0 烧碱 化工 人民币/吨 + ZCE PX0 对二甲苯 化工 人民币/吨 + CFFEX TS0 2年期国债 国债期货 百元净价报价 + CFFEX TF0 5年期国债 国债期货 百元净价报价 + CFFEX T0 10年期国债 国债期货 百元净价报价 + CFFEX TL0 30年期国债 国债期货 百元净价报价 + CFFEX IH0 上证50指数 股指期货 指数点 + CFFEX IF0 沪深300指数 股指期货 指数点 + CFFEX IC0 中证500指数 股指期货 指数点 + CFFEX IM0 中证1000股指 股指期货 指数点 + GFEX SI0 工业硅 有色金属 人民币/吨 + GFEX LC0 碳酸锂 有色金属 人民币/吨') diff --git a/docs/.DS_Store b/docs/.DS_Store deleted file mode 100644 index 325a162..0000000 Binary files a/docs/.DS_Store and /dev/null differ diff --git a/inst/.DS_Store b/inst/.DS_Store deleted file mode 100644 index a2c4d01..0000000 Binary files a/inst/.DS_Store and /dev/null differ diff --git a/inst/extdata/.DS_Store b/inst/extdata/.DS_Store deleted file mode 100644 index 5008ddf..0000000 Binary files a/inst/extdata/.DS_Store and /dev/null differ