Skip to content

Instantly share code, notes, and snippets.

@milktrader
milktrader / backtest2.jl
Created January 7, 2014 03:05
Iterating across parameters in naive backtest script in Julia
julia> using Series, MarketTechnicals, Jig.Quant
julia> fast = [5:15]; slow = [20:2:40];
julia> dailyreturn = percentchange(cl, method="log");
julia> for f in fast
for s in slow
sig = sma(cl,f) .> sma(cl,s)
when(dailyreturn, index(istrue(sig))) |> x -> sum(value(x)) |> expm1 |> x -> print(f," ",s," ",round(x,2), " -- ")
@milktrader
milktrader / gist:8293900
Created January 7, 2014 02:44
Nascent backtest framework in Julia
julia> using Series, MarketTechnicals, Jig.Quant
julia> fast = sma(cl, 10);
julia> slow = sma(cl, 30);
julia> sig = fast .> slow;
julia> dailyreturn = percentchange(cl, method="log");
@milktrader
milktrader / when.jl
Created December 28, 2013 15:31
more conversation
# this works but might be difficult to humanely parse
# can you guess what it means?
# answer below
julia> doji(op,hi,lo,cl) |> istrue |> index |> x -> when(cl, x)
@milktrader
milktrader / istrue.jl
Created December 28, 2013 14:57
conversational syntax
julia> doji(op,hi,lo,cl) |> istrue |> index
13-element Array{Date{ISOCalendar},1}:
1970-03-31
1970-06-02
1970-06-09
1970-08-05
1970-09-02
1971-02-02
1971-02-04
1971-03-25
@milktrader
milktrader / watwat.jl
Created December 27, 2013 22:55
wat a mess in the one-liner at the end ... searching for a piping method
julia> Pkg.checkout("MarketTechnicals", "series")
julia> using MarketTechnicals
julia> op = readseries(Pkg.dir("MarketTechnicals/test/data/spx.csv"), value=2);
julia> hi = readseries(Pkg.dir("MarketTechnicals/test/data/spx.csv"), value=3);
julia> lo = readseries(Pkg.dir("MarketTechnicals/test/data/spx.csv"), value=4);
@milktrader
milktrader / doji.jl
Created December 27, 2013 21:30
doji dates not put into a function yet
julia> using Series
julia> op = readseries(Pkg.dir("Series/test/data/spx.csv"), value=2);
julia> hi = readseries(Pkg.dir("Series/test/data/spx.csv"), value=3);
julia> lo = readseries(Pkg.dir("Series/test/data/spx.csv"), value=4);
julia> cl = readseries(Pkg.dir("Series/test/data/spx.csv"), value=5);
@milktrader
milktrader / usingSeries.jl
Created December 24, 2013 18:35
Series.jl in action
julia> using Series
julia> high = readseries(Pkg.dir("Series/test/data/spx.csv"), value=3);
julia> low = readseries(Pkg.dir("Series/test/data/spx.csv"), value=4);
julia> percentrange = (high .- close) ./ high;
julia> head(ans)
3-element Array{SeriesPair{Date{ISOCalendar},Float64},1}:
@milktrader
milktrader / sortthis.jl
Created December 3, 2013 03:28
sort SerialArray
abstract AbstractSeries
immutable SerialPair{T, V} <: AbstractSeries
index::T
value::V
end
type SerialArray{T,V} <: AbstractSeries
collection::Array{SerialPair{T,V},1} # this prevents arrays of mixed types
idxname::String
@milktrader
milktrader / JuliaQuant_logo.R
Last active December 27, 2015 16:29
Code to generate JuliaQuant logo, using official Julia colors
require(quantmod)
getSymbols("^GSPC", from = '1900-01-01')
s = yearlyReturn(GSPC)
dens = density(s)
plot(dens)
redfill = "#d66661"
redstroke = "#c93d39" #not used
greenfill = "#6bab5b"
greenstroke = "#3b972e" #not used
purplefill = "#aa7dc0"
@milktrader
milktrader / ecdf_thursdays.jl
Created April 25, 2013 01:44
What is the chance we'll see a loss of 10 percent or more in the SPX return for a Thursday?
julia> log_return(indexdow(GSPC, 5)["Close"]);
julia> foo = ecdf(ans);
julia> foo(-0.10)
0.0012492192379762648