@mallo321123: Wenn Du das mit den Pfaden korrigiert hast, kommen die nächsten Probleme.
In Python gibt es eine Namenskonvention, dass Klassen mit Großen Anfangsbuchstaben geschrieben werden, Funktionen und Variablen aber komplett klein. Da Du Dich nicht an diese Konvention hältst, macht es das Lesen des Codes sehr schwierig.
buy, read und sell sind zum Großteil identisch. Du solltest nicht in jeder Klasse nochmal das Lesen Deiner Config-Dateien implementieren, sondern die Konfiguration sollte einmal gelesen werden und dann eventuell an die einzelnen Klassen als Argument übergeben werden.
Du importierst Module, die gar nicht existieren. read, calc, ... sind Submodule von investspielapi, müssen deshalb auch als Submodule importiert werden.
Du benutzt print und return für das Fehlerhandling, statt Exceptions. In `read` sind z.B. im Fehlerfall Variablen nicht definiert, was dann zu einem kryptischen Folgefehler führt. `return` ist keine Funktion, sollte also nicht wie eine solche geschrieben werden.
Die Funktion chart sollte also eher so aussehen:
Code: Alles auswählen
def chart(self, name, time_range):
url = self.stock_config[name][time_range]
response = requests.get(url)
response.raise_for_status()
return response.json()
In `price` stückelst Du dann eine URL zusammen, die eigentlich Parameter enthält:
Code: Alles auswählen
def price(self, name):
url = self.generall_config["get"]["url"]
parameters = {
"portfolio_id": self.portfolioid,
"exchange": self.trade_config[name]["type"],
"ticker": self.trade_config[name]["ticker"],
}
response = requests.get(url, cookies=self.cookie, params=parameters)
response.raise_for_status()
return response.json()["StockRateInGameCurrency"]
Buy und Sell sind so ähnlich, dass man sie am besten in eine Klasse packt:
Code: Alles auswählen
class Sell:
def __init__(self, config, trade_config, stock_config, generall_config):
self.trade_config = trade_config
self.stock_config = stock_config
self.generall_config = generall_config
self.portfolioid = config.portfolioid
self.cookie = config.cookie_full
def _buy_or_sell(self, name, parameters)
url = self.generall_config["post"]["url"]
headers = {
"Cookie": str(self.cookie)
}
exchange = self.trade_config[name]["type"]
parameters.update({
'PortfolioId': int(self.portfolioid),
'Exchange': exchange,
'Ticker': self.trade_config[name]["ticker"],
'DoEnqueue': False
})
value = {
'rq': json.dumps(parameters)
}
response = requests.post(url, headers=headers, data=value)
response.raise_for_status()
return response
def sell_count(self, amount, name):
if amount > self.quant(name):
raise RuntimeError("not enouth in stock")
return self._buy_or_sell(name, {
'SellQuantity': amount,
})
def sell_price(self, money, name):
amount = self.calc_count(name, money)
return self.count(amount, name)
def sell_all(self, name):
amount = self.quant(name)
return self.count(amount, name)
def buy_price(self, money, name):
if money > self.ballance():
return("not enouth money")
return self._buy_or_sell(name, {
'BuyWithAmount': money,
})
def buy_count(self, count, name):
money = self.calc_price(name, count)
return self.buy_price(money, name)
def buy_all(self, name):
amount = self.quant(name)
return self._buy_or_sell(name, {
'SellQuantity': amount,
})
... # hier noch die Methoden aus read und calc
wobei hier auch noch die Methoden der `read`-Klasse und die calc-Funktioen dazugehören, weil ohne eine konkrete Instanz funktionieren die sowieso nicht.