| Overall Statistics |
|
Total Trades 3 Average Win 0% Average Loss -1.45% Compounding Annual Return 0.894% Drawdown 13.500% Expectancy -1 Net Profit 4.554% Sharpe Ratio 0.134 Probabilistic Sharpe Ratio 1.488% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.01 Beta 0.001 Annual Standard Deviation 0.075 Annual Variance 0.006 Information Ratio -0.678 Tracking Error 0.185 Treynor Ratio 7.458 Total Fees $0.00 |
class OptimizedCalibratedAutosequencers(QCAlgorithm):
def Initialize(self):
ticker = 'GBPUSD'
self.SetStartDate(2016, 1, 1)
self.SetEndDate(2021,1,1)
self.SetCash(100000)
self.AddForex(ticker, Resolution.Daily)
# INDICATOR CODE #
########################################################################
res = Resolution.Daily
self.EnableAutomaticIndicatorWarmUp = True
self.fast = self.SMA(ticker, 50, res)
self.slow = self.SMA(ticker, 200, res)
self.true_range = self.ATR(ticker, 14, res)
self.ticket = None
def OnData(self, data):
ticker = 'GBPUSD'
if not(data.ContainsKey(ticker) and data[ticker] is not None):
return
# EXECUTION CODE #
########################################################################
if not self.Portfolio[ticker].Invested:
fast_cv = self.fast.Current.Value
slow_cv = self.slow.Current.Value
atr = self.true_range.Current.Value
if fast_cv > slow_cv:
quantity = self.CalculateOrderQuantity(ticker, 1)
self.MarketOrder(ticker, quantity)
self.ticket = self.StopMarketOrder(ticker, -quantity, data[ticker].Price - 3 * atr)
elif fast_cv < slow_cv:
quantity = self.CalculateOrderQuantity(ticker, -1)
self.MarketOrder(ticker, quantity)
self.ticket = self.StopMarketOrder(ticker, -quantity, data[ticker].Price + 3 * atr)
if self.ticket is not None:
self.Plot("SL", "LimitPrice", self.ticket.Get(OrderField.StopPrice))
self.Plot("SL", "SecurityPrice", data[ticker].Price)
if self.Portfolio[ticker].IsLong:
position = 1
elif self.Portfolio[ticker].IsShort:
position = -1
else:
position = 0
self.Plot("Position", "Val", position)