Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return -4.017% Drawdown 15.900% Expectancy 0 Net Profit -4.007% Sharpe Ratio -0.088 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.035 Beta 1.116 Annual Standard Deviation 0.186 Annual Variance 0.035 Information Ratio -0.176 Tracking Error 0.186 Treynor Ratio -0.015 Total Fees $1.19 |
namespace QuantConnect { /* * QuantConnect University - Creating and Updating Limit Orders * * This algorithm walks through an example of creating and updating a limit order. * The orders are stored in the Transactions Manager inside the algorithm. * * For the demonstration we will place a buy limit order for 5% below of SPY's price, * and every 5 days update it until its filled */ public class QCULimitOrders : QCAlgorithm { //Access for the order we'll place OrderTicket _limitOrder; string _symbol = "SPY"; decimal _price = 0; int _rebalancePeriod = 5; DateTime _updatedDate; //Initialize the data and resolution you require for your strategy: public override void Initialize() { SetStartDate(2000, 1, 1); SetEndDate(2000, 12, 31); SetCash(25000); AddSecurity(SecurityType.Equity, _symbol, Resolution.Daily); } //Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol. public void OnData(TradeBars data) { _price = data[_symbol].Close; //Create the first order if (_limitOrder == null) { //Set our first order to less than SPY's price: var quantity =(int)(Portfolio.Cash/_price); _limitOrder = LimitOrder(_symbol, quantity, (_price * 0.95m)); Debug("Created limit order with " + _symbol + " Price: " + _price.ToString("C") + " id: " + _limitOrder.OrderId); } //Update the limit price once per week: if (_updatedDate.Date < Time.Date && !Portfolio.Invested) { _updatedDate = Time.Date.AddDays(_rebalancePeriod); var newLimitPrice = _price*0.95m; var currentLimitPrice = _limitOrder.Get(OrderField.LimitPrice); if (newLimitPrice > currentLimitPrice) { //Submit the request to update our limit order _limitOrder.Update(new UpdateOrderFields{LimitPrice = newLimitPrice}); } } } // Print the order event information to the console. public override void OnOrderEvent(OrderEvent orderEvent) { var order = Transactions.GetOrderById(orderEvent.OrderId); Console.WriteLine("{0}: {1}: {2}", Time, order.Type, orderEvent); } /* * For our plotting we can show the limit price and MSFT to check if its hit. */ public override void OnEndOfDay() { Plot("Limit Plot", _symbol, _price); if (_limitOrder.Status != OrderStatus.Filled) { Plot("Limit Plot", "Limit", _limitOrder.Get(OrderField.LimitPrice)); } } } }