| Overall Statistics |
|
Total Trades 12 Average Win 2.78% Average Loss -1.47% Compounding Annual Return 53.431% Drawdown 8.100% Expectancy 0.446 Net Profit 3.824% Sharpe Ratio 1.902 Loss Rate 50% Win Rate 50% Profit-Loss Ratio 1.89 Alpha 0.611 Beta -0.367 Annual Standard Deviation 0.186 Annual Variance 0.035 Information Ratio -1.219 Tracking Error 0.282 Treynor Ratio -0.966 Total Fees $12.00 |
import numpy as np
import pandas as pd
class TachyonQuantumProcessor(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2019, 1, 1) # Set Start Date
self.SetEndDate(2019,2,1)
self.SetCash(10000) # Set Strategy Cash
self.symbols = ['AAPL','NFLX','NVDA','TSLA','SPY']
for i in self.symbols:
self.AddEquity(i,Resolution.Minute,Market.USA,True,1,True)
self.openPrices = pd.DataFrame(columns=self.symbols)
self.closePrices = pd.DataFrame(columns=self.symbols)
self.gapPercentage = pd.DataFrame(columns=self.symbols)
self.highestPrice = pd.DataFrame(columns=self.symbols)
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(9,30), self.EveryDayOpen)
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(12,30), self.EveryDayLiquidate)
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(15,30), self.EveryDayClose)
self.stopMarketTicket = {}
def EveryDayOpen(self):
open = []
for symbol in self.symbols:
newOpen = self.dataPrice[symbol].Open
open = np.append(open, newOpen)
self.openPrices.loc[0,self.symbols] = open
self.gapPercentage = (self.openPrices-self.closePrices)/self.closePrices
openingPos = np.sum(np.sum(self.gapPercentage>0.03)+np.sum(self.gapPercentage<-0.03))
for symbol in self.symbols:
if self.gapPercentage[symbol].iloc[0] > 0.03:
self.SetHoldings(symbol,1/openingPos)
self.stopMarketTicket[symbol] = self.StopMarketOrder(symbol, -1*self.Portfolio[symbol].Quantity, self.Securities[symbol].Close*0.97)
# self.stopMarketTicket = self.StopMarketOrder(symbol, -1*self.Portfolio[symbol].Quantity, self.Securities[symbol].Close*0.97)
self.highestPrice[symbol] = self.Securities[symbol].Close
elif self.gapPercentage[symbol].iloc[0] < -0.03:
self.SetHoldings(symbol,-1/openingPos)
self.stopMarketTicket[symbol] = self.StopMarketOrder(symbol, -1*self.Portfolio[symbol].Quantity, self.Securities[symbol].Close*1.03)
# self.stopMarketTicket = self.StopMarketOrder(symbol, -1*self.Portfolio[symbol].Quantity, self.Securities[symbol].Close*1.03)
self.highestPrice[symbol] = self.Securities[symbol].Close
self.Log(f'{self.stopMarketTicket}')
def EveryDayLiquidate(self):
self.Liquidate()
def EveryDayClose(self):
self.Liquidate()
close = []
for symbol in self.symbols:
newClose = self.dataPrice[symbol].Close
close = np.append(close, newClose)
self.closePrices.loc[0,self.symbols] = close
def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Arguments:
data: Slice object keyed by symbol containing the stock data
'''
self.dataPrice = data