Overall Statistics |
Total Trades 2 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 Estimated Strategy Capacity $7700000.00 Lowest Capacity Asset GBPUSD 8G Portfolio Turnover 2030.81% |
from AlgorithmImports import * import numpy as np import pandas as pd import math from datetime import datetime class MyTradingAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2023, 4, 25) self.SetEndDate(2023, 4 , 25) self.SetCash(100000) self.forecast_period = 15 self.GBPUSD = self.AddForex("GBPUSD", Resolution.Minute).Symbol self.close_price_window = RollingWindow[float](240) # Holds the last 2 EMA values self.highestPriceWindow = RollingWindow[float](2) self.lowestPriceWindow = RollingWindow[float](2) self.leverage_power = 10 # Order variables self.entryTicket = None self.stopMarketTicket = None self.counter = 0 self.SetWarmUp(101) stockPlot = Chart('Price Plot') stockPlot.AddSeries(Series('Close Price', SeriesType.Line, '$', Color.Black)) stockPlot.AddSeries(Series('Low Price', SeriesType.Line, '$', Color.Red)) stockPlot.AddSeries(Series('High Price', SeriesType.Line, '$', Color.Green)) stockPlot.AddSeries(Series('Long', SeriesType.Scatter, '$', Color.Red, ScatterMarkerSymbol.Triangle)) self.AddChart(stockPlot) def OnData(self, data): if self.IsWarmingUp: return if not data.ContainsKey(self.GBPUSD): return self.close_price_window.Add(data[self.GBPUSD].Close) # Add the high and low prices from the previous time period to the respective RollingWindows self.highestPriceWindow.Add(data[self.GBPUSD].High) self.lowestPriceWindow.Add(data[self.GBPUSD].Low) self.counter = self.counter + 1 if self.Time.hour == 9 and self.Time.minute == 22: self.enter_trade(data[self.GBPUSD].Symbol, self.leverage_power, self.lowestPriceWindow[1], data[self.GBPUSD].Close ) self.Plot('Price Plot', 'Close Price', data[self.GBPUSD].Close) self.Plot('Price Plot', 'High Price', data[self.GBPUSD].High) self.Plot('Price Plot', 'Low Price', data[self.GBPUSD].Low) def OnOrderEvent(self, orderEvent): if orderEvent.Status != OrderStatus.Filled: return order = self.Transactions.GetOrderById(orderEvent.OrderId) # save fill time of stop loss order if self.stopMarketTicket is not None and self.stopMarketTicket.OrderId == order.Id: self.stopMarketOrderFillTime = self.Time self.Plot('Price Plot', 'Stop Loss', self.stopMarketTicket.AverageFillPrice) self.Log("Stop Loss: " + self.stopMarketTicket.Tag) self.stopMarketTicket = None # Enter Trade def enter_trade(self, Symbol, leverage, stop_price, close_price ): quantity = self.CalculateOrderQuantity(Symbol, leverage) self.entryTicket = self.MarketOrder(Symbol, (quantity)) self.Plot('Price Plot', 'Long', self.entryTicket.AverageFillPrice) if quantity > 0: stop_price = stop_price * (1- 0.0008) else: stop_price = stop_price * (1.0008) # send stop loss order if market order is filled if self.entryTicket is not None: self.stopMarketTicket = self.StopMarketOrder(self.GBPUSD, -self.entryTicket.Quantity, stop_price) self.Log("Stop Loss Quantity filled:" + str(self.stopMarketTicket.QuantityFilled) + "Fill price:" + str(self.stopMarketTicket.AverageFillPrice)) if quantity > 0: self.Log("Long: " + str(close_price)) else: self.Log("Short: " + str(close_price)) self.entryTicket = None