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