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
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
import numpy as np
from datetime import timedelta

from Alphas.EmaCrossAlphaModel import EmaCrossAlphaModel

from Risk.NullRiskManagementModel import NullRiskManagementModel


class BasicTemplateFrameworkAlgorithm(QCAlgorithmFramework):

    def Initialize(self):

        # self.SetWarmUp(10)
        self.SetStartDate(2017, 1, 18)   #Set Start Date
        self.SetEndDate(2018, 10, 18)    #Set End Date
        self.SetCash(1000)           #Set Strategy Cash
        self.SetBrokerageModel(BrokerageName.OandaBrokerage,AccountType.Margin)

        self.UniverseSettings.Resolution = Resolution.Daily
        symbols = [Symbol.Create("EURUSD", SecurityType.Forex, Market.Oanda),
                   Symbol.Create("GBPUSD", SecurityType.Forex, Market.Oanda)]
        self.SetUniverseSelection( ManualUniverseSelectionModel(symbols) )


        self.SetAlpha(customAlpha())

        self.SetPortfolioConstruction(NullPortfolioConstructionModel())
        self.SetExecution(NullExecutionModel())
        self.SetRiskManagement(NullRiskManagementModel())


    def OnOrderEvent(self, orderEvent):
        if orderEvent.Status == OrderStatus.Filled:
            # self.Debug("Purchased Stock: {0}".format(orderEvent.Symbol))
            pass

class customAlpha(AlphaModel):
    def __init__(self):
        self.resolution = Resolution.Daily
        self.symbolDataBySymbol = {}
    
    def Update(self, algorithm, data):
        insights = []
        
        for symbol, symbolData in self.symbolDataBySymbol.items():
            algorithm.Log("Upper:"+ str(symbolData.donchian.UpperBand)+"Lower:"+ str(symbolData.donchian.LowerBand))
            
        return insights
    
    def OnSecuritiesChanged(self, algorithm, changes):
        addedSymbols = [ x.Symbol for x in changes.AddedSecurities if x.Symbol not in self.symbolDataBySymbol]
        if len(addedSymbols) == 0: return

        history = algorithm.History(addedSymbols, 10, self.resolution)
        for symbol in addedSymbols:
            symbolData = SymbolData(algorithm, symbol, self.resolution)
            self.symbolDataBySymbol[symbol] = symbolData
            ticker = SymbolCache.GetTicker(symbol)
            
            for tuple in history.loc[ticker].itertuples():
                
                bar = QuoteBar(tuple.Index, symbolData.Symbol, Bar(tuple.bidclose,tuple.bidhigh,tuple.bidlow, symbolData.Symbol),None,
                                Bar(tuple.askclose,tuple.askhigh,tuple.asklow, tuple.askopen),None,
                                timedelta(days=1)
                              )
                symbolData.donchian.Update( bar)

class SymbolData:
    '''Contains data specific to a symbol required by this model'''
    def __init__(self, algorithm, symbol, resolution):
        self.Symbol = symbol
        self.resolution = resolution
        self.donch_period = 7
        self.ticker = SymbolCache.GetTicker(symbol)
        self.donchian = DonchianChannel(self.ticker, self.donch_period, self.donch_period)
        algorithm.RegisterIndicator(self.Symbol, self.donchian, self.resolution)