You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.4 KiB

from auto_trading.broker.backtest import Backtest
from auto_trading.strat.all_in import AllIn
from auto_trading.ptf.in_memory import InMemoryPortfolio
from auto_trading.predictor.mean_agg import MeanAggregator
from auto_trading.predictor.normalized import NormalizedPredictor
from auto_trading.predictor.selector import SelectorPredictor
from auto_trading.predictor.random_predictor import RandomPredictor
from auto_trading.bot import Bot
1 year ago
from tqdm import tqdm # type: ignore
import pandas as pd # type: ignore
1 year ago
pd.options.plotting.backend = "plotly"
1 year ago
if __name__ == "__main__":
1 year ago
csv = "data/gold.csv"
1 year ago
bt = Backtest(csv, start=10)
start = {name: 0 for name in bt.data.columns}
start["USD"] = 10_000
pred = MeanAggregator(
[RandomPredictor(), SelectorPredictor({"USD": -0.1}), RandomPredictor()]
)
bot = Bot(
1 year ago
ptf=InMemoryPortfolio(start.copy()), strategy=AllIn(), broker=bt, predictor=pred
)
1 year ago
data = pd.DataFrame(index=bt.data.index, columns=bt.data.columns)
1 year ago
for date in tqdm(data.index):
bot.run_once()
current_investments = bot.ptf.content()
converted_investments = {
name: amount * bot.current_conversion_rate[name]
for name, amount in current_investments.items()
}
data.loc[date] = converted_investments
1 year ago
bot.print_results()
1 year ago
# data.plot().show() # faster plot
data.plot.area().show()