Skip to content

Commit

Permalink
backtest function to place results inplace on strategy object
Browse files Browse the repository at this point in the history
  • Loading branch information
dysonance committed Oct 3, 2017
1 parent 9df555e commit 37202ac
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/Strategems.jl
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export
# order
AbstractOrder, MarketOrder, LimitOrder, StopOrder, buy, sell, liquidate,
# strategies
Strategy, generate_trades, generate_trades!, backtest
Strategy, generate_trades, generate_trades!, backtest, backtest!

include("universe.jl")
include("paramset.jl")
Expand Down
10 changes: 5 additions & 5 deletions src/strategy.jl
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,6 @@ function generate_trades!(strat::Strategy)::Void
return nothing
end

#TODO: create an order type to handle this logic
function buy!(strat::Strategy, asset::String, quantity::Number, price::Symbol)::Void
return nothing
end

function backtest(strat::Strategy, px_trade::Symbol=:Open, px_close::Symbol=:Settle)::Dict{String,TS}
@assert haskey(strat.results, "Trades") "No trades generated for strategy - must run `generate_trades!` first."
result = Dict{String,TS}()
Expand Down Expand Up @@ -79,3 +74,8 @@ function backtest(strat::Strategy, px_trade::Symbol=:Open, px_close::Symbol=:Set
end
return result
end

function backtest!(strat::Strategy, px_trade::Symbol=:Open, px_close::Symbol=:Settle)::Void
strat.results["Backtest"] = backtest(strat, px_trade, px_close)
return nothing
end
4 changes: 2 additions & 2 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ rules = Dict{Symbol,Rule}(:EnterLong=>Rule(:GoLong, :(buy,asset,100)),
# strategy object
strat = Strategy(universe, indicator, signals, rules)
generate_trades!(strat)
results = backtest(strat)
@test length(setdiff(collect(keys(results)), universe.assets)) == 0
backtest!(strat)
@test length(setdiff(collect(keys(strat.results["Backtest"])), universe.assets)) == 0

0 comments on commit 37202ac

Please sign in to comment.