Back

Can't print exceptions in new classes

I can't figure out how to print an error when it happens in another class. Here is some example code taken from CustomDataBitcoinAlgorithm.py fromĀ 

https://www.quantconnect.com/docs/algorithm-reference/importing-custom-datafrom clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")

from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Data import SubscriptionDataSource
from QuantConnect.Python import PythonData

from datetime import date, timedelta, datetime
import numpy as np
import json

class CustomDataBitcoinAlgorithm(QCAlgorithm):

def Initialize(self):
self.SetStartDate(2020, 7, 13)
self.SetEndDate(datetime.now().date() - timedelta(1))
self.SetCash(100000)
# Define the symbol and "type" of our generic data:
self.AddData(Bitcoin, "BTC")


def OnData(self, data):
if not data.ContainsKey("BTC"): return

close = data["BTC"].Close

# If we don't have any weather "SHARES" -- invest"
if not self.Portfolio.Invested:
# Weather used as a tradable asset, like stocks, futures etc.
self.SetHoldings("BTC", 1)
self.Debug("Buying BTC 'Shares': BTC: {0}".format(close))

self.Debug("Time: {0} {1}".format(datetime.now(), close))


class Bitcoin(PythonData):
'''Custom Data Type: Bitcoin data from Quandl - http://www.quandl.com/help/api-for-bitcoin-data'''

def GetSource(self, config, date, isLiveMode):
Console.Write("Test")
try:
raise ValueError('error?')
except Exception as e: Console.Write(e)

return SubscriptionDataSource("https://www.quandl.com/api/v3/datasets/BCHARTS/BITSTAMPUSD.csv?order=asc", SubscriptionTransportMedium.RemoteFile);


def Reader(self, config, line, date, isLiveMode):
coin = Bitcoin()
coin.Symbol = config.Symbol

# Example Line Format:
# Date Open High Low Close Volume (BTC) Volume (Currency) Weighted Price
# 2011-09-13 5.8 6.0 5.65 5.97 58.37138238, 346.0973893944 5.929230648356
if not (line.strip() and line[0].isdigit()): return None

try:
data = line.split(',')

# If value is zero, return None
value = data[4]
if value == 0: return None

coin.Time = datetime.strptime(data[0], "%Y-%m-%d")
coin.Value = value
coin["Open"] = float(data[1])
coin["High"] = float(data[2])
coin["Low"] = float(data[3])
coin["Close"] = float(data[4])
coin["VolumeBTC"] = float(data[5])
coin["VolumeUSD"] = float(data[6])
coin["WeightedPrice"] = float(data[7])
return coin;

except ValueError:
# Do nothing, possible error in json decoding
return None

I removed some parts of the code that were used for live trading. In the GetSource function I added a try except and raised an exception. I can print in that function normally using Console.Write, but it won't print the exception. The algo also doesn't trade at all when I add the exception. Any help would beĀ appreciated, thanks.

Update Backtest







0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Hi Btu king,

To raise an error with our API, we use the Error method from the QCAlgorithm class. To access this method, we need to have a reference to the algorithm instance. I've attached an example algorithm which demonstrates this can be done from inside another class.

Note how in the attached backtest, `algorithm` is passed to the method we call `Error` in. By comparison, In the code pasted above, the Bitcoin class doesn't have a reference to the algorithm object.

For more information on error messages and logging, I recommend reviewing our documentation.

Best,
Derek Melchin

0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Update Backtest





0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Loading...

This discussion is closed