Current section
Files
Jump to
Current section
Files
lib/example/example_sma_crossover.ex
defmodule ExBacktest.Example.SmaCrossover do
alias ExBacktest.Strategy.Trader
alias ExBacktest.Strategy.SmaCrossover
alias ExBacktest.Tools.CsvUtils
alias ExBacktest.Tools.Chart
alias TAlib.Indicators.MA
alias Jason
@symbol "BTCUSDT"
@time_frame "1d"
@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 } = SmaCrossover.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}
sma_10 = MA.sma_list(close, 10)
sma_20 = MA.sma_list(close, 20)
more_data = %{"SMA 10" => sma_10, "SMA20" => sma_20}
more_data_str = Jason.encode!(more_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, more_data_str, dates,[rsi_oscilator_data],history_json)
:ok
end
end