Packages

Backtesting library for trading strategies

Current section

Files

Jump to
ex_backtest lib strategy simple_rsi.ex
Raw

lib/strategy/simple_rsi.ex

defmodule ExBacktest.Strategy.SimpleRSI do
alias TAlib.Indicators.RSI
@rsi_buy_limit 30
@rsi_sell_limit 70
@doc """
potential_trades Gives the potential buy and sell indexes in the given data
## Parameters
- data: An array of price data like Close prices.
"""
@spec potential_trades(list(float)) :: {list(integer), list(integer)}
def potential_trades(data)do
rsi_data = RSI.rsi_list(data)
rsi_indexed_list = Enum.with_index(rsi_data)
filter_data = fn(list, f) ->
list
|> Enum.filter(fn({value, _}) -> f.(value) end)
|> Enum.map(fn({_, index}) -> index end)
end
buy_points = rsi_indexed_list |> filter_data.(fn(val) -> val != nil and val < @rsi_buy_limit end)
sell_points = rsi_indexed_list |> filter_data.(fn(val) -> val != nil and val > @rsi_sell_limit end)
{buy_points, sell_points}
end
end