Forum
>>
Principianti
>>
Errore classe
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da garetjax1983 |
2022-08-24 13:14:04 - Errore classe
|
Ciao a tutti,
sto approcciando python perchè mi sembra il linguaggio più adatto e flessibile per l'analisi finanziaria. Ho creato così alcuni script che dovrebbero, tramite una strategia definita, importare i dati storici di un'azione (in questo caso Enel) scaricata sul mio desktop, processarli e dare un feedback preciso delle operazioni e della resa della strategia scelta. Per gli script mi sono basato su backtrader, che sembra essere completo e molto funzionale ai miei obiettivi. Ma...non tutto è andato liscio! NameError: name 'Cross Medie' is not defined Ho definito la strategia mediante una classe che, una volta richiamata sul main, non viene riconosciuta. Questo il main: from __future__ import (absolute_import, division, print_function, unicode_literals) import backtrader as bt import backtrader.indicators as btind import backtrader.analyzers as btanalyzers import datetime import os.path import sys if __name__ == '__main__': cerebro = bt.Cerebro() cerebro.addstrategy(Cross Medie) modpath = os.path.basename(os.path.abspath(sys.argv0)) datapath = os.path.join(modpath, 'C:/Users/marco.fava/Desktop/ENEL.csv') data = bt.feeds.YahooFinanceCSVData( dataname=datapath, fromdate=datetime.datetime(2021, 7, 1), todate=datetime.datetime(2022, 8, 1), reverse=False) cerebro.adddata(data) cerebro.broker.setcash(100000.0) cerebro.addsizer(bt.sizers.FixedSize, stake=1000) cerebro.broker.setcommission(commission=0.0002) print('Valore iniziale Portafoglio: %.2f' % cerebro.broker.getvalue()) cerebro.run() print('Valore finale Portafoglio: %.2f' % cerebro.broker.getvalue()) cerebro.plot() e della strategia: import backtrader as bt import backtrader.indicators as btind import backtrader.analyzers as btanalyzers import datetime import os.path import sys class Cross Medie(bt.Strategy) : params = (('Med_vel', 50), ('Med_len', 100)) def __init__(self): self.sma_vel = btind.SMA(period=self.p.Med_vel) self.sma_len = btind.SMA(period=self.p.Med_len) self.buysig = btind.CrossOver(self.sma_vel, self.sma_len) self.dataclose = self.datas0.close Sicuramente c'è un errore, altrimenti python non protesterebbe... Mi potete aiutare nel trovarlo? Grazie mille! |
|
Scritto da Daniele aka Palmux |
2022-08-24 16:13:46 - Re: Errore classe
|
Ciao caro, ci sarebbero da dire molte cose su quello script, palesemente contro le PEP ed oltretutto non freschissimo come versione del linguaggio, ma limitiamoci al tuo problema.
Forse semplicemente nel file dove richiami la classe in oggetto non l'hai importata? Se capisco bene, non metti esattamente a posto il codice per renderci la vita facile indentando correttamente (lo puoi fare con il tasto apposito in fase di scrittura o usando fonti esterne come Pastebin). Se il problema è quello, a posto così, altrimenti sistema il codice che ci diamo un'occhiata più attenta. Cya |
|
Scritto da garetjax1983 |
2022-08-26 13:37:39 - Re: Errore classe
|
Ciao e grazie mille!
Effettivamente non avevo importato la classe (essendo un principiante e ottimista credevo, non so per quale motivo, che essendo tutto nello stesso folder la recuperasse da solo...mi sbagliavo!) Però ora sono andato oltre e mi sono trovato davanti a un ulteriore errore: ImportError: cannot import name 'warnings' from 'matplotlib.dates' (C:\Users\Anaconda3\envs\spyder-cf\lib\site-packages\matplotlib\dates.py) Che non so come risolvere! Dove ho sbagliato questa volta? Cmq tornando alle considerazioni precedenti, effettivamente ci sta che sia un linguaggio di programmazione un pochino datato perchè mutuato da un manuale del 2017, quindi non proprio nuovissimo. Per quanto riguarda invece il rispetto delle PEP, oltre ad aver ricavato dal manuale, mi sono arrangiato come potevo quindi chiedo clemenza...sperando di migliorare in un futuro non troppo lontano Grazie |
|
Scritto da garetjax1983 |
2022-08-26 13:37:41 - Re: Errore classe
|
Ciao e grazie mille!
Effettivamente non avevo importato la classe (essendo un principiante e ottimista credevo, non so per quale motivo, che essendo tutto nello stesso folder la recuperasse da solo...mi sbagliavo!) Però ora sono andato oltre e mi sono trovato davanti a un ulteriore errore: ImportError: cannot import name 'warnings' from 'matplotlib.dates' (C:\Users\Anaconda3\envs\spyder-cf\lib\site-packages\matplotlib\dates.py) Che non so come risolvere! Dove ho sbagliato questa volta? Cmq tornando alle considerazioni precedenti, effettivamente ci sta che sia un linguaggio di programmazione un pochino datato perchè mutuato da un manuale del 2017, quindi non proprio nuovissimo. Per quanto riguarda invece il rispetto delle PEP, oltre ad aver ricavato dal manuale, mi sono arrangiato come potevo quindi chiedo clemenza...sperando di migliorare in un futuro non troppo lontano Grazie |
|
Scritto da Daniele aka Palmux |
2022-08-26 14:50:12 - Re: Errore classe
|
Sono certo che migliorerai, basta avere costanza e dedizione.
Per l'errore semplicemente controlla quell'import: from matplotlib import warningsCya |
Pagina: 1
Esegui il login per scrivere una risposta.