class GetGrid(PythonData):
def GetSource(self, config, date, isLive):
source = "https://www.dropbox.com/s/kpupx39fka61gfg/2020-02-11_to_2020-08-07_AAL_1d_COMBINED.csv?dl=1"
return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile);
def Reader(self, config, line, date, isLive):
if not (line.strip() and line[0].isdigit()): return None
data = line.split(',')
yld = GetGrid()
value = data[4]
if value == 0: return None
yld.Symbol = config.Symbol
yld.Time = datetime.strptime(data[0], '%Y-%m-%d')
yld["Open"] = float(data[1])
yld["High"] = float(data[2])
yld["Low"] = float(data[3])
yld["Close"] = float(data[4])
yld["Adj_Close"] = float(data[5])
yld["Volume"] = float(data[6])
yld["blue_zero"] = float(data[7])
yld["blue_neg_one"] = float(data[8])
yld["blue_neg10"] = float(data[9])
yld["blue_neg11"] = float(data[10])
yld["blue_neg12"] = float(data[11])
yld["blue_neg13"] = float(data[12])
yld["blue_neg14"] = float(data[13])
yld["blue_neg15"] = float(data[14])
yld["blue_neg_two"] = float(data[15])
yld["blue_neg3"] = float(data[16])
yld["blue_neg4"] = float(data[17])
yld["blue_neg5"] = float(data[18])
yld["blue_neg6"] = float(data[19])
yld["blue_neg7"] = float(data[20])
yld["blue_neg8"] = float(data[21])
yld["blue_neg9"] = float(data[22])
yld["blue_pos_one"] = float(data[23])
yld["blue_pos10"] = float(data[24])
yld["blue_pos11"] = float(data[25])
yld["blue_pos12"] = float(data[26])
yld["blue_pos13"] = float(data[27])
yld["blue_pos14"] = float(data[28])
yld["blue_pos15"] = float(data[29])
yld["blue_pos_two"] = float(data[30])
yld["blue_pos3"] = float(data[31])
yld["blue_pos4"] = float(data[32])
yld["blue_pos5"] = float(data[33])
yld["blue_pos6"] = float(data[34])
yld["blue_pos7"] = float(data[35])
yld["blue_pos8"] = float(data[36])
yld["blue_pos9"] = float(data[37])
yld["green_0"] = float(data[38])
yld["green_neg_one"] = float(data[39])
yld["green_neg10"] = float(data[40])
yld["green_neg11"] = float(data[41])
yld["green_neg12"] = float(data[42])
yld["green_neg13"] = float(data[43])
yld["green_neg14"] = float(data[44])
yld["green_neg15"] = float(data[45])
yld["green_neg_two"] = float(data[46])
yld["green_neg3"] = float(data[47])
yld["green_neg4"] = float(data[48])
yld["green_neg5"] = float(data[49])
yld["green_neg6"] = float(data[50])
yld["green_neg7"] = float(data[51])
yld["green_neg8"] = float(data[52])
yld["green_neg9"] = float(data[53])
yld["green_pos_one"] = float(data[54])
yld["green_pos10"] = float(data[55])
yld["green_pos11"] = float(data[56])
yld["green_pos12"] = float(data[57])
yld["green_pos13"] = float(data[58])
yld["green_pos14"] = float(data[59])
yld["green_pos15"] = float(data[60])
yld["green_pos_two"] = float(data[61])
yld["green_pos3"] = float(data[62])
yld["green_pos4"] = float(data[63])
yld["green_pos5"] = float(data[64])
yld["green_pos6"] = float(data[65])
yld["green_pos7"] = float(data[66])
yld["green_pos8"] = float(data[67])
yld["green_pos9"] = float(data[68])
return yld
from load_grid import *
class CalibratedMultidimensionalAutosequencers(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 3, 2) # Set Start Date
self.SetEndDate(2020,3,11) #Set End Date
self.SetCash(100000) # Set Strategy Cash
self.AAL =self.AddEquity("AAL", Resolution.Daily).Symbol
# self.grid_data =
self.grid =self.AddData(GetGrid, "grid", Resolution.Daily).Symbol
# self.AddData(GetGrid, "grid", Resolution.Daily)
def OnData(self, data):
history = self.History([self.grid], timedelta(1))
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Arguments:
data: Slice object keyed by symbol containing the stock data
'''
# curr_green_0 = data["grid"]#.green_0
self.Log(history.blue_neg_one)
# if data.ContainsKey("grid") and self.AAL in data.Keys:
# # self.Log(data[self.AAL].Dividends)
# close = data["grid"].Close
# self.Log(close)
# neg_1 = data["grid"].blue_neg_one
# self.Log(neg_1)
# new = data.Get("grid")
# if self.grid_data in data.Keys:
# self.Log(str(self.Time) + " worked " + str(curr_green_0))
# self.Debug(str(self.Time) + " blue_0: " + str(self.grid_data.blue_0))
# if not self.Portfolio.Invested:
# self.SetHoldings("SPY", 1)
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from Risk.MaximumDrawdownPercentPerSecurity import MaximumDrawdownPercentPerSecurity
class GRID(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2006, 9, 23) # Set Start Date
# self.SetEndDate(2020, 8, 7) # Set End Date
self.SetCash(100000) # Set Strategy Cash
self.SetRiskManagement(MaximumDrawdownPercentPerSecurity(0.01))
self.gold = self.AddCfd("XAUUSD", Resolution.Minute, Market.Oanda).Symbol
self.yld = self.AddData(TenYrYield, "yld", Resolution.Daily).Symbol
self.model = LinearRegression()
self.fit_model()
self.Schedule.On(self.DateRules.MonthStart("XAUUSD"), \
self.TimeRules.At(0,0), \
self.fit_model)
def fit_model(self):
history = self.History([self.gold, self.yld], timedelta(365 * 1))
gold_prices = history.loc[self.gold].unstack(level=1)["close"].apply(np.log)
bond_yield = history.loc[self.yld].unstack(level=1)["value"]
data = pd.DataFrame()
data["gold"] = gold_prices
data["yield"] = bond_yield
data.dropna(inplace=True)
y = data['gold'].values.reshape((-1, 1))
x = data['yield'].values.reshape((-1, 1))
self.model.fit(x, y)
def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Arguments:
data: Slice object keyed by symbol containing the stock data
'''
if self.yld in data.Keys and self.gold in data.Keys:
gold_price = data[self.gold].Value
bond_yield = data[self.yld].Value
predicted_price = np.exp(self.model.predict([[bond_yield]]))
if predicted_price > gold_price:
self.SetHoldings(self.gold, 1)
else:
self.SetHoldings(self.gold, 0)
class TenYrYield(PythonData):
def GetSource(self, config, date, isLive):
source = "https://www.dropbox.com/s/qops20awe8wzsf0/DFII10.csv?dl=1"
return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile);
def Reader(self, config, line, date, isLive):
if not (line.strip() and line[0].isdigit()): return None
data = line.split(',')
yld = TenYrYield()
yld.Symbol = config.Symbol
yld.Time = datetime.strptime(data[0], '%Y-%m-%d')
yld.Value = data[1]
return yld
# Your New Python File