We’re excited to announce that 1.14 is now available on CRAN! You can install it with: With this release, we are introducing a major new feature: can now automatically configure a Python environment for the user, in coordination with any loaded R packages that depend on . This means that: Ultimately, the goal is for R packages using to be able...
sig <- c(1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1)
> sig
[1] 1111100001110000111
> rle(sig)
Run Length Encoding
lengths: int [1:5] 54343
values : num [1:5] 10101
你是否恰好有一个既能计算净值又能计算佣金的功能?
你是否有一个功能可以同时计算净值和佣金?
语言、交流、外汇? 我不明白。
语言,证券交易所,外汇? 我不知道这是什么意思。
R-ka, forex.
那么,一个可以计算出交易+佣金/差价(成本)的平衡图的函数。
这是我写的,我不知道它是否正确。
calc.balance <- function(sig,x, comision=0){ sig <- ifelse(sig>0, 1, -1) trades.count <- length(rle(c(sig))$values) # сколько было сделок comis <- comision*trades.count sig <- na.omit( dplyr::lag(sig) ) dC <- c(NA, diff(x)) bal <- cumsum(sig * tail(dC, length(sig) ) ) bal <- bal-comis return(bal)}使用 "MetaTrader5"(Python)软件包下载报价的R语言脚本示例。必须在R中安装 "网状 "库。这个库提供了与Python的互动。仔细阅读这里 和这里。当你第一次运行网状结构库时,你会被要求安装miniconda。我建议你不要拒绝。这将创建conda环境r-reticulate,并安装python(3.6.xx)和一组初始软件包。如果你已经安装了Pyhon(或几个版本),你应该在脚本的开头激活所需的环境。MetaTrader5软件包的所有命令都在这里。
初始化脚本
为了下载报价,我们将编写函数
#---Function------------------------------- GetCotirPy <- function(sym){ selected = mt5$symbol_select(sym,TRUE) if (selected) py_run_string(" import pandas as pd import MetaTrader5 as mt5 rates = pd.DataFrame(mt5.copy_rates_from_pos(r.sym, r.tf, 1, r.bar))" ) return(py$rates) }让我们看看获得的数据的结构。
此外,我们将进行必要的计算。
R卡,外汇。
那么,一个可以计算出交易+佣金/差价(成本)的平衡图的函数。
写了这个,我不知道它是否正确。
我不明白这里的情况。
R卡,外汇。
那么一个可以计算出交易+佣金/差价(成本)的平衡图的功能。
我写了这个,我不知道它是否正确。
我认为,这里不应计算交易的数量。我们只需要从每笔交易中减去带有佣金的价差。所以它是这样的。
calc.balance <- function(sig,x, comision=0){ sig <- ifelse(sig>0, 1, -1) sig <- na.omit( dplyr::lag(sig) ) dC <- c(NA, diff(x)) bal <- cumsum(sig * tail(dC, length(sig) ) ) bal <- bal-comision return(bal)}我认为这里不需要计算交易的数量。只需从每笔交易中减去点差和佣金。事情就是这样的。
不是这样的。比如说
佣金不会在每个信号上收取,只有在信号被逆转时才会收取。我使用函数
cnt<-function(x){ n <- 1:(length(x)-1) cnt <- 0 for(i in n) {if(x[i]!=x[i+1]) {cnt<-cnt+1}} return(cnt) }对于上面的信号矢量
差异并不明显。
对于计算余额,函数
test_bal <- function(sig, CO){ import::here(poorman, Lag = lag) import::here(.from = fTrading, maxDrawDown) sig %>% Lag() %>% na.omit()->sig CO %>% tail(length(sig))-> CO bal <- cumsum(CO * sig) K <- (last(bal)/length(bal) * 10^Dig)%>% round() Kmax <- max(bal)/which.max(bal) * 10^Dig %>% round() dd <- maxDrawDown(bal)[[1]] %>% round() op <-cnt(sig) tst<-list(bal = bal, k = K, k.max = Kmax, op = op, dd = dd) return(tst) }祝好运
我不明白这里的情况。
通过 "rle",你可以计算出信号变化的数量,即交易的数量。
你可以通过 "数值 "看到,信号已经改变了5次,这意味着有5笔交易。
我不明白其中的区别。
我认为我的实施考虑到了 "第一笔交易的佣金,我们没有开盘,只有收盘"。
像这样的交易,我的变体会收取一定的佣金
而你的版本从这个开始收费。 你的版本更正确,但很容易纠正,只要减去 "1"。
在R中使用的示例脚本...
谢谢,我会研究的
通过 "rle",你可以计算出信号变化的数量,即交易的数量。
你可以通过 "数值 "看到,信号变化了5次,这意味着有5次交易。
我认为我的实施也考虑到了佣金,作为 "第一笔交易,我们没有开盘,只有收盘"。
像这样的交易,我的变体会收取一定的佣金
而你的变体开始从这个变体中提取,你的变体更正确,但很容易纠正,只要做,只要减去 "1"
是的,你的版本更正确。