Overall Statistics
Total Trades
273
Average Win
2.99%
Average Loss
-5.35%
Compounding Annual Return
0%
Drawdown
100.000%
Expectancy
-0.477
Net Profit
-100.044%
Sharpe Ratio
-0.359
Probabilistic Sharpe Ratio
5.686%
Loss Rate
66%
Win Rate
34%
Profit-Loss Ratio
0.56
Alpha
-1.343
Beta
3.128
Annual Standard Deviation
3.52
Annual Variance
12.387
Information Ratio
-0.368
Tracking Error
3.503
Treynor Ratio
-0.404
Total Fees
$0.00
import numpy as np
from decimal import *
from datetime import timedelta, datetime

class RegressionChannelAlgorithm(QCAlgorithm):

    def Initialize(self):

        self.SetCash(1000000)
        self.SetStartDate(2015,3,6)
        self.symbols = ["EURGBP", "GBPUSD", "USDCHF", "CADJPY", "EURUSD"] 
        slowperiod = 4000
        self.SetWarmUp(slowperiod)
        for symbol in self.symbols:
            equity = self.AddForex(symbol, Resolution.Hour, Market.Oanda)
            self.Consolidate(symbol, timedelta(hours=5), self.twoforty)
            self.Consolidate(symbol, timedelta(hours=23), self.days)
        #240MIN SETTINGS
        self.lsma4 = self.LSMA("EURUSD", 850, Resolution.Hour)  #lsma 1700, atr kama 1day, 1700, 1700, 300LinearWeightedMovingAverage
        self.ladx4 = self.ADXR("EURUSD", 850, Resolution.Hour) #ADXR 
        self.sadx4 = self.ADXR("EURUSD", 150, Resolution.Hour) 
        #1day settings
        self.sma4 = self.LSMA("EURUSD", 1707, Resolution.Hour)  #lsma 1700, atr kama 1day, 1700, 1700, 300
        self.latr4 = self.ADXR("EURUSD", 1707, Resolution.Hour) #ADXR 
        self.satr4 = self.ADXR("EURUSD", 307, Resolution.Hour) 
    
    def OnData(self, data):
        if (not data.ContainsKey(self.symbols[0])): return #(not data.ContainsKey(self.symbols[1])) or
        if (not data.ContainsKey(self.symbols[1])) or (not data.ContainsKey(self.symbols[2])): return
        if (not data.ContainsKey(self.symbols[3])) or (not data.ContainsKey(self.symbols[4])): return
    def twoforty(self, consolidated):
        
        if self.IsWarmingUp: return
        #if (not self.satr4.IsReady): return
        #if (not self.latr4.IsReady): return
        value1 = self.Securities[self.symbols[1]].Price
        value4 = self.Securities[self.symbols[4]].Price
        #holdings =  self.Portfolio["EURUSD"].TotalHoldingsValue
        #amount240 = decimal.Decimal(0.013)
        quantity = self.CalculateOrderQuantity("EURUSD",1) 
        holdings = False
        if holdings == False:
            if self.sadx4.Current.Value > self.ladx4.Current.Value and value4 < self.lsma4.Current.Value:
                self.MarketOrder(self.symbols[4], -quantity)
                self.MarketOrder(self.symbols[0], -quantity)
                self.MarketOrder(self.symbols[1], -quantity)
                self.MarketOrder(self.symbols[2], -quantity)
                holdings == True
                self.Debug("just went short, holdings is: " + str(holdings))
            elif self.sadx4.Current.Value > self.ladx4.Current.Value and value4 > self.lsma4.Current.Value:
                self.SetHoldings(self.symbols[4], quantity)
                self.SetHoldings(self.symbols[0], quantity)
                self.SetHoldings(self.symbols[1], quantity)
                self.SetHoldings(self.symbols[2], quantity)
                holdings == True
                self.Debug("just went long, holdings is: " + str(holdings))
        if holdings == True:
            if self.Portfolio[self.symbols[4]].IsShort:
                if value4 > self.lsma4.Current.Value and self.sadx4.Current.Value < self.ladx4.Current.Value:
                    self.Liquidate(self.symbols[4])
                    self.Liquidate(self.symbols[0])
                    self.Liquidate(self.symbols[1])
                    self.Liquidate(self.symbols[2])
                    holdings == False
            elif self.Portfolio[self.symbols[4]].IsLong:
                if value4 < self.lsma4.Current.Value and self.sadx4.Current.Value < self.ladx4.Current.Value:
                    self.Liquidate(self.symbols[4])
                    self.Liquidate(self.symbols[0])
                    self.Liquidate(self.symbols[1])
                    self.Liquidate(self.symbols[2])
                    holdings == False
    def days(self, consolidated):
        '''
        value1 = self.Securities[self.symbols[1]].Price
        value4 = self.Securities[self.symbols[4]].Price
        if not self.Securities["EURUSD"].Invested:
            if self.satr4.Current.Value > self.latr4.Current.Value and value4 < self.sma4.Current.Value:
                self.SetHoldings(self.symbols[4], -1)
                self.SetHoldings(self.symbols[0], -1)
                self.SetHoldings(self.symbols[1], -1)
                self.SetHoldings(self.symbols[2], -1)
            elif self.satr4.Current.Value > self.latr4.Current.Value and value4 > self.sma4.Current.Value:
                self.SetHoldings(self.symbols[4], 1)
                self.SetHoldings(self.symbols[0], 1)
                self.SetHoldings(self.symbols[1], 1)
                self.SetHoldings(self.symbols[2], 1)
        if self.Securities["EURUSD"].Invested:
            if self.Portfolio[self.symbols[4]].IsShort:
                if value4 > self.sma4.Current.Value and self.satr4.Current.Value < self.latr4.Current.Value:
                    self.Liquidate(self.symbols[4])
                    self.Liquidate(self.symbols[0])
                    self.Liquidate(self.symbols[1])
                    self.Liquidate(self.symbols[2])
            elif self.Portfolio[self.symbols[4]].IsLong:
                if value4 < self.sma4.Current.Value and self.satr4.Current.Value < self.latr4.Current.Value:
                    self.Liquidate(self.symbols[4])
                    self.Liquidate(self.symbols[0])
                    self.Liquidate(self.symbols[1])
                    self.Liquidate(self.symbols[2])
        '''
        pass