Skip to content

Commit

Permalink
Add OrdQty function, portfolio params
Browse files Browse the repository at this point in the history
See #119
  • Loading branch information
jaymon0703 committed Jul 13, 2020
1 parent 380f9c9 commit f0dc89a
Showing 1 changed file with 52 additions and 2 deletions.
54 changes: 52 additions & 2 deletions demo/turtles_quantstrat.R
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,13 @@ initOrders(portfolio=portfolio)
# addPosLimit(portfolio, symbol, startDate, 100, 1 ) #set max pos
allowMagicalThinking <- TRUE # potentially controversial

# Portfolio Parameters
size = 0.01
maxUnits = 4
stratTurtles<- strategy(portfolio)

ATRperiod = 20

# TODO: System 1 Indicators

# TODO: System 1 Signals
Expand All @@ -65,11 +70,17 @@ stratTurtles<- strategy(portfolio)

# TODO: System 2 short entry and exit

# System 2 Indicators
## System 2 Indicators
# ATR
strat.macdX <- add.indicator(strategy=strat.macdX, name="ATR",
arguments=list(HLC=quote(HLC(mktdata)), n=ATRperiod),
label="atrX")
# Long Breakout
stratTurtles <- add.indicator(strategy = stratTurtles,
name = "runMax",
arguments = list(x=quote(Hi(mktdata)), n=55),
label= "runMax55" )
# Short Breakout
stratTurtles <- add.indicator(strategy = stratTurtles,
name = "runMin",
arguments = list(x=quote(Lo(mktdata)[,1]), n=55),
Expand All @@ -86,17 +97,56 @@ stratTurtles <- add.signal(strategy = stratTurtles,
label="Lo.lte.runMin55")

# System 2 Rules
# stratTurtles <- add.rule(strategy = stratTurtles,
# name='ruleSignal',
# arguments = list(sigcol="Hi.gte.runMax55",sigval=TRUE, orderqty=100,
# ordertype='market', orderside='long', prefer="open"),
# type='enter')
stratTurtles <- add.rule(strategy = stratTurtles,
name='ruleSignal',
arguments = list(sigcol="Hi.gte.runMax55",sigval=TRUE, orderqty=100,
arguments = list(sigcol="Hi.gte.runMax55",sigval=TRUE, osFUN=ORDQTY2,
ordertype='market', orderside='long', prefer="open"),
type='enter')

stratTurtles <- add.rule(strategy = stratTurtles,
name='ruleSignal',
arguments = list(sigcol="Lo.lte.runMin55",sigval=TRUE, orderqty='all',
ordertype='market', orderside='long', prefer="open")
,type='exit')

# System 2 Order Size function
# 'N' is the 20-day EMA of the True Range, or more commonly the ATR
# True Range = max(H-L, H-PDC, PDC-L)
# 'N' = (19 x PDN + TR)/20
# Volatility Adjusted Position Units
# "The Turtles built positions in pieces which we called Units. Units were sized
# so that 1 N represented 1% of the account equity."
# Unit = (1% of Account) / (N x Dollars per Point)
OrdQty2 <- function(data, timestamp, orderqty, ordertype, orderside,
portfolio, symbol, prefer="Open",
integerQty=TRUE, size,
...) {
if(getPosQty("turtles_quantstrat", symbol, timestamp) == 0){

if(prefer=="Close") {
price <- as.numeric()
} else {
price <- as.numeric(Op(mktdata[timestamp,]))
}
sharesToTransact <- (initEq * size) / (mktdata$atr.atrX[timestamp])
if (orderside=="short") {
#qty <- -dollarsToTransact / price
qty <- -sharesToTransact
} else {
qty <- sharesToTransact
}
if(integerQty) {
qty <- trunc(sharesToTransact)
}
return(qty)
}
}

# Run backtest
start_t<-Sys.time()
out<-applyStrategy(strategy=stratTurtles , portfolios=portfolio, allowMagicalThinking = allowMagicalThinking)
Expand Down

0 comments on commit f0dc89a

Please sign in to comment.