Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return -6.602% Drawdown 1.600% Expectancy 0 Net Profit -1.044% Sharpe Ratio -1.818 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.047 Beta 0.023 Annual Standard Deviation 0.026 Annual Variance 0.001 Information Ratio -0.332 Tracking Error 0.132 Treynor Ratio -2.06 Total Fees $0.00 |
import numpy as np import decimal import datetime class ALM20(QCAlgorithm): stop_market_ticket = None highest_price = -1 lowest_price = 9999 position_type = None symbol = 'EURUSD' def Initialize(self): self.SetCash(10000) self.SetStartDate(2019,7,1) self.AddForex(self.symbol, Resolution.Minute, Market.Oanda, 100.0) self.SetWarmUp(15) def OnData(self, data): self.Plot("Data Chart", "Asset Price", data[self.symbol].Close) if not self.Portfolio.Invested: self.current_price = data[self.symbol].Price self.eur_usd_df = self.History([self.symbol], 15, Resolution.Minute) if not self.eur_usd_df.empty: eur_usd_quotebars = self.eur_usd_df.loc['EURUSD'] if eur_usd_quotebars['close'][0] < self.current_price: # self.Debug('Buy') self.position_type = 'Long' self.highest_price = self.current_price self.Log(f'Buying - Current: {self.current_price}, SL: {self.current_price - 0.0020}') self.stop_market_ticket = self.StopMarketOrder(self.symbol, 5000, self.current_price - 0.0020) else: # self.Debug('Sell') self.position_type = 'Short' self.stop_market_ticket = self.StopMarketOrder(self.symbol, -5000, self.current_price + 0.0020) else: # TRY CLOSED PRICE if self.position_type == 'Long': if data[self.symbol].Price > self.highest_price: new_stop = decimal.Decimal(data[self.symbol].Price - 0.0020) self.Log('Price is higher, update StopLoss') self.Log(f'Highest: {self.highest_price}, Current: {data[self.symbol].Price}, new SL: {new_stop}') self.highest_price = data[self.symbol].Price update_fields = UpdateOrderFields() update_fields.StopPrice = new_stop self.stop_market_ticket.Update(update_fields) self.Log(f'ticket {self.stop_market_ticket}') elif self.position_type == 'Short': if data[self.symbol].Price < self.lowest_price: self.lowest_price = data[self.symbol].Price difference = data[self.symbol].Price + 0.0020 self.Debug('Short hit') update_fields = UpdateOrderFields() update_fields.StopPrice = difference self.stop_market_ticket.Update(update_fields) def OnOrderEvent(self, orderEvent): self.Log(f'Orderevent: {orderEvent}') # if orderEvent.Status != OrderStatus.Filled: # return # if self.stopMarketTicket is not None and self.stopMarketTicket.OrderId == orderEvent.OrderId: # self.stopMarketOrderFillTime = self.Time