SCM

SCM Repository

[blotter] Annotation of /pkg/quantstrat/demo/luxor.1.strategy.basic.R
ViewVC logotype

Annotation of /pkg/quantstrat/demo/luxor.1.strategy.basic.R

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1515 - (view) (download)

1 : opentrades 1457 #!/usr/bin/Rscript --vanilla
2 :     #
3 :     # Jan Humme (@opentrades) - August 2012, revised April 2013
4 :     #
5 : opentrades 1458 # Tested and found to work correctly using blotter r1457
6 : opentrades 1457 #
7 : opentrades 1458 # After Jaekle & Tamasini: A new approach to system development and portfolio optimisation (ISBN 978-1-905641-79-6)
8 : opentrades 1457 #
9 : opentrades 1458 # Paragraph 3.2: luxor with slippage and transaction costs
10 : opentrades 1457
11 : erastus 1515 require(quantstrat)
12 :    
13 :     require(quantstrat)
14 :    
15 : opentrades 1457 ##### PLACE DEMO AND TEST DATES HERE #################
16 :     #
17 :     #if(isTRUE(options('in_test')$in_test))
18 :     # # use test dates
19 :     # {initDate="2011-01-01"
20 :     # endDate="2012-12-31"
21 :     # } else
22 :     # # use demo defaults
23 :     # {initDate="1999-12-31"
24 :     # endDate=Sys.Date()}
25 :    
26 : erastus 1515 source(paste0(path.package("quantstrat"),"/demo/luxor.include.R"))
27 : opentrades 1457 .fast = 10
28 :     .slow = 30
29 :    
30 : erastus 1515 source(paste0(path.package("quantstrat"),"/demo/luxor.getSymbols.R"))
31 : opentrades 1457
32 :     ### blotter
33 :    
34 :     initPortf(portfolio.st, symbols='GBPUSD', initDate=initDate, currency='USD')
35 :     initAcct(account.st, portfolios=portfolio.st, initDate=initDate, currency='USD')
36 :    
37 :     ### quantstrat
38 :    
39 :     initOrders(portfolio.st, initDate=initDate)
40 :    
41 :     ### define strategy
42 :    
43 :     strategy(strategy.st, store=TRUE)
44 :    
45 :     ### indicators
46 :    
47 :     add.indicator(strategy.st, name = "SMA",
48 :     arguments = list(
49 :     x = quote(Cl(mktdata)[,1]),
50 :     n = .fast
51 :     ),
52 :     label="nFast"
53 :     )
54 :    
55 :     add.indicator(strategy.st, name="SMA",
56 :     arguments = list(
57 :     x = quote(Cl(mktdata)[,1]),
58 :     n = .slow
59 :     ),
60 :     label="nSlow"
61 :     )
62 :    
63 :     ### signals
64 :    
65 :     add.signal(strategy.st, name='sigCrossover',
66 :     arguments = list(
67 :     columns=c("nFast","nSlow"),
68 :     relationship="gte"
69 :     ),
70 :     label='long'
71 :     )
72 :    
73 :     add.signal(strategy.st, name='sigCrossover',
74 :     arguments = list(
75 :     columns=c("nFast","nSlow"),
76 :     relationship="lt"
77 :     ),
78 :     label='short'
79 :     )
80 :    
81 :     ### rules
82 :    
83 :     add.rule(strategy.st, name='ruleSignal',
84 :     arguments=list(sigcol='long' , sigval=TRUE,
85 :     orderside='short',
86 :     ordertype='market',
87 :     orderqty='all',
88 :     TxnFees=.txnfees,
89 :     replace=TRUE
90 :     ),
91 :     type='exit',
92 :     label='Exit2LONG'
93 :     )
94 :    
95 :     add.rule(strategy.st, name='ruleSignal',
96 :     arguments=list(sigcol='short', sigval=TRUE,
97 :     orderside='long' ,
98 :     ordertype='market',
99 :     orderqty='all',
100 :     TxnFees=.txnfees,
101 :     replace=TRUE
102 :     ),
103 :     type='exit',
104 :     label='Exit2SHORT'
105 :     )
106 :    
107 :     add.rule(strategy.st, name='ruleSignal',
108 :     arguments=list(sigcol='long' , sigval=TRUE,
109 :     orderside='long' ,
110 :     ordertype='stoplimit', prefer='High', threshold=.threshold,
111 :     orderqty=+.orderqty,
112 :     replace=FALSE
113 :     ),
114 :     type='enter',
115 :     label='EnterLONG'
116 :     )
117 :    
118 :     add.rule(strategy.st, name='ruleSignal',
119 :     arguments=list(sigcol='short', sigval=TRUE,
120 :     orderside='short',
121 :     ordertype='stoplimit', prefer='Low', threshold=-.threshold,
122 :     orderqty=-.orderqty,
123 :     replace=FALSE
124 :     ),
125 :     type='enter',
126 :     label='EnterSHORT'
127 :     )
128 :    
129 :     ###############################################################################
130 :    
131 :     applyStrategy(strategy.st, portfolio.st)
132 :    
133 :     View(getOrderBook(portfolio.st)[[portfolio.st]]$GBPUSD)
134 :    
135 :     ###############################################################################
136 :    
137 :     updatePortf(portfolio.st, Symbols='GBPUSD', Dates=paste('::',as.Date(Sys.time()),sep=''))
138 :    
139 :     chart.Posn(portfolio.st, "GBPUSD")
140 :    
141 :     ###############################################################################
142 :    
143 : opentrades 1460 View(t(tradeStats(portfolio.st, 'GBPUSD')))
144 : opentrades 1457
145 :     ###############################################################################
146 :    
147 :     # save the strategy in an .RData object for later retrieval
148 :    
149 :     save.strategy(strategy.st)
150 :    
151 :     ##### PLACE THIS BLOCK AT END OF DEMO SCRIPT ###################
152 :     # book = getOrderBook(port)
153 :     # stats = tradeStats(port)
154 :     # rets = PortfReturns(acct)
155 :     ################################################################

root@r-forge.r-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business Powered By FusionForge