| Overall Statistics |
|
Total Trades 23 Average Win 1.09% Average Loss -0.23% Compounding Annual Return -1.177% Drawdown 2.300% Expectancy -0.475 Net Profit -1.344% Sharpe Ratio -0.771 Loss Rate 91% Win Rate 9% Profit-Loss Ratio 4.78 Alpha -0.008 Beta 0.115 Annual Standard Deviation 0.012 Annual Variance 0 Information Ratio 0.101 Tracking Error 0.068 Treynor Ratio -0.082 Total Fees $0.00 |
#
# Trading Orders Algorithm
#
# Ref: https://www.quantconnect.com/docs#Trading-and-Orders
# https://www.quantconnect.com/docs#Charting
#
import decimal
from datetime import timedelta
class TradingOrdersAlgorithm(QCAlgorithm):
def Initialize(self):
# Set cash allocation for backtest
# In live trading this is ignored and your real account is used.
self.SetCash(5000);
# Start and end dates for the backtest.
# These are ignored in live trading.
self.SetStartDate(2016,1,1)
self.SetEndDate(2017,1,1)
# Specify the OANDA Brokerage: This gives lets us know the fee models & data.
self.SetBrokerageModel(BrokerageName.OandaBrokerage)
# Add assets you'd like to see
self.AddForex("EURUSD", Resolution.Minute)
self.SetBenchmark("EURUSD")
self.sma = self.SMA("EURUSD", 30, Resolution.Daily)
self.SetWarmup(timedelta(50))
def OnData(self, slice):
if self.Portfolio["EURUSD"].IsLong:
return
price = slice["EURUSD"].Value
if price > self.sma.Current.Value:
# Buy 1000 shares of EURUSD
self.Buy("EURUSD", 1000)
# Place a Take Profit Limit order for 5% gain
self.LimitOrder("EURUSD", -1000, price * decimal.Decimal(1.05))
# Place a Stop Loss (Stop Market) order for a 1% loss
self.StopMarketOrder("EURUSD", -1000, price * decimal.Decimal(0.99))
def OnOrderEvent(self, orderEvent):
if orderEvent.Status == OrderStatus.Submitted or orderEvent.Status == OrderStatus.Canceled:
return
if orderEvent.FillQuantity < 0:
self.Transactions.CancelOpenOrders("EURUSD")
else:
self.Log("Buy EURUSD at {0}. SMA30d: {1}".format(orderEvent.FillPrice, self.sma.Current.Value))