Overall Statistics |
Total Trades 3 Average Win 0% Average Loss 0% Compounding Annual Return 0.000% Drawdown 0.000% Expectancy 0 Net Profit 0.000% Sharpe Ratio 0.57 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -49.178 Tracking Error 0 Treynor Ratio 0.142 Total Fees $0.00 |
namespace QuantConnect.Algorithm.CSharp { /// <summary> /// Basic template algorithm simply initializes the date range and cash. This is a skeleton /// framework you can use for designing an algorithm. /// </summary> public class BasicTemplateAlgorithm : QCAlgorithm { private Symbol _eurusd; private RelativeStrengthIndex _rsi; private DateTime startdate; private DateTime enddate; private OrderTicket order; private OrderTicket limit; private OrderTicket stop; private bool trading; /// <summary> /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized. /// </summary> public override void Initialize() { trading = false; startdate = new DateTime(2017,1,1); enddate = new DateTime(2018,12,20); SetStartDate(startdate); //Set Start Date SetEndDate(enddate); //Set End Date SetCash(100000); //Set Strategy Cash AddForex("EURUSD",Resolution.Hour,Market.Oanda); SetBrokerageModel(BrokerageName.OandaBrokerage); var lot = Securities["EURUSD"].SymbolProperties.LotSize; Debug("the lot size is "+ lot); var orderQuantity = 20180.12m; var order = Securities["EURUSD"].SymbolProperties.ContractMultiplier; Debug("the order size is "+ Math.Round(orderQuantity/lot)*lot); _eurusd = QuantConnect.Symbol.Create("EURUSD", SecurityType.Forex, Market.Oanda); _rsi = RSI(_eurusd,14,MovingAverageType.Wilders,Resolution.Hour); } /// <summary> /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. /// </summary> /// <param name="data">Slice object keyed by symbol containing the stock data</param> public override void OnData(Slice data) { if (!_rsi.IsReady){ return; } QuoteBar quote = data[_eurusd]; Decimal price = quote.Close; Log(_rsi +" "+ price); if (trading){ return; } decimal p = 1.001m; if (_rsi <= 30 && _rsi >= 25){ decimal limit = price+0.0046m; decimal stop = price-0.0050m; order = MarketOrder(_eurusd,1,false); //Log("the price is " + price); //Log("the limit is "+ limit); //Log("the stop is "+ stop); //Console.WriteLine("limit: "+limit); //Console.WriteLine("stop: "+stop); this.limit = LimitOrder(_eurusd,1,limit); this.stop = StopMarketOrder(_eurusd,1,stop); //LimitOrder(_eurusd,1,limit); trading = true; } if (_rsi >= 70 && _rsi <= 75){ decimal limit = price-0.0046m; decimal stop = price+0.0050m; //Log("the direction is Sell"); //Log("the price is "+ price); //Log("the limit is "+ limit); //Log("the stop is "+ stop); order = MarketOrder(_eurusd,1,false); this.limit = LimitOrder(_eurusd,1,limit); this.stop = StopMarketOrder(_eurusd,1,stop); //Log("The orderid for market order is "+ order.OrderId); //Log("the order id for limit order is "+ this.limit.OrderId); //Log("the order id for stop order is "+ this.stop.OrderId); trading = true; } } public override void OnOrderEvent(OrderEvent orderevent){ //return; //Log("OrderEvent occured"); //Log("OrderEvent Status " + orderevent.Status); //Log("The Order Id is " + orderevent.OrderId); if (orderevent.OrderId == 2){ if (orderevent.Status != null){ if (orderevent.Status == OrderStatus.Filled){ Transactions.CancelOrder(1); Transactions.CancelOrder(2); Transactions.CancelOrder(3); } } } //Log("OrderStatus marketorder" + order.Status); //Log("OrderStatus limitorder" + limit.Status); //Log("OrderStatus stoporder" + stop.Status); //Console.WriteLine("an order event happened"); //Console.WriteLine("the order status: "+orderevent.Status); //Console.WriteLine("the order fillprice "+orderevent.FillPrice); /*if (orderevent.Status == OrderStatus.Filled){ order.Cancel(); }*/ } } }