[R-SIG-Finance] sample code for a custom rule to replace ruleSignal
Gambulator Gambulator
gambulator at gmail.com
Sun Oct 18 02:40:14 CEST 2015
I figured this out.My indicator has an extra XXX.Close column... Sorry
about that.
On Sat, Oct 17, 2015 at 9:15 AM, Gambulator Gambulator <gambulator at gmail.com
> wrote:
> Hi
>
> I saw this
> http://r.789695.n4.nabble.com/Writing-sell-rules-with-quantstrat-td4389599.html
>
> by Sergey Pisarenko
> <http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=user_nodes&user=344717>
> and I am trying to implement something similar by starting out with what
> he's got (firstProfitable function below)
>
> The program would run and give me the 1st buy and sell signal but then it
> keeps saying
> "Error in if (!orderPrefer == "") prefer = orderPrefer :
> missing value where TRUE/FALSE needed"
>
> and die right after the 1st signal.
>
>
> So, I went into debug mode and see what's happening. I am only testing 1
> symbol SPY and there is only one order of buy and one order to sell. I
> don't add positions in-between. Somehow, Ithis orderPrice variable has 2
> entries and I think that's why the prefer is also expecting 2 entries. Does
> anyone have a simple sample ? By the way, for the entry, I am still using
> signalRule, I only want to replace the exit with this custom function.
>
> add.rule(qs.strategy, name="ruleSignal",
> arguments=list(sigcol="longEntry", sigval=TRUE, orderqty=100,
> ordertype="market", orderside="long",
> replace=FALSE, prefer="Close",orderset='rsilong',
> allowMagicalThinking=TRUE,osFUN=osMaxEquity),
> type='enter', label="long RDM"
> )
>
> add.rule(qs.strategy, name="firstProfitable",
> arguments=list(sigcol="longExit", sigval=TRUE,
> orderqty='all',data=mktdata,symbol,maxHold=5,orderside="long",prefer="Close"
> ),
> type='exit', label="sell RDM"
> )
>
>
>
>
>
> firstProfitable<-function(data, timestamp, portfolio,
> symbol,maxHold,prefer) {
> posn <- getPosQty(portfolio, symbol, timestamp)
> if (posn != 0) {
> pos <- getPos(portfolio, symbol, timestamp)
> holdPeriod <- as.Date(timestamp) - as.Date(index(pos) )
> print(index(pos))
> print((pos))
> print(as.POSIXlt(timestamp))
> print(as.Date(index(pos)))
> orderprice <- as.numeric(Cl(data[timestamp,]))
> print(orderprice)
> #qty <- as.vector(pos[, 1])
>
> if (holdPeriod > maxHold) {
> addOrder(portfolio=portfolio, symbol=symbol,
> timestamp=timestamp, qty='all',
> price=as.numeric(orderprice),
> ordertype='market',
> side='long',prefer='Close',label='maxHold')
> }
>
> buy_price <- as.numeric(pos[1, 2])
> close_price <- as.numeric(Cl(mktdata[timestamp,]))
> profit <- (close_price - buy_price) / buy_price
>
> if (profit > 0) {
> addOrder(portfolio=portfolio, symbol=symbol,
> timestamp=timestamp, qty='all',
> price=as.numeric(orderprice),
> ordertype='market',
> side='long',prefer='Close',label='maxHold')
> }
> }
> }
>
>
>
>
>
>
>
>
>
>
[[alternative HTML version deleted]]
More information about the R-SIG-Finance
mailing list