class MyCustomDataType(PythonData):

def GetSource(self,

config: SubscriptionDataConfig,

date: datetime,

isLive: bool) -> SubscriptionDataSource:

source = "https://docs.google.com/spreadsheets/d/e/2PACX-1vRCAhj2JCJX-f6oAHAW7G5zbXCrynpNIQqWnMyFkJABCERCKjvGP-Sx8MX2Zb1lCFWrEIY466CdwGsL/pub?output=csv"

return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile)

def Reader(self,

config: SubscriptionDataConfig,

line: str,

date: datetime,

isLive: bool) -> BaseData:

if not (line.strip()):

return None

index = MyCustomDataType()

index.Symbol = config.Symbol

try:

data = line.split(',')

index.Time = datetime.strptime(data[0], '%Y.%m.%d %H:%M:%S')

index.EndTime = index.Time + timedelta(hours=1)

index.Value = data[4]

index["XAU1"] = float(data[1])

index["USD1"] = float(data[2])

except ValueError:

self.Log("No Data (Reader) ")

# Do nothing

return None

return index

class MyAlgorithm(QCAlgorithm):

def Initialize(self):

self.SetWarmUp(timedelta(50))

self.SetStartDate(2023, 5,30)

self.SetEndDate(2023, 7, 24)

self.SetCash(10000)

self.custom_symbol = self.AddData(MyCustomDataType, "MyCustomDataType", Resolution.Hour).Symbol

self.eurusd = self.AddForex("EURUSD", Resolution.Hour)

def OnData(self, slice: Slice) -> None:

if slice.ContainsKey(self.custom_symbol):

custom_data = slice[self.custom_symbol]

else:

self.Log("No Data (Algorithm)")