[Blotter-commits] r129 - pkg/blotter/demo
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Wed Dec 23 20:01:46 CET 2009
Author: braverock
Date: 2009-12-23 20:01:46 +0100 (Wed, 23 Dec 2009)
New Revision: 129
Removed:
pkg/blotter/demo/long-trend.R
Log:
- remove yahoo data sourced example
Deleted: pkg/blotter/demo/long-trend.R
===================================================================
--- pkg/blotter/demo/long-trend.R 2009-12-14 18:34:28 UTC (rev 128)
+++ pkg/blotter/demo/long-trend.R 2009-12-23 19:01:46 UTC (rev 129)
@@ -1,117 +0,0 @@
-# This is a very simple trend following strategy for testing the results of:
-# Faber, Mebane T., "A Quantitative Approach to Tactical Asset Allocation."
-# Journal of Risk Management (Spring 2007).
-# The article proposes a very simple quantitative market-timing model. They
-# test the model in sample on the US stock market since 1900 before testing
-# it out-of-sample in twenty other markets.
-
-# The article discusses a 200-day simple moving average, which is proposed
-# in Jeremy Seigel's book "Stocks for the Long Run" for timing the DJIA. He
-# concludes that a simple market timing strategy improves the absolute and
-# risk adjusted returns over a buy-and-hold strategy. After all transaction
-# costs are included, the timing strategy falls short on the absolute return,
-# but still provides a better risk-adjusted return. Siegel also tests timing on
-# the Nasdaq composite since 1972 and finds better absolute and risk adjusted
-# returns.
-
-# The article implements a simpler version of the 200-day SMA, opting for a
-# 10-month SMA. Monthly data is more easily available for long periods of time,
-# and the lower granularity should translate to lower transaction costs.
-
-# The rules of the system are relatively simple:
-# - Buy when monthly price > 10-month SMA
-# - Sell and move to cash when monthly price < 10-month SMA
-
-# 1. All entry and exit prices are on the day of the signal at the close.
-# 2. All data series are total return series including dividends, updated monthly.
-# For the purposes of this demo, we only use price returns.
-# 3. Cash returns are estimated with 90-day commercial paper. Margin rates for
-# leveraged models are estimated with the broker call rate. Again, for the
-# purposes of this demo, we ignore interest and leverage.
-# 4. Taxes, commissions, and slippage are excluded.
-
-# This simple strategy is different from well-known trend-following systems in
-# three respects. First, there's no shorting. Positions are converted to cash on
-# a 'sell' signal, rather than taking a short position. Second, the entire position
-# is put on at trade inception. No assumptions are made about increasing position
-# size as the trend progresses. Third, there are no stops. If the trend reverts
-# quickly, this system will wait for a sell signal before selling the position.
-
-# Data
-# Instead of using total returns data, this demo uses monthly data for the SP500
-# downloaded from Yahoo Finance. We'll use about 10 years of data, starting at
-# the beginning of 1998.
-
-# Load required libraries
-require(quantmod)
-require(TTR)
-require(blotter)
-
-# Set initial values
-initDate='1997-12-31'
-initEq=100000
-
-# Load data with quantmod
-print("Loading data")
-getSymbols('^GSPC', src='yahoo', from='1998-01-01')
-GSPC=to.monthly(GSPC, indexAt='endof')
-
-# Set up indicators with TTR
-print("Setting up indicators")
-GSPC$SMA10m <- SMA(GSPC[,grep('Adj',colnames(GSPC))], 10)
-
-# Set up a portfolio object and an account object in blotter
-print("Initializing portfolio and account structure")
-portfolio = initPortf('GSPC', initDate=initDate)
-account = initAcct(portfolios='portfolio', initDate=initDate)
-verbose=TRUE
-
-# Create trades
-for( i in 10:NROW(GSPC) ) {
- CurrentDate=time(GSPC)[i]
- cat(".")
- equity = getEndEq(account, CurrentDate)
-
- ClosePrice = as.numeric(Ad(GSPC[i,]))
- Posn = getPosQty(Portfolio=portfolio, Symbol='GSPC', Date=CurrentDate)
- UnitSize = as.numeric(trunc(equity/ClosePrice))
-
- # Position Entry (assume fill at close)
- if( Posn == 0 ) {
- # No position, so test to initiate Long position
- if( as.numeric(Ad(GSPC[i,])) > as.numeric(GSPC[i,'SMA10m']) ) {
- cat('\n')
- # Store trade with blotter
- portfolio = addTxn(Portfolio=portfolio, Symbol='GSPC', TxnDate=CurrentDate, TxnPrice=ClosePrice, TxnQty = UnitSize , TxnFees=0, verbose=verbose)
- }
- } else {
- # Have a position, so check exit
- if( as.numeric(Ad(GSPC[i,])) < as.numeric(GSPC[i,'SMA10m'])) {
- cat('\n')
- # Store trade with blotter
- portfolio = addTxn(Portfolio=portfolio, Symbol='GSPC', TxnDate=CurrentDate, TxnPrice=ClosePrice, TxnQty = -Posn , TxnFees=0, verbose=verbose)
- }
- }
-
- # Calculate P&L and resulting equity with blotter
- portfolio = updatePortf(Portfolio = portfolio, Dates = CurrentDate)
- account = updateAcct(Account = account, Dates = CurrentDate)
- account = updateEndEq(Account = account, Dates = CurrentDate)
-} # End dates loop
-cat('\n')
-# Chart results with quantmod
-chart.Posn(portfolio, Symbol = 'GSPC', Dates = '1998::', theme=chartTheme('white',up.col='lightgreen',dn.col='pink'), type='bar')
-plot(addTA(GSPC$SMA10['1998::',],pch=1,type='l',col='darkgreen', on=1))
-
-
-###############################################################################
-# Blotter: Tools for transaction-oriented trading systems development
-# for R (see http://r-project.org/)
-# Copyright (c) 2008 Peter Carl and Brian G. Peterson
-#
-# This library is distributed under the terms of the GNU Public License (GPL)
-# for full details see the file COPYING
-#
-# $Id: $
-#
-###############################################################################
\ No newline at end of file
More information about the Blotter-commits
mailing list