Skip to content

Instantly share code, notes, and snippets.

@milktrader
milktrader / goldencross.jl
Created April 19, 2014 19:20
A backtest of the golden cross
# this is the data set that will be used
# note: Cl is simply OHLC["Close"]
julia> OHLC
16103x6 TimeArray{Float64,2} 1950-01-03 to 2013-12-31
Open High Low Close Volume Adj Close
1950-01-03 | 16.66 16.66 16.66 16.66 1.26e6 16.66
1950-01-04 | 16.85 16.85 16.85 16.85 1.89e6 16.85
1950-01-05 | 16.93 16.93 16.93 16.93 2.55e6 16.93
@milktrader
milktrader / marketsignal.jl
Created March 29, 2014 17:25
Prototyping MarketSignal object
505x3 MarketSignal 1980-01-03 to 1981-12-31
signal supersignal sig
1980-01-03 | false true true
1980-01-04 | true false true
1980-01-07 | true false true
1980-01-08 | true false true
1981-12-28 | false true true
1981-12-29 | false true true
@milktrader
milktrader / goldencross.jl
Created March 24, 2014 02:07
How many golden crosses in SPX since 1950?
julia> @> Cl sma(50) x->merge(x,sma(Cl,200)) x->x["sma50"] .> x["sma200"] discretesignal
65x1 TimeArray{Int64,1} 1950-10-18 to 2012-01-31
signals
1950-10-18 | 1.0
1953-05-11 | 0.0
1953-12-21 | 1.0
1956-10-26 | 0.0
2010-07-02 | 0.0
@milktrader
milktrader / macd.jl
Created February 18, 2014 03:08
MACD code
function macd{T}(ta::TimeArray{T,1}, fast::Int, slow::Int, signal::Int)
fastma = ema(ta, fast)
slowma = ema(ta, slow)
mcdval = fastma - slowma
sigval = ema(mcdval, signal)
merge(mcdval, sigval, ["macd", "signal"])
end
@milktrader
milktrader / doji.jl
Created February 9, 2014 14:17
what days were doji days in SPX from 1950 - 2013
julia> using TimeSeries, MarketTechnicals, MarketData, Lazy
julia> @> OHLC doji findall x->OHLC[x] x->x.timestamp
166-element Array{Date{ISOCalendar},1}:
1962-03-02
1962-04-13
1962-07-16
1962-10-08
1963-02-08
1963-05-22
@milktrader
milktrader / long.jl
Created January 17, 2014 04:13
long macro
julia> using TradeModels, MarketData
julia> @long cl rsi (.>) 50 nextday op
0.3999243140318183
@milktrader
milktrader / fastmoving.jl
Last active January 3, 2016 11:49
Turbo boosting the moving method with Iterators (h/t Slender Means)
julia> using Series, MarketData, FactCheck
julia> @time fast = fastmoving(Cl, mean, 60);
elapsed time: 0.305857977 seconds (72646744 bytes allocated)
julia> @time slow = moving(Cl, mean, 60);
elapsed time: 4.925385985 seconds (2079575504 bytes allocated)
julia> @fact fast[end].value => roughly(slow[end].value)
Success :: :(fast[end].value) => :(roughly(slow[end].value))
@milktrader
milktrader / first_six_weeks_1999.jl
Created January 15, 2014 20:01
Simple return for first six weeks of 1999 for SPX
julia> using Series, MarketData, Lazy
julia> d1 = date(1999,1,1);
julia> d2 = date(1999,2,15);
julia> @> Op percentchange x->x[[d1:d2]] value sum expm1
0.017947448312809502
@milktrader
milktrader / lazyequity.jl
Created January 12, 2014 14:38
Lazy and Series
julia> using Lazy, Series, MarketData
julia> head(cl)
1-element Array{SeriesPair{Date{ISOCalendar},Float64},1}:
1980-01-03 105.220
julia> @> cl value log diff cumsum expm1 x -> x+1 x -> x[size(x,1)]
1.1647025280364955
@milktrader
milktrader / backtest_one_liner.jl
Created January 11, 2014 15:19
One liner backtest algorithm in Julia
julia> plot(cumsum(value(when(lead(percentchange(Op, method="log"), 2), index(istrue(sma(Cl,10) .> sma(Cl,30)))))))