Thank you for the responses!! I have been struggling for days on this. I was hoping to use it to learn. Since I can't get it even ready to backtest could someone copy and past the code I have attached here into their editor and give me some pointers. The logic was suppose to be: If uninvested, buy if above SMA, sell if below SMA. Set a profit target, if it hits re-enter trade according to SMA position. When trade initiated it starts a timer, which is main variable, number of days, in this case 10. If profit target hasn't been reached in 10 days, trade is closed, all profit orders cancelled. Then it re-opens base on SMA again and gets a new 10 days. etc.
namespace QuantConnect
{
public class TimeBasedAlgo : QCAlgorithm
{
public override void Initialize()
{
SetStartDate(2017, 1, 1);
SetEndDate(2018, 1, 1);
SetCash(5000);
SetBenchmark("SPY");
SetBrokerageModel(BrokerageName.OandaBrokerage);
AddSecurity(SecurityType.Forex, "EURUSD", Resolution.Tick);
SetWarmUp(TimeSpan.FromDays(7));
var smaDaily = SMA("EURUSD", 24, Resolution.Hour);
var dayCount = TimeSpan.FromDays(10);
var tradeTime = 0;
var totalTime = 0;
var currentPrice = 0;
var longTrade = MarketOrder("EURUSD", 10000);
var shortTrade = MarketOrder("EURUSD", -10000);
var longProfitTarget = LimitOrder("EURUSD",20, 20);
var ProfitTarget = LimitOrder("EURUSD",-20, 20);
}
public override void OnData(Slice data)
{
if(!Portfolio["EURUSD"].Invested & currentPrice > smaDaily & totalTime == 0)
{
longTrade;
longProfitTarget;
totalTime = tradeTime + dayCount;
Log("Purchased EURUSD on " + Time.ToShortDateString());
}
if (!Portfolio["EURUSD"].Invested && currentPrice < smaDaily && totalTime == 0)
{
shorTrade;
shortProfitTarget; //
totalTime = tradeTime + dayCount;
Log("Sold EURUSD on " + Time.ToShortDateString());
}
if (Portfolio["EURUSD"].IsLong && totalTime > 10 )
{
shortTrade;
List<OrderTicket> cancelledOrders = Transactions.CancelOpenOrders("EURUSD"); // I think
totalTime = 0;
Log("Closed Long Trade " + Time.ToShortDateString() + "and cancelled all orders");
}
if (Portfolio["EURUSD"].IsShort && totalTime > 10 )
{
longTrade;
List<OrderTicket> cancelledOrders = Transactions.CancelOpenOrders("EURUSD");
totalTime = 0;
Log("Closed Short Trade " + Time.ToShortDateString()) + "and cancelled all orders";
}
}
}
}