| Overall Statistics |
|
Total Trades 53 Average Win 0.00% Average Loss -0.01% Compounding Annual Return -0.051% Drawdown 0.200% Expectancy -0.089 Net Profit -0.101% Sharpe Ratio -0.518 Loss Rate 38% Win Rate 62% Profit-Loss Ratio 0.48 Alpha -0.011 Beta 0.747 Annual Standard Deviation 0.001 Annual Variance 0 Information Ratio -20.878 Tracking Error 0.001 Treynor Ratio 0 Total Fees $0.00 |
from QuantConnect.Data import SubscriptionDataSource
from QuantConnect.Python import PythonData
from datetime import date, timedelta, datetime
from decimal import Decimal
class importCustomDataExample(QCAlgorithm):
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.SetStartDate(2017,1, 10) #Set Start Date
self.SetEndDate(2018,12,31) #Set End Date
self.SetCash(10000) #Set Strategy Cash
# Add custom data to security universe
self.AddData(predEURUSD, "predEURUSD", Resolution.Hour)
# Add EUR/USD currency pair to security universe
self.AddForex("EURUSD", Resolution.Hour, Market.Oanda)
def OnData(self, data):
if not data.ContainsKey("predEURUSD") or not data.ContainsKey("EURUSD"): return
# Retrieve High Ask Price from object
highASK=data["predEURUSD"].Value
quoteBar = data['EURUSD']
# User variables
highASKOpendiff = highASK- quoteBar.Open
BuyTPASK=Decimal(highASKOpendiff*0.8)
BuySLASK=highASKOpendiff*2
# Buy currency pair
if not self.Portfolio.Invested and highASKOpendiff > 0.0030:
self.Buy("EURUSD", 100)
averageFillPrice = self.Portfolio["EURUSD"].AveragePrice
# Use average fill price to determine stop-loss and take-profit price level
self.LimitOrder("EURUSD", -100, (averageFillPrice + BuyTPASK))
self.StopMarketOrder("EURUSD", -100, (averageFillPrice -BuySLASK))
### Cancel remaining order if limit order or stop loss order is executed
def OnOrderEvent(self, orderEvent):
order = self.Transactions.GetOrderById(orderEvent.OrderId)
if order.Status == OrderStatus.Filled:
if order.Type == OrderType.Limit or order.Type == OrderType.Limit:
self.Transactions.CancelOpenOrders(order.Symbol)
if order.Status == OrderStatus.Canceled:
self.Log(str(orderEvent))
class predEURUSD(PythonData):
"Import custom data from a csv file"
def GetSource(self, config, date, isLiveMode):
return SubscriptionDataSource("http://sensedrive.science/files/EURUSD1H_CHL_ASK_cat.csv", SubscriptionTransportMedium.RemoteFile)
def Reader(self, config, line, date, isLiveMode):
if not (line.strip() and line[0].isdigit()): return None
index = predEURUSD()
index.Symbol = config.Symbol
try:
data = line.split(',')
index.Time = datetime.strptime(data[0], "%Y-%m-%d %H:%M:%S")
### Retrieve "predicted" High Ask Price
index.Value = Decimal(data[2])
except:
return None
return index