| Overall Statistics |
|
Total Trades 27 Average Win 0% Average Loss 0% Compounding Annual Return -98.259% Drawdown 3.500% Expectancy 0 Net Profit -3.274% Sharpe Ratio -16.489 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.703 Beta 1.109 Annual Standard Deviation 0.126 Annual Variance 0.016 Information Ratio -12.626 Tracking Error 0.066 Treynor Ratio -1.878 Total Fees $54.00 |
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")
from datetime import tzinfo, datetime, timedelta
from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Orders import *
from QuantConnect.Data import *
import decimal as d
class OrderTicketDemoAlgorithm(QCAlgorithm):
'''In this algorithm we submit/update/cancel each order type'''
def Initialize(self):
'''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
#self.SetEndDate(datetime.now().date() - timedelta(1))
self.SetStartDate(2013,10,07) #Set Start Date
self.SetEndDate(2013,10,9) #Set End Date
self.SetCash(10000) #Set Strategy Cash
self.SetBenchmark("EURUSD")
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage,AccountType.Margin)
# Find more symbols here: http://quantconnect.com/data
asset = self.AddForex("EURUSD",Resolution.Hour)
self.EURUSD = asset.Symbol
self.newTicket = None
self.Log("initialized Complete")
def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.'''
# Creating an Order:
if not self.Portfolio.Invested:
self.Log("Submitting StopLimitOrder")
close = self.Securities[self.EURUSD.Value].Close
StopLong=close + d.Decimal(0.003)
LimitLong=StopLong+d.Decimal(0.0001)
# How do we add a take profit of say Decimal(0.0004)?
self.newTicket = self.StopLimitOrder(self.EURUSD, 1000, StopLong, LimitLong)
time_order=self.newTicket.Time
EXPIRY=time_order+timedelta(hours=2)
self.Log("Order: {0}. time order: {1}. EXPIRY: {2}".format(self.newTicket,time_order,EXPIRY))
# Alex: adds this else because EXPIRY must be defined for later use
else:
self.Log("ELSE -timedelta(1){0}.".format(timedelta(1)))
EXPIRY=self.UtcTime-timedelta(1) # Alex's suggested Hack - seems this could create bugs?
self.Log("self.UtcTime:{0}.".format(self.UtcTime))
self.Log("EXPIRY:{0}.".format(EXPIRY))
self.Log("self.newTicket :: {0}.".format(self.newTicket))
if self.newTicket!=None: #ALEX 's Suggestion - Not sure how it contributes to our objective - if anyone could clarify?
if self.UtcTime >= EXPIRY:
self.newTicket.Cancel()
self.Log("Order Expired: self.Time >= EXPIRY")
self.newTicket=None
def OnOrderEvent(self, orderEvent):
order = self.Transactions.GetOrderById(orderEvent.OrderId)
self.Log("{0}: {1}: {2}".format(self.Time, order.Type, orderEvent))
def TimeIs(self, day, hour, minute):
return self.Time.day == day and self.Time.hour == hour and self.Time.minute == minute