Overall Statistics
Total Trades
4
Average Win
0%
Average Loss
-5.58%
Compounding Annual Return
7.145%
Drawdown
8.700%
Expectancy
-1
Net Profit
7.186%
Sharpe Ratio
0.542
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.14
Beta
12.543
Annual Standard Deviation
0.114
Annual Variance
0.013
Information Ratio
0.402
Tracking Error
0.114
Treynor Ratio
0.005
Total Fees
$0.00
import numpy as np
import decimal
### <summary>
### Basic template algorithm simply initializes the date range and cash. This is a skeleton
### framework you can use for designing an algorithm.
### </summary>
class BasicTemplateAlgorithm(QCAlgorithm):
    '''Basic template algorithm simply initializes the date range and cash'''

    def Initialize(self):
        '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''

        self.SetStartDate(2016,1,1)  #Set Start Date
        self.SetEndDate(2017,1,1)    #Set End Date
        self.SetCash(100000)           #Set Strategy Cash
        
        self.forex = self.AddForex("EURUSD", Resolution.Minute, Market.Oanda)
        self.CommodityChannelIndex = self.CCI("EURUSD", 8, MovingAverageType.Simple, Resolution.Minute)
        
        #self.Debug("numpy test >>> print numpy.pi: " + str(np.pi)) #testing that Numpy module works

    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 not self.CommodityChannelIndex.IsReady: 
            return
        
        cci = self.CommodityChannelIndex.Current.Value
        current = data["EURUSD"].Close
        if not self.Portfolio.Invested:
            #need to check spread and only trade during certain times...
            if 26 <= cci <= 36 and self.Portfolio.Invested <= 0:
                twoPercent = decimal.Decimal(0.97)
                #Use 100% of the portfolio to buy curpair
                #self.Debug("
                self.SetHoldings("EURUSD", -1)
                #Get the current price of curpair
                stopPrice = self.Securities["EURUSD"].Price * twoPercent
                #Sell all of the curpair if the price drops below stopprice
                self.StopMarketOrder("EURUSD", self.Portfolio["EURUSD"].Quantity, stopPrice) 
            if -26 <= cci <= -36 and self.Portfolio.Invested <= 0:
                twoPercent = decimal.Decimal(1.05)
                #self.Debug("
                self.SetHoldings("EURUSD", 1)
                stopPrice = self.Securities["EURUSD"].Price * twoPercent
                self.StopMarketOrder("EURUSD", -self.Portfolio["EURUSD"].Quantity, stopPrice)
        if self.Portfolio.Invested:       
            if self.Portfolio["EURUSD"].IsLong:
                if 25 <= cci <= 25:
                    #self.Debug("
                    self.Liquidate("EURUSD")
                    #self.Debug("Exited Long Position, CCI back to normal ")
            if self.Portfolio["EURUSD"].IsShort:
                if -25 <= cci <= -25:
                    #self.Debug("
                    self.Liquidate("EURUSD")
                    #self.Debug("exited short position, cci back to normal")
        
    def OnEndOfDay(self):
        self.Plot("Indicators", "CCI", self.CommodityChannelIndex.Current.Value)