首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backtrader问题

Backtrader问题
EN

Stack Overflow用户
提问于 2020-07-21 19:19:46
回答 2查看 203关注 0票数 0

当我使用Backtrader库运行我的代码时,我遇到了这个错误:

**文件"/Users/giovannicaridi/opt/anaconda3/lib/python3.7/site-packages/backtrader/feeds/yahoo.py",第94行,位于start super(YahooFinanceCSVData,self).start()中

TypeError: super(type,obj):obj必须是**类型的实例或子类型

这是我的代码:

代码语言:javascript
复制
   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        


  import numpy as np
  import pandas as pd
  import matplotlib.pyplot as plt
  pd.core.common.is_list_like = pd.api.types.is_list_like
  from pandas_datareader import data, wb
  import yfinance as yf
  import datetime




class Cross_Medie(bt.Strategy):

# Definisco la media veloce e la media lenta (utile per l'ottimizzazione)
params = (('Med_vel',50), ('Med_len', 100))

# Inizializzo le due medie
def __init__(self):
    self.sma_vel = btind.SMA(period = self.p.Med_vel)
    self.sma_len = btind.SMA(period = self.p.Med_len)
    
    # Definisco il segnale di acquisto/vendita
    self.buysig = btind.CrossOver(self.sma_vel, self.sma_len)
    
    # Salvo i dati di closing (self.datas[0] è l'orologio del sistema, 
    # utile per verificare se una candela in chiusura rompre una media/indicatore)
    # Keep a reference to the "close" line in the data[0] dataseries
    self.dataclose = self.datas[0].close
    
    
    

def next(self):

if  self.position.size:    # verifico se sono in posizione
    
      if self.buysig < 0:  # vuol dire che sono dentro long (incrocio a ribasso)
          self.close()     # chiudo la posizione esistente
          self.sell()      
        
      elif self.buysig > 0: # vuol dire che sono dentro short (incrocio a rialzo)
          self.close()      # chiudo la posizione esistente
          self.buy()
        
else:                     # non sono in posizione
         
    if self.buysig > 0:   # segnale positivo 
        self.buy()        # acquisto
        
    elif self.buysig < 0: # segnale negativo
        self.sell()       # vendo
        

def stampa(self, txt, dt=None):

# Funzione di stampa per capire cosa sta succedendo
dt = dt or self.datas[0].datetime.date(0)  
print('%s, %s' % (dt.isoformat(), txt))    


def notify_order(self, order):

if order.status in [order.Submitted, order.Accepted]:
    # ordine acquisto/vendita accettato
    return


if order.status in [order.Completed]:
    if order.isbuy():
        # Stampo dettaglio di quantità, prezzo e commissioni
        self.stampa('ACQ ESEGUITO, QTY: %.2f, PREZZO: %.2f, COSTO: %.2f, COMM: %.2f')
        % (order.executed.size,order.executed.price,order.executed.comm))

        self.buyprice = order.executed.price
        self.buycomm = order.executed.comm

    else: # Vendita
        self.stampa('VEND ESEGUITA, QTY: %.2f, PREZZO: %.2f, COSTO: %.2f, COMM: %.2f')
        % (order.executed.size,order.executed.price,order.executed.comm))

        self.bar_executed = len(self)
        
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
  self.stampa('Ordine Cancellato')
 
self.order = None    
  
     
        


 def notify_trade(salef, trade):
   if not trade.isclosed:
    return
    self.stampa('PROFITTO OPERAZIONE, LORDO %.2f, NETTO %.2f' % (trade.pnl, trade.pnlcomm))        
        
    
    
    

 if __name__ == '__main__':           
                           

 # Inizializzo istanza Cerebro
 cerebro = bt.Cerebro() 

 # Aggiungo una strategia
 cerebro.addstrategy(Cross_Medie)

 # Inizializzo il file (inserisco i dati storici mettendo il percorso completo del file
 modpath = os.path.basename(os.path.abspath(sys.argv[0]))  
 datapath = os.path.join(modpath, '/Users/giovannicaridi/.spyder-py3/GOOGL.csv')


 # Salvo i dati nella variabile data (Create a Data Feed)
 data = bt.feeds.YahooFinanceCSVData(dataname = datapath, fromdate = 
 datetime.datetime(2016,1,1),todate = datetime.datetime(2018,12,31),reverse = False)   

 # Aggiungiamo i dati a Cerebro
 cerebro.adddata(data)

 # Imposto il portafoglio depositando il capitale iniziale
 capitale_iniziale = 100000
 cerebro.broker.setcash(capitale_iniziale) 

 # Imposto il numero di azioni che traderò
 cerebro.addsizer(bt.sizers.FixedSize, stake=1000)

 # Imposto il valore delle commissioni
 cerebro.broker.setcommission(commission=0.0002)

 # Stampo le condizioni iniziali
 print('Valore iniziale Portafoglio: %.2f' % cerebro.broker.getvalue())

 # Avvio l'instanza (il programma)
 cerebro.run()    

 # Stampo le condizioni finali
 print('Valore del Portafoglio finale: %.2f' % cerebro.broker.getvalue())
 cerebro.broker.getvalue() 
EN

回答 2

Stack Overflow用户

发布于 2020-07-21 22:36:14

在调用self.stampa()时,您似乎没有正确使用格式化程序。

将其更改为(请查看括号):

代码语言:javascript
复制
self.stampa('ACQ ESEGUITO, QTY: %.2f, PREZZO: %.2f, COSTO: %.2f, COMM: %.2f' % (order.executed.size, order.executed.price, order.executed.value, order.executed.comm)) 

和:

代码语言:javascript
复制
self.stampa('VEND ESEGUITA, QTY: %.2f, PREZZO: %.2f, COSTO: %.2f, COMM: %.2f' % (order.executed.size, order.executed.price, order.executed.value, order.executed.comm))

然后你会得到:

代码语言:javascript
复制
Valore iniziale Portafoglio: 100000.00
2016-11-08, Ordine Cancellato
2017-01-26, VEND ESEGUITA, QTY: -1000.00, PREZZO: 3613425305.27, COSTO: -3613425305270.00, COMM: 722685061.05
2017-04-28, Ordine Cancellato
2017-04-28, Ordine Cancellato
2017-05-23, ACQ ESEGUITO, QTY: 1000.00, PREZZO: 3211721136.68, COSTO: -3613425305270.00, COMM: 642344227.34
2017-05-23, VEND ESEGUITA, QTY: -1000.00, PREZZO: 3211721136.68, COSTO: -3211721136680.00, COMM: 642344227.34
票数 0
EN

Stack Overflow用户

发布于 2020-07-22 21:06:20

我还尝试运行cerebro.plot(),但没有显示任何图形

代码语言:javascript
复制
cerebro.plot()
<IPython.core.display.Javascript object>
<IPython.core.display.HTML object>
Out[2]: [[<Figure size 432x288 with 5 Axes>]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63013379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档