| Overall Statistics |
|
Total Trades 360 Average Win 3.65% Average Loss -3.71% Compounding Annual Return 2.383% Drawdown 60.200% Expectancy 0.055 Net Profit 41.019% Sharpe Ratio 0.218 Loss Rate 47% Win Rate 53% Profit-Loss Ratio 0.98 Alpha 0.059 Beta 0.005 Annual Standard Deviation 0.275 Annual Variance 0.076 Information Ratio -0.141 Tracking Error 0.398 Treynor Ratio 12.316 Total Fees $13846.37 |
# https://quantpedia.com/Screener/Details/61
from QuantConnect.Data import SubscriptionDataSource
from QuantConnect.Python import PythonData
from datetime import date, timedelta, datetime
from decimal import Decimal
import numpy as np
import pandas as pd
class TradeWtiBrentSpreadAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2004, 1, 1)
self.SetEndDate(2018, 8, 1)
self.SetCash(100000)
# import the custom data
self.AddData(MoonPhase, "phase", Resolution.Daily)
self.AddEquity("EEM", Resolution.Daily)
self.SetBenchmark("EEM")
def OnData(self, data):
# long in emerging market index ETF 7 days before the new moon (It's the Last Quarter)
if self.Securities["phase"].Price == 3 and not self.Portfolio["EEM"].IsLong:
self.SetHoldings("EEM", 1)
# short on emerging market index ETF 7 days before the full moon (It's the First Quarter)
elif self.Securities["phase"].Price == 1 and not self.Portfolio["EEM"].IsShort:
self.SetHoldings("EEM", -1)
class MoonPhase(PythonData):
"Class to import Phases of the Moon data from Dropbox"
def GetSource(self, config, date, isLiveMode):
return SubscriptionDataSource("https://www.dropbox.com/s/q9rt06tpfjlvymt/MoonPhase.csv?dl=1", SubscriptionTransportMedium.RemoteFile)
def Reader(self, config, line, date, isLiveMode):
index = MoonPhase()
index.Symbol = config.Symbol
try:
# Example File Format: (Data starts from 01/07/2004)
# date phase
# 2004 Jan 07 15:40 Full Moon
data = line.split(',')
if data[0] == "date": return None
index.Time = datetime.strptime(data[0], "%Y %b %d %H:%M").replace(hour=0, minute=0)
if data[1] == "New Moon":
index.Value = 0
elif data[1] == "First Quarter":
index.Value = 1
elif data[1] == "Full Moon":
index.Value = 2
elif data[1] == "Last Quarter":
index.Value = 3
except:
return None
return index