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 _spy = QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA);
public RollingWindow<TradeBar> Close5m;
public RollingWindow<TradeBar> Close1d;
public decimal chiusura5;
public decimal chiusura1;
public decimal chiusura2;
public decimal chiusura3;
public decimal chiusura4;
public decimal aperturaoggi;
public decimal massimogiornata;
public decimal minimogiornata;
public bool condition1;
public bool condition90;
public SimpleMovingAverage value1;
public decimal percent;
public decimal stopValue;
private OrderTicket CurrentOrder;
private OrderTicket StopLoss;
//private OrderTicket ProfitTarget;
/// <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()
{
SetStartDate(2014, 7, 1); //Set Start Date
SetEndDate(2018, 2, 23); //Set End Date
SetCash(100000); //Set Strategy Cash
SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash);
// Find more symbols here: http://quantconnect.com/data
AddCrypto("BTCUSD", Resolution.Minute);
var fiveMinutes = new TradeBarConsolidator(TimeSpan.FromMinutes(5));
fiveMinutes.DataConsolidated += OnFiveMinutes;
SubscriptionManager.AddConsolidator("BTCUSD", fiveMinutes);
var dailyMinutes = new TradeBarConsolidator(TimeSpan.FromMinutes(1440));
dailyMinutes.DataConsolidated += OnDaily;
SubscriptionManager.AddConsolidator("BTCUSD", dailyMinutes);
Close5m = new RollingWindow<TradeBar>(10);
Close1d = new RollingWindow<TradeBar>(10);
value1 = SMA("BTCUSD", 3, Resolution.Daily);
}
/// <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)
{
}
public void OnFiveMinutes(object sender, TradeBar bar)
{
//Close5m.Add(bar);
//if (!Close5m.IsReady) return;
//Debug("Close5min0: " + Close5m[0].Close);
//Debug("Close5min1: " + Close5m[1].Close);
//TimeSpan Sessstart = new TimeSpan(8, 0, 0);
//TimeSpan Sessend = new TimeSpan(14, 0, 0);
//TimeSpan Sessstop = new TimeSpan(13, 0, 0);
//TimeSpan now = DateTime.Now.TimeOfDay;
//Debug("Now: " + now.ToString());
condition1 = chiusura1 > chiusura2 && chiusura2 < chiusura3;
condition90 = aperturaoggi > value1;
//Debug(value1.ToString());
//Debug("condition1: "+ condition1);
//Debug("condition90: "+ condition90);
if (!Portfolio.HoldStock && condition90 == true && condition1 == true && aperturaoggi > chiusura1)
{
var quantity = 0.01;
if (Time.Hour > 8 && Time.Hour <= 13)
{
// Buy
CurrentOrder = StopMarketOrder("BTCUSD", quantity, massimogiornata, tag:"longEntry");
// Set StopLoss order
//StopLoss = StopMarketOrder("BTCUSD", -quantity, massimogiornata);
// Set Profit Target
//ProfitTarget = LimitOrder("BTCUSD"), -quantity, price * (1m + TakeProfitPercent));
//SetHoldings("BTCUSD", 0.001);
}
else if (Portfolio.HoldStock)
{
var currentStopPrice = CurrentOrder.Get(OrderField.StopPrice);
StopLoss = StopMarketOrder("BTCUSD", -quantity,(currentStopPrice - stopValue), tag:"StopLoss");
}
else if ((Portfolio.Invested) && (Time.Hour >= 14))
{
StopLoss = Order("BTCUSD", -quantity);
}
//var btcHoldings = Portfolio.CashBook["BTC"].Amount;
//var usdCash = Portfolio.CashBook["USD"].Amount;
//Log($"{Time} - BTC holdings: {btcHoldings:F8} - USD cash: {usdCash:F2}");
}
}
private void OnDaily(object sender, TradeBar consolidated)
{
Close1d.Add(consolidated);
if (!Close1d.IsReady) return;
//Debug("CloseDaily0: " + Close1d[0].Close);
//Debug("CloseDaily1: " + Close1d[1].Close);
chiusura5 = Close1d[5].Close;
chiusura1 = Close1d[1].Close;
chiusura2 = Close1d[2].Close;
chiusura3 = Close1d[3].Close;
chiusura4 = Close1d[4].Close;
aperturaoggi = Close1d[0].Open;
massimogiornata = Close1d[0].High;
minimogiornata = Close1d[0].Low;
percent = chiusura1 / 100;
stopValue = 4*percent;
//Debug("percent: " + percent);
//Debug("stopValue: " + stopValue);
condition1 = chiusura1 > chiusura2 && chiusura2 < chiusura3;
condition90 = aperturaoggi > value1;
//Debug("chiusura1: " + chiusura1);
//Debug("chiusura2: " + chiusura2);
//Debug("chiusura3: " + chiusura3);
//Debug("aperturaoggi: " + aperturaoggi);
//Debug("massimogiornata: " + massimogiornata);
//Debug("minimogiornata: " + minimogiornata);
//Debug("condition1: "+ condition1);
//Debug("condition90: "+ condition90);
}
}
}