| Overall Statistics |
|
Total Trades 20 Average Win 0% Average Loss 0.00% Compounding Annual Return -0.981% Drawdown 0.000% Expectancy -1 Net Profit -0.013% Sharpe Ratio -68.807 Probabilistic Sharpe Ratio 0% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.005 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -6.694 Tracking Error 0.14 Treynor Ratio 18.653 Total Fees $0.00 |
from Execution.ImmediateExecutionModel import ImmediateExecutionModel
from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Data import *
from datetime import timedelta
import pandas as pd
from io import StringIO
class main(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020,7,27) # Set Start Date
self.SetEndDate(2020,12,31)# Set End Date
self.SetCash(100000) # Set Strategy Cash
# If using dropbox remember to add the &dl=1 to trigger a download
csv = self.Download("https://www.dropbox.com/s/2hlxb85lo7y10i3/test.csv?dl=1")
# read file (which needs to be a csv) to a pandas DataFrame. include following imports above
self.df = pd.read_csv(StringIO(csv))
self.SetExecution(ImmediateExecutionModel())
self.AveragePrice = None
self.security= None
self.quantity= None
for i in range(len(self.df)) :
self.security=str(self.df.iloc[i,0]).replace(" ", "")
self.quantity=self.df.iloc[i,1]
self.AddEquity(self.security,Resolution.Minute).SetDataNormalizationMode(DataNormalizationMode.Raw)
self.Debug(i)
# DAY'S START BUY ACTION
################################################################################################################################
self.Schedule.On(self.DateRules.EveryDay(self.security), self.TimeRules.At(self.df.iloc[i,4], self.df.iloc[i,5]),Action(self.EveryDayAfterMarketOpen))
#DAY'S END LIQUIDATE SELL ACTION
##################################################################################################################################
self.Schedule.On(self.DateRules.EveryDay(self.security), self.TimeRules.At(self.df.iloc[i,6], self.df.iloc[i,7]),Action(self.SpecificTime))
############## SLIPPAGE & FEE MODEL####################################################################
self.Securities[self.security].FeeModel = ConstantFeeModel(0)
self.Securities[self.security].SlippageModel = ConstantSlippageModel(0)
def SpecificTime(self):
self.Liquidate(self.security)
def EveryDayAfterMarketOpen(self):
self.MarketOrder(self.security, self.quantity)
self.AveragePrice = self.Portfolio[self.security].AveragePrice
## CODE TO TRIGGER STOP LOSSES AND TAKE PROFITS
def OnData(self, slice):
if not slice.Bars.ContainsKey(self.security): return
if self.AveragePrice != None :
if (slice[self.security].Price > self.AveragePrice * self.df.iloc[0,2]):
self.Liquidate(self.security," TAKE PROFIT @ " + str(slice[self.security].Price) +" AverageFillPrice " +str(self.AveragePrice))
if (slice[self.security].Price < self.AveragePrice * self.df.iloc[0,3]):
self.Liquidate(self.security," STOP LOSS @ " + str(slice[self.security].Price) +" AverageFillPrice " +str(self.AveragePrice))