| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
from datetime import datetime
import decimal as d
from QuantConnect.Indicators import *
from NodaTime import DateTimeZone
class ExchangeRateGrinder(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2018, 6, 17) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.tickers = ["DKKEUR"]
self.SetWarmUp(20)
self.market = Market.Oanda
self.res = Resolution.Hour
self.bb = {}
self.states = {}
self.risk = 0.2
self.SetTimeZone(DateTimeZone.Utc)
for ticker in self.tickers:
self.AddForex(ticker,self.res, self.market)
self.bb[ticker] = self.BB(ticker, 20, 1.5, MovingAverageType.Simple, self.res)
self.states[ticker] = 0
def OnData(self,data):
self.cash = self.Portfolio.Cash
self.investment = self.cash * self.risk
self.Debug(investment)
if self.Time.hour >= 22 or self.Time.hour <= 8: #only trading between 10pm and 8am UTC
for ticker in self.tickers:
self.holdings = self.Securities[ticker].Quantity
price = self.Securities[symbol].Price
lower = self.bb[ticker].LowerBand.Current.Value
upper = self.bb[ticker].UpperBand.Current.Value
middle = self.bb[ticker].MiddleBand.Current.Value
self.Debug(price)
# if already long - liquidate if >= mean
if (self.states[ticker] == 1) and (price >= middle):
self.Liquidate(ticker)
self.states[ticker] = 0
# if already short - liquidate if <=mean
if (self.states[ticker] == -1) and (price <= middle):
self.Liquidate(ticker)
self.states[ticker] = 0
# if close is below lower band go long
if price <= lower:
# and not already holding or short
if self.states[ticker] <= 0:
self.Liquidate(ticker)
self.SetHoldings(ticker, 1)
self.states[ticker] = 1
# if close is abover upper band go short
if price >= upper:
# and not already holding or long
if self.states[ticker] >= 0:
self.Liquidate(ticker)
self.SetHoldings(ticker, -1)
self.states[ticker] = -1