[R-SIG-Finance] quantstrat example stragey error
Immanuel
mane.desk at googlemail.com
Wed Mar 2 20:26:18 CET 2011
Hello,
since I'm talking about the demo examples that come with quantstrat
saw no point in attaching them. I assumed that the error comes
from one of the quantstrat internal functions thank's for looking into it.
regards,
Immanuel
here the error & code
----------
Loading required package: quantstrat
Loading required package: xts
Loading required package: zoo
Loading required package: TTR
Loading required package: blotter
Loading required package: quantmod
Loading required package: Defaults
Loading required package: FinancialInstrument
[1] "2007-03-15 AAPL 100 @ 89.57"
Error in if (getPosQty(Portfolio = portfolio, Symbol = symbol, Date =
timestamp) == :
argument is of length zero
In addition: There were 15 warnings (use warnings() to see them)
Time difference of 0.2658639 secs
[1] "trade blotter portfolio update:"
Time difference of 0.2728000 secs
Warning message:
In max(i) : no non-missing arguments to max; returning -Inf
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i486-pc-linux-gnu (32-bit)
locale:
[1] LC_CTYPE=en_US.utf8 LC_NUMERIC=C
[3] LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8
[5] LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8
[7] LC_PAPER=en_US.utf8 LC_NAME=en_US.utf8
[9] LC_ADDRESS=en_US.utf8 LC_TELEPHONE=en_US.utf8
[11] LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=en_US.utf8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] quantstrat_0.4.0 blotter_0.8 FinancialInstrument_0.4
[4] quantmod_0.3-14 Defaults_1.1-1 TTR_0.20-2
[7] xts_0.8-0 zoo_1.6-3 rj_0.5.0-5
loaded via a namespace (and not attached):
[1] grid_2.12.0 lattice_0.19-13 rJava_0.8-7 tools_2.12.0
---------------------------------------
# Simple MACD strategy
#
# MACD may be used in many ways, this will demonstrate a trend indicator.
#
# traditionally, when the MACD signal crosses zero, this indicated a
establishment of a positive trend
#
# we'll buy on positive treshold crossover of the 'signal' column, and
sell on negative threshold crossover
#
# Author: brian
###############################################################################
require(quantstrat)
try(rm("order_book.macd",pos=.strategy),silent=TRUE)
try(rm("account.macd","portfolio.macd",pos=.blotter),silent=TRUE)
try(rm("account.st","portfolio.st","stock.str","stratMACD","initDate","initEq",'start_t','end_t'),silent=TRUE)
stock.str='AAPL' # what are we trying it on
#MA parameters for MACD
fastMA = 12
slowMA = 26
signalMA = 9
maType="EMA"
currency('USD')
stock(stock.str,currency='USD',multiplier=1)
#or use fake data
#stock.str='sample_matrix' # what are we trying it on
#data(sample_matrix) # data included in package xts
#sample_matrix<-as.xts(sample_matrix)
initDate='2006-12-31'
initEq=1000000
portfolio.st='macd'
account.st='macd'
initPortf(portfolio.st,symbols=stock.str, initDate=initDate)
initAcct(account.st,portfolios=portfolio.st, initDate=initDate)
initOrders(portfolio=portfolio.st,initDate=initDate)
stratMACD <- strategy(portfolio.st)
stratMACD <- add.indicator(strategy = stratMACD, name = "MACD",
arguments = list(x=quote(Cl(mktdata))) )
stratMACD <- add.signal(strategy =
stratMACD,name="sigThreshold",arguments =
list(column="signal",relationship="gt",threshold=0,cross=TRUE),label="signal.gt.zero")
stratMACD <- add.signal(strategy =
stratMACD,name="sigThreshold",arguments =
list(column="signal",relationship="lt",threshold=0,cross=TRUE),label="signal.lt.zero")
stratMACD <- add.rule(strategy = stratMACD,name='ruleSignal', arguments
= list(sigcol="signal.gt.zero",sigval=TRUE, orderqty=100,
ordertype='market', orderside='long', threshold=NULL),type='enter')
stratMACD <- add.rule(strategy = stratMACD,name='ruleSignal', arguments
= list(sigcol="signal.gt.zero",sigval=TRUE, orderqty=-100,
ordertype='stoplimit', orderside='long',
threshold=.85,tmult=TRUE),type='risk')
# alternately, use a trailing order
# stratMACD <- add.rule(strategy = stratMACD,name='ruleSignal',
arguments = list(sigcol="signal.gt.zero",sigval=TRUE, orderqty=-100,
ordertype='stoptrailing', orderside='long',
threshold=.9,tmult=TRUE),type='risk')
stratMACD <- add.rule(strategy = stratMACD,name='ruleSignal', arguments
= list(sigcol="signal.lt.zero",sigval=TRUE, orderqty='all',
ordertype='market', orderside='long', threshold=NULL),type='exit')
getSymbols(stock.str,from=initDate)
start_t<-Sys.time()
out<-try(applyStrategy(strategy=stratMACD ,
portfolios=portfolio.st,parameters=list(nFast=fastMA, nSlow=slowMA,
nSig=signalMA,maType=maType)))
end_t<-Sys.time()
print(end_t-start_t)
start_t<-Sys.time()
updatePortf(Portfolio=portfolio.st,Dates=paste('::',as.Date(Sys.time()),sep=''))
end_t<-Sys.time()
print("trade blotter portfolio update:")
print(end_t-start_t)
chart.Posn(Portfolio=portfolio.st,Symbol=stock.str)
plot(add_MACD(fast=fastMA, slow=slowMA, signal=signalMA,maType="EMA"))
#look at the order book
getOrderBook('macd')
###############################################################################
# R (http://r-project.org/) Quantitative Strategy Model Framework
#
# Copyright (c) 2009-2010
# Peter Carl, Dirk Eddelbuettel, Brian G. Peterson, Jeffrey Ryan, and
Joshua Ulrich
#
# This library is distributed under the terms of the GNU Public License
(GPL)
# for full details see the file COPYING
#
# $Id: macd.R 450 2010-11-13 18:30:40Z braverock $
#
##############################################################################
-----------
On 03/02/2011 07:17 PM, Joshua Ulrich wrote:
> Have you tried converting the indexes of your xts objects to POSIXct?
> You haven't provided any code, but my guess is that one of xts objects
> you're using as input has a Date-classed index.
> --
> Joshua Ulrich | FOSS Trading: www.fosstrading.com
>
>
>
> On Tue, Mar 1, 2011 at 6:52 AM, Immanuel<mane.desk at googlemail.com> wrote:
>> Hello,
>>
>> what are the implications of this error, is there a workaround?
>> I'm just starting with quantstrat and really like the idea to implement
>> strategies not directly with blotter anymore.
>>
>> regards,
>> Immanuel
>>
>> On 02/26/2011 09:48 PM, Jeffrey Ryan wrote:
>>> Yes, that isn't an xts issue - just happens to be taking place during a
>>> subset.
>>>
>>> The issue is somewhere else
>>>
>>> 3: In `[.xts`(PosData, index(PosData)< Date) :
>>> Incompatible methods ("Ops.POSIXt", "Ops.Date") for "<"
>>> Time difference of 0.387223 secs
>>>
>>> The lhs [index(PosData)] is POSIX and the rhs is Date, which R can't compare
>>> correctly. The warning is happening - and probably resulting in all TRUE
>>> values - which isn't likely the desired outcome.
>>>
>>> I'm not looking at the code at the moment, but you can rule out xts. There
>>> are likely better ways to do this with xts, and I'll see what I can do to
>>> make the quantstrat code use more of the built-in xts functionality.
>>>
>>> Jeff
>>>
>>>
>>> On Sat, Feb 26, 2011 at 12:34 PM, Immanuel<mane.desk at googlemail.com> wrote:
>>>
>>>> hello,
>>>> seems to be already installed:
>>>> ----------
>>>> [1] "2001-06-26 AAPL 100 @ 11.88"
>>>> Error in if (getPosQty(Portfolio = portfolio, Symbol = symbol, Date =
>>>> timestamp) == :
>>>> argument is of length zero
>>>> In addition: Warning messages:
>>>> 1: In match.names(columns, colnames(data)) :
>>>> all columns not located in ma50 ma200 for AAPL.Open AAPL.High AAPL.Low
>>>> AAPL.Close AAPL.Volume AAPL.Adjusted ma50 ma200 ma50.gt.ma200
>>>> 2: In max(i) : no non-missing arguments to max; returning -Inf
>>>> 3: In `[.xts`(PosData, index(PosData)< Date) :
>>>> Incompatible methods ("Ops.POSIXt", "Ops.Date") for "<"
>>>> Time difference of 0.387223 secs
>>>> [1] "trade blotter portfolio update:"
>>>> Time difference of 0.7028229 secs
>>>> Warning message:
>>>> In max(i) : no non-missing arguments to max; returning -Inf
>>>>> sessionInfo()
>>>> R version 2.12.1 (2010-12-16)
>>>> Platform: i486-pc-linux-gnu (32-bit)
>>>>
>>>> locale:
>>>> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
>>>> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
>>>> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
>>>> [7] LC_PAPER=en_US.UTF-8 LC_NAME=en_US.UTF-8
>>>> [9] LC_ADDRESS=en_US.UTF-8 LC_TELEPHONE=en_US.UTF-8
>>>> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8
>>>>
>>>> attached base packages:
>>>> [1] stats graphics grDevices utils datasets methods base
>>>>
>>>> other attached packages:
>>>> [1] quantstrat_0.4.0 blotter_0.8 FinancialInstrument_0.4
>>>> [4] quantmod_0.3-15 Defaults_1.1-1 TTR_0.20-2
>>>> [7] xts_0.8-0 zoo_1.6-4 rj_0.5.0-5
>>>>
>>>> loaded via a namespace (and not attached):
>>>> [1] grid_2.12.1 lattice_0.19-17 rJava_0.8-7 tools_2.12.1
>>>> ------------------
>>>>
>>>> On 02/26/2011 06:07 PM, Brian G. Peterson wrote:
>>>>> On 02/26/2011 11:03 AM, Immanuel wrote:
>>>>>> I just run the examples from the quantstrat package and
>>>>>> received following error for every example:
>>>>>> ----------
>>>>> <...>
>>>>>
>>>>>> 2: In `[.xts`(PosData, index(PosData)< Date) :
>>>>>> Incompatible methods ("Ops.POSIXt", "Ops.Date") for "<"
>>>>>> any ideas?
>>>>> Try upgrading xts to the latest version (0.8) from R-Forge or CRAN
>>>>>
>>>>> _______________________________________________
>>>>> R-SIG-Finance at r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>>>>> -- Subscriber-posting only. If you want to post, subscribe first.
>>>>> -- Also note that this is not the r-help list where general R
>>>>> questions should go.
>>>>>
>>>> _______________________________________________
>>>> R-SIG-Finance at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>>>> -- Subscriber-posting only. If you want to post, subscribe first.
>>>> -- Also note that this is not the r-help list where general R questions
>>>> should go.
>>>>
>>>
>> _______________________________________________
>> R-SIG-Finance at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>> -- Subscriber-posting only. If you want to post, subscribe first.
>> -- Also note that this is not the r-help list where general R questions should go.
>>
More information about the R-SIG-Finance
mailing list