Forum >> Principianti >> Errore classe

Pagina: 1

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!


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
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






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






Sono certo che migliorerai, basta avere costanza e dedizione. :ok:


Per l'errore semplicemente controlla quell'import:

from matplotlib import warnings
Cya



Pagina: 1



Esegui il login per scrivere una risposta.