找回密码
 注册
查看: 2699|回复: 2

[求助]已写好的R语言内如何加入新的函数?

[复制链接]
1 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次(中奖概率 50%)
发表于 2012-4-29 07:43:41 | 显示全部楼层 |阅读模式
本帖最后由 qinth 于 2012-4-29 07:44 编辑

实在是没有办法 求助各位大大
这本是我一个朋友的东西 他生病了
可是我看了半天也不了解这门语言

需要在写好的代码里面加一个函数 需要怎么加啊!
好像是在一个金融模型里面 添加一个止损函数
可是给的例子是一个数列的 数据库是一个数组的~
例子他都给我了,可是我不会~
求助各位大大~
  1. # FOR A GENERAL EXPLANATION OF REQUIREMENTS ON getNewPosList see rsi.R

  2. # This strategy only trades on certain markets, which is encoded in params$series.

  3. # The strategy will be long (short) on contract whenever the close is below (above)
  4. # the lower (upper) Bollinger Band of the close.


  5. getNewPosList <- function(store, newRowList, params) {

  6.         if (is.null(store))
  7.                 store         <- initStore(newRowList,params$series)
  8.         else
  9.                 store        <- updateStore(store, newRowList, params$series)
  10.        
  11.         pos <- rep(0,length(newRowList))

  12.         if (store$iter > params$lookback) {
  13.                 for (i in 1:length(params$series)) {
  14.                         cl                 <- newRowList[[params$series[i]]]$Close
  15.                         bbands         <- BBands(store$cl[[i]],n=params$lookback,sd=params$sdParam)
  16.                         dn                 <- last(bbands$dn)       
  17.                         up                 <- last(bbands$up)       
  18.                         #cat("cl",cl,"dn",dn,"up",up,"\n")
  19.                         if (cl < dn) {
  20.                                 pos[params$series[i]] <- 1
  21.                         }
  22.                         else if (cl > up) {
  23.                                 pos[params$series[i]] <- -1
  24.                         }
  25.                 }
  26.         }
  27.         return(list(store=store,pos=pos))
  28. }

  29. initClStore  <- function(newRowList,series) {
  30.         return(lapply(series, function(x) newRowList[[x]]$Close))
  31. }

  32. updateClStore <- function(oldClStore, newRowList, series) {
  33.         return(mapply(function(x,y) rbind(oldClStore[[x]],newRowList[[y]]$Close),
  34.                                                                                                   1:length(series),series, SIMPLIFY=FALSE))
  35. }

  36. initStore <- function(newRowList,series) {
  37.         return(list(iter=1,cl=initClStore(newRowList,series)))
  38. }

  39. updateStore <- function(store, newRowList, series) {
  40.         store$iter         <- store$iter + 1
  41.         store$cl        <- updateClStore(store$cl,newRowList,series)
  42.         return(store)
  43. }
复制代码
这是源代码~
要加进去的代码是这样的
  1. run <- function(prices,n,sd,stoploss) { # stoploss is a simple return
  2.     bbands  <- BBands(prices[,"Open"],n=n,sd=sd)
  3.     bbands  <- lag(bbands)
  4.     pos     <- vector(mode="numeric",length=nrow(prices)) # all zeroes
  5.     for (i in (n+1):nrow(prices)) {
  6.         if (pos[i-1]==flat) {
  7.             long    <- ifelse(prices[i,"Open"]<bbands$dn,1,0)
  8.             short   <- ifelse(prices[i,"Open"]>bbands$up,-1,0)
  9.             pos[i]  <- long + short
  10.             if (pos[i] != pos[i-1]) # we just entered a trade
  11.                 entry <- i # how long we have been in a trade
  12.         } else if (getTradeReturn(prices,entry,exit=i,isTRUE(pos[i]<0)) > -stoploss) {
  13.                 pos[i] <- pos[i-1] # stay in trade
  14.         }
  15.     }
  16.     return(pos)
  17. }
复制代码
回复

使用道具 举报

发表于 2012-4-30 10:54:24 | 显示全部楼层

回帖奖励 +1 金钱

主要是不懂你的经济问题,不知道在什么地方用
回复 支持 反对

使用道具 举报

发表于 2012-5-2 10:48:07 | 显示全部楼层
看代码好像是R,不过不知道你要干嘛,没法下手……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-22 13:17 , Processed in 0.032525 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表