Packages

Backtesting library for trading strategies

Current section

Files

Jump to
ex_backtest lib example example1.ex
Raw

lib/example/example1.ex

defmodule ExBacktest.Example.Example1 do
alias ExBacktest.Strategy.Trader
alias ExBacktest.Strategy.SimpleRSI
alias ExBacktest.Tools.CsvUtils
alias ExBacktest.Tools.Chart
alias Jason
@symbol "BTCUSDT"
@time_frame "1h"
@cash 1.0
@commission 0.01
def run() do
file_path = '../binance_data/data/#{@symbol}/#{@time_frame}-#{@symbol}.csv'
{:ok, file} = File.open(file_path)
stream =IO.binstream(file, :line)
data = CsvUtils.read_csv(stream)
dates = CsvUtils.get_col(data, "DateTime")
close = data |> CsvUtils.get_col("Close")
|> Enum.map(fn(x) ->
{num, _} = Float.parse(x)
num
end)
{buys, sells } = SimpleRSI.potential_trades(close)
rsi_data = TAlib.Indicators.RSI.rsi_list(close) |> Enum.map(fn
nil -> 0
xx ->
x = to_string(xx)
{num,_} = Float.parse(x)
num
end)
rsi_oscilator_data = %{"title"=> "RSI 14", "data" => rsi_data}
{final_cash, history} = Trader.do_trades(close, buys, sells, @cash, @commission)
history_json = Jason.encode!(history)
IO.puts(final_cash)
Chart.show(@symbol, close, dates,[rsi_oscilator_data],history_json)
:ok
end
end