Browse Source

gold is working

pull/14/head
QuentinN42 1 year ago
parent
commit
9aeea2c31a
Signed by: number42 GPG Key ID: 2CD7D563712B3A50
  1. 4
      auto_trading/broker/backtest.py
  2. 19
      auto_trading/predictor/derivate.py
  3. 27
      main.py

4
auto_trading/broker/backtest.py

@ -9,10 +9,10 @@ class Backtest(Broker):
Backtest Broker
"""
def __init__(self, f_name: str, **kwargs) -> None:
def __init__(self, f_name: str, start=0, **kwargs) -> None:
"""Read the csv file and store it into a dataframe"""
self.data = pd.read_csv(f_name, **kwargs)
self.curcor = 0
self.curcor = start
def __bool__(self):
return self.curcor < len(self.data)

19
auto_trading/predictor/derivate.py

@ -0,0 +1,19 @@
import pandas as pd
from ..interfaces import Predictor
class Derivate(Predictor):
"""Derivate."""
def __init__(self, coef: float = 1) -> None:
self.coef = coef
def predict(self, data: pd.DataFrame) -> dict:
"""Predict from others predictors."""
derivates = data.diff().iloc[-10:]
maxs = derivates.abs().max()
last = self.coef*derivates.iloc[-1]
res = (last/maxs).fillna(0).to_dict()
return res

27
main.py

@ -5,36 +5,35 @@ 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.predictor.derivate import Derivate
from auto_trading.main import Bot
import matplotlib.pyplot as plt # type: ignore
from tqdm import tqdm
import pandas as pd
if __name__ == '__main__':
csv = "data/gold.csv"
bt = Backtest(csv, index_col=0)
bt = Backtest(csv, start=10, index_col=0)
start = {"USD":10_000, "Gold": 0}
pred = MeanAggregator([RandomPredictor(), SelectorPredictor({"USD": -0.1}), RandomPredictor()])
# pred = MeanAggregator([RandomPredictor(), SelectorPredictor({"USD": -0.1}), RandomPredictor()])
pred = Derivate(-1)
bot = Bot(
ptf=InMemoryPortfolio(start.copy()),
strategy=AllIn(),
broker=bt,
predictor=SelectorPredictor({"USD": -0.1})
predictor=pred
)
TIME = bt.data.index
B = []
for _ in tqdm(TIME):
data = pd.DataFrame(index=bt.data.index, columns=bt.data.columns)
for date in tqdm(data.index):
bot.run_once()
# bot.print_results()
# assets = bot.ptf.content()
# spread=1/100
# for k in assets.keys():
# assets[k]=(1-spread)*assets[k]
B.append( bot.balance() )
data.loc[date] = bot.ptf.content()
bot.print_results()
plt.plot(TIME,B)
data.plot()
plt.show()

Loading…
Cancel
Save