namespace Quantconnect
{
public class Beginning : QCAlgorithm
{
string _symbol = "SPY";
WilliamsPercentR _willr;
const decimal StopLossPercent = 0.01m ;
const decimal take_profit = 0.02m ;
decimal _price;
// decimal five_perc = 0.05m;
int loss = 0 ;
private OrderTicket CurrentOrder;
private OrderTicket StopLoss;
private OrderTicket TakeProfit;
//Initialize the data and resolution you require for your strategy:
public override void Initialize()
{
//Initialize
SetStartDate(2016, 1, 1);
SetEndDate(2017, 8, 15);
SetCash(25000);
//Add as many securities as you like. All the data will be passed into the event handler:
AddSecurity(SecurityType.Equity, _symbol, Resolution.Minute);
// var fiveMinuteConsolidator = new TradeBarConsolidator(TimeSpan.FromMinutes(5));
_willr = WILR(_symbol, 9, Resolution.Minute);
// RegisterIndicator(_symbol, _willr , fiveMinuteConsolidator);
// SubscriptionManager.AddConsolidator(_symbol, fiveMinuteConsolidator);
// fiveMinuteConsolidator.DataConsolidated += FiveMinuteHandler;
//Set up Indicators:
}
public void OnData(TradeBars data)
{
if (!_willr.IsReady) return;
_price = data[_symbol].Close;
if (!Portfolio.HoldStock && (_willr < -80 ))
{
// int quantity = ((int)Math.Floor((Portfolio.Cash / _price)*five_perc));
int quantity = (int)Math.Floor((Portfolio.Cash / _price));
// int quantity =1 ;
//Order function places trades: enter the string symbol and the quantity you want:
CurrentOrder = Order(_symbol, quantity);
StopLoss = StopMarketOrder(_symbol, -quantity, _price * (1m - StopLossPercent));
TakeProfit = LimitOrder(_symbol, -quantity, _price * (1m + take_profit));
//Debug sends messages to the user console: "Time" is the algorithm time keeper object
Debug("Purchased SPY on " + CurrentOrder ) ;
Debug("Stop loss " + StopLoss) ;
Debug("Take Profit " + TakeProfit) ;
}
if (Portfolio.HoldStock)
if (_price < StopLoss)
{
loss++;
Debug("Stop Loss Hit " + Time.ToShortDateString());
string log_loss = loss.ToString();
Log(log_loss);
}
else if (_price >= TakeProfit)
{
loss = 0;
// Debug("Take Profit Hit " + Time.ToShortDateString());
}
}
public override void OnEndOfDay()
{
if (!_willr.IsReady) return;
Plot("WilliamsPercentR", _willr);
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
// Ignore OrderEvents that are not closed
if (!orderEvent.Status.IsClosed())
{
return;
}
// Defensive check
if (TakeProfit == null || StopLoss == null)
{
return;
}
var filledOrderId = orderEvent.OrderId;
// If the ProfitTarget order was filled, close the StopLoss order
if (TakeProfit.OrderId == filledOrderId)
{
StopLoss.Cancel();
}
// If the StopLoss order was filled, close the ProfitTarget
if (StopLoss.OrderId == filledOrderId)
{
TakeProfit.Cancel();
}
}
}
}