| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Sortino Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees ₹0.00 Estimated Strategy Capacity ₹0 Lowest Capacity Asset Portfolio Turnover 0% |
# region imports
from AlgorithmImports import *
from QuantConnect.Data import SubscriptionDataSource
from QuantConnect.Python import PythonData
from datetime import date, timedelta, datetime
from decimal import Decimal
# endregion
class MarketProfileStrategy(QCAlgorithm):
def Initialize(self):
# Backtesting
self.SetStartDate(2017, 1, 2)
self.SetEndDate(2017, 1, 2)
self.SetAccountCurrency("INR")
self.SetCash(100000)
self.SetTimeZone(TimeZones.Kolkata)
#self.SetWarmUp(timedelta(10))
# Equities
custom_tickers = ['ACC', 'ADANIENT']
self.symbols = []
for ticker in custom_tickers:
symbol = self.AddData(MyHistoricalMinData, ticker, Resolution.Minute, timeZone=TimeZones.Kolkata).Symbol
self.symbols.append(symbol)
# Consolidators
#for ticker in custom_tickers:
# self.consolidator = self.Consolidate(self.equity.Symbol, timedelta(minutes=5), self.OnFiveMinData)
# Indicators
def OnData(self, slice: Slice) -> None:
#time_zone = self.TimeZone
#utc_time = self.UtcTime
#self.Log(f"Time Zone: {time_zone}")
#self.Log(f"UTC Time: {utc_time}")
time = slice.Time
keys = slice.Keys
bars = slice.Bars
values = slice.Values
checkFlag = slice.ContainsKey(self.symbols[0])
checkFlag2 = self.symbols[0] in slice.Bars
self.Log(f"{time} | {keys} | {values} | {bars} | {checkFlag} | {checkFlag2}")
for i in slice.Keys:
self.Log(f"{i}")
#for symbol, data in slice.items():
# self.Log(f"{self.Time} | {symbol} | {data}")
for symbol in self.symbols:
# check if symbol is present in slice else continue to the next iteration
if not(slice.ContainsKey(symbol) and slice[symbol]):
self.Log(f"{self.Time} | {symbol} not present in slice.")
continue
#trade_bar = slice.Bars[symbol]
#self.Log(f"{trade_bar}")
# Class to import the historical data
class MyHistoricalMinData(PythonData):
def GetSource(self, config, date, isLive: bool):
source = ""
if config.Symbol.Value == 'ACC':
source = f"https://docs.google.com/spreadsheets/d/e/2PACX-1vT3Ukrr_ZH-U813Qb6OxpzlTbLPXyZBOjflpvI_TapZbnsEO_8IqlE6eNT6e7hIr0UkTutiz9sqSLO_/pub?output=csv"
elif config.Symbol.Value == 'ADANIENT':
source = f"https://docs.google.com/spreadsheets/d/e/2PACX-1vQXR2c8tMla4Wwoa3jfrfaa3toa--pJg9zq3qOPilFCfOYnFChzdHj_VWvXACEVUHNzWGeThX_q4CEb/pub?output=csv"
return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile)
def Reader(self, config, line, date, isLive):
if not (line.strip() and line[0].isdigit()):
return None
custom = MyHistoricalMinData()
custom.Symbol = config.Symbol
data = line.split(',')
try:
custom.Time = datetime.strptime(data[5], "%Y-%m-%d %H:%M:%S")
custom.Value = float(data[3])
custom["Open"] = float(data[0])
custom["High"] = float(data[1])
custom["Low"] = float(data[2])
custom["Close"] = float(data[3])
except ValueError:
return None
return custom