| Overall Statistics |
|
Total Trades 18 Average Win 0% Average Loss -0.93% Compounding Annual Return -99.851% Drawdown 9.700% Expectancy -1 Net Profit -8.050% Sharpe Ratio -5.03 Probabilistic Sharpe Ratio 0% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -3.861 Beta 1.281 Annual Standard Deviation 0.183 Annual Variance 0.033 Information Ratio -26.353 Tracking Error 0.122 Treynor Ratio -0.718 Total Fees $0.00 Estimated Strategy Capacity $250000.00 Lowest Capacity Asset NAS100USD 8I Portfolio Turnover 3879.86% |
from AlgorithmImports import *
class MyAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2023, 8, 28)
self.SetEndDate(2023, 9, 2)
self.SetCash(100000)
self.symbol = self.AddCfd("NAS100USD").Symbol
self.window = RollingWindow[IBaseDataBar](3)
self.highWindow = RollingWindow[float](3)
self.lowWindow = RollingWindow[float](3)
self.openWindow = RollingWindow[float](3)
self.closeWindow = RollingWindow[float](3)
self.levels = {}
self.orders = {}
def OnData(self, data):
self.highWindow.Add(data[self.symbol].High)
self.lowWindow.Add(data[self.symbol].Low)
self.openWindow.Add(data[self.symbol].Open)
self.closeWindow.Add(data[self.symbol].Close)
current_utc_time = self.UtcTime
if current_utc_time.hour==20:
self.Liquidate()
if (current_utc_time.hour >= 14 and current_utc_time.hour < 20 and self.highWindow[2] - self.lowWindow[2]>12 and self.highWindow[2] - self.lowWindow[2]<40):
if self.openWindow[2] > self.closeWindow[2]:
if self.closeWindow[1] > self.highWindow[2]:
self.levels[data.Time] = {
"type": "Long",
"buy": self.highWindow[2],
"stoploss": self.lowWindow[2],
"take_profit": self.highWindow[2] + 2 * (self.highWindow[2] - self.lowWindow[2])
}
# Calculating order size and placing orders
for symbol in data.Keys:
if data.Time in self.levels:
risk = self.Portfolio.Cash * 0.01
level = self.levels[data.Time]
order_size = risk / (level["buy"] - level["stoploss"])
if level["type"] == "Long":
self.orders[data.Time] = self.LimitOrder(self.symbol, order_size, level["buy"])
self.orders[data.Time] = self.StopMarketOrder(self.symbol, -order_size, level["stoploss"])