Overall Statistics
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Indicators")
AddReference("QuantConnect.Common")

from System import *
from QuantConnect.Data import *
from QuantConnect.Data.Market import *
from QuantConnect.Data.Consolidators import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
from QuantConnect.Securities import *
from QuantConnect.Orders import *
from datetime import datetime
from System.Drawing import Color
from QuantConnect import *

import decimal as d
import numpy as np

class HMAStrat(QCAlgorithm):
    
    def Initialize(self):
        
        # configuration parameters (configurable inputs into the algorithm)
        DEBUG_LOG = str(self.GetParameter("Debug Log")).lower() == "true" or False
        SYMBOL = str(self.GetParameter("Symbol"))
        HMALENGTH = int(self.GetParameter("HMA Length")) or 50

        self.ORDER_MAP = ["Market", "Limit", "StopMarket", "StopLimit", "MarketOnOpen", "MarketOnClose", "OptionExercise"]
        
        self.DEBUG = DEBUG_LOG
    
        # initialization
        self.SetStartDate(2020, 9, 8)
        self.SetEndDate(2020, 10, 9)
        self.SetCash(100000)
        self.stock = self.AddEquity(SYMBOL, Resolution.Hour, Market.USA, True, 1, True)

        
        self.hma = self.HMA(SYMBOL, 20, Resolution.Hour)

    
        stockPlot = Chart('Stock Plot')
        stockPlot.AddSeries(Series('PriceOpen', SeriesType.Scatter, '$', Color.Green, ScatterMarkerSymbol.Circle))
        stockPlot.AddSeries(Series('PriceHigh', SeriesType.Scatter, '$', Color.Green, ScatterMarkerSymbol.Triangle))
        stockPlot.AddSeries(Series('PriceLow', SeriesType.Scatter, '$', Color.Green, ScatterMarkerSymbol.TriangleDown))
        stockPlot.AddSeries(Series('PriceClose', SeriesType.Line, '$', Color.Green, ScatterMarkerSymbol.Square))
        stockPlot.AddSeries(Series('HMA', SeriesType.Line, '$', Color.Gray))
        self.AddChart(stockPlot)
        
        self.lastPrice = 0.0
        self.pl = 0.0
        self._lo = None
        
        self.SetWarmup(HMALENGTH, Resolution.Hour)
        
    
    def OnData(self, data):
        # if we're not ready to trade, skip this run
        if self.IsWarmingUp:
            return
        
        self.Plot('Stock Plot', 'PriceOpen', float(data[self.stock.Symbol].Open))
        self.Plot('Stock Plot', 'PriceHigh', float(data[self.stock.Symbol].High))
        self.Plot('Stock Plot', 'PriceLow', float(data[self.stock.Symbol].Low))
        self.Plot('Stock Plot', 'PriceClose', float(data[self.stock.Symbol].Close))
        
        hma = float(self.hma.ToString())
        self.Plot('Stock Plot', 'HMA', Math.Round(hma, 2))