Overall Statistics
Total Trades
3
Average Win
0%
Average Loss
-1.88%
Compounding Annual Return
-46.286%
Drawdown
4.400%
Expectancy
-1
Net Profit
-2.853%
Sharpe Ratio
-5.778
Probabilistic Sharpe Ratio
0.740%
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.437
Beta
0.111
Annual Standard Deviation
0.073
Annual Variance
0.005
Information Ratio
-5.733
Tracking Error
0.095
Treynor Ratio
-3.826
Total Fees
$0.00
class QuantumTransdimensionalReplicator(QCAlgorithm):
    stopMarketTicket = None 
    highestEURUSDPrice = 0
    stop_price = None
    
    def Initialize(self):
        self.SetStartDate(2018,7, 30)  # Set Start Date
        self.SetEndDate(2018,8, 15) #Set End Date
        self.SetCash(5000)  # Set Strategy Cash
        # self.private Identity _prevClose;
        
        self.trailing_stop_distance = 0.98
    

        self.AddForex("EURUSD", Resolution.Minute,Market.FXCM)
        self.Consolidate("EURUSD",timedelta(minutes=15), self.fifeteenminutebar)
        self.Rsi_in = self.RSI("EURUSD", 14, MovingAverageType.Simple)
        self.Window = RollingWindow[QuoteBar](2)
       
       
        self.SetWarmUp(timedelta(20))
        



    def OnData(self, data):

        
        #Add security
        self.Window.Add(data["EURUSD"])
    
        #self.Plot("Levels", "Asset Price", self.Securities["EURUSD"].Price)
        
        if not (self.Rsi_in.IsReady and self.Window.IsReady and not self.IsWarmingUp):
            return
        currBar = self.Window[0]
        pastBar = self.Window[1]
        #self.Log("Price: {0} -> {1} ... {2} -> {3}".format(pastBar.Time, pastBar.Close, currBar.Time, currBar.Close))

            
        if self.Rsi_in.Current.Value < 20 and self.Portfolio["EURUSD"].Invested <= 0 and currBar.Value > pastBar.Value:
            #self.Debug("RSI is less then 20")
            self.MarketOrder("EURUSD", 5000)
            self.highestEURUSDPrice = self.Securities["EURUSD"].Close
            self.stop_price = self.trailing_stop_distance * self.highestEURUSDPrice
            self.stopMarketTicket = self.StopMarketOrder("EURUSD", -5000, self.stop_price)
            
        elif self.Portfolio["EURUSD"].Invested:
        #self.Plot("Levels", "Stop Price",  self.Securities["EURUSD"].Price * 0.9)
            
             if self.Securities["EURUSD"].Close > self.highestEURUSDPrice: 
                self.highestEURUSDPrice = self.Securities["EURUSD"].Close
                
                updateFields = UpdateOrderFields()
                updateFields.StopPrice = self.highestEURUSDPrice * self.trailing_stop_distance
                self.stop_price = self.highestEURUSDPrice * self.trailing_stop_distance
                self.stopMarketTicket.Update(updateFields)
        
        self.Plot("Custom", "Price", self.Securities["EURUSD"].Close)
        if self.stop_price is not None:
            self.Plot("Custom", "Stop", self.stop_price)
            
                
                
            
    def OnOrderEvent(self, orderEvent):
        if orderEvent.Status != OrderStatus.Filled:
            return
        if self.stopMarketTicket is not None and self.stopMarketTicket.OrderId == orderEvent.OrderId: 
            self.stopMarketOrderFillTime = self.Time
            self.stopMarketTicket = None
            self.stop_price = None


        
    def fifeteenminutebar(self, bar):
        pass
from QuantConnect import *
from Selection.ManualUniverseSelectionModel import ManualUniverseSelectionModel

class G10CurrencySelectionModel(ManualUniverseSelectionModel):
    def __init__(self):
        super().__init__([Symbol.Create(x, SecurityType.Forex, Market.Oanda) for x in [ "EURUSD", "GBPUSD", "USDJPY", "AUDUSD", "NZDUSD","USDCAD", "USDCHF", "USDNOK", "USDSEK"]])