Overall Statistics
Total Trades
195
Average Win
11.67%
Average Loss
-3.44%
Compounding Annual Return
20.379%
Drawdown
47.500%
Expectancy
0.360
Net Profit
140.245%
Sharpe Ratio
0.571
Loss Rate
69%
Win Rate
31%
Profit-Loss Ratio
3.40
Alpha
0.333
Beta
-6.562
Annual Standard Deviation
0.4
Annual Variance
0.16
Information Ratio
0.531
Tracking Error
0.4
Treynor Ratio
-0.035
Total Fees
$0.00
import numpy as np
from datetime import datetime
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(2013,10, 7)  #Set Start Date
        #self.SetEndDate(2016,6,11)    #Set End Date
        self.SetCash(1000)           #Set Strategy Cash
        # Find more symbols here: http://quantconnect.com/data
        self.forex = self.AddForex("AUDUSD", Resolution.Daily, Market.Oanda)
        self.SetBrokerageModel(BrokerageName.OandaBrokerage)
        self.ema = self.EMA("AUDUSD", 30, Resolution.Daily)
        self.__previous = datetime.min
        self.PlotIndicator("AUDUSD", self.ema)
     #   self.setBenchmark(SecurityType.Forex, "AUDUSD")
        
    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
        '''
        # only once per day
        if self.__previous.date() == self.Time.date(): 
            return
        
        self.__previous = self.Time
        
        holdings = self.Portfolio["AUDUSD"].Quantity
        
        if holdings == 0:
            
            #initiate new position
          
            if self.ema.Current.Value < data["AUDUSD"].Ask.Close:
                self.MarketOrder(self.forex.Symbol, 10000)
                #self.LimitOrder(self.forex.Symbol, -10000, data["AUDUSD"].Ask.Close+decimal.Decimal(0.0040))
            elif self.ema.Current.Value > data["AUDUSD"].Ask.Close:
                self.MarketOrder(self.forex.Symbol, -10000)
                #self.LimitOrder(self.forex.Symbol, 10000, data["AUDUSD"].Ask.Close-decimal.Decimal(0.0040))
            
            return
        
        # We have holdings, so determine if we liquidate
        
        # if long and we drop below EMA, close it
        if holdings > 0 and self.ema.Current.Value > data["AUDUSD"].Ask.Close:
            self.Liquidate()
        # if short and we go above EMA, close it
        elif holdings < 0 and self.ema.Current.Value < data["AUDUSD"].Ask.Close:
            self.Liquidate()