| Overall Statistics |
|
Total Trades 129 Average Win 2.10% Average Loss 0% Compounding Annual Return 257.778% Drawdown 37.900% Expectancy 0 Net Profit 265.620% Sharpe Ratio 1.58 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 1.023 Beta 0.896 Annual Standard Deviation 0.712 Annual Variance 0.507 Information Ratio 1.423 Tracking Error 0.71 Treynor Ratio 1.255 Total Fees $0.00 |
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);
AddForex("EURUSD", Resolution.Hour, Market.Oanda);
SetWarmUp(TimeSpan.FromDays(7));
var sma = SMA("EURUSD", 24, Resolution.Hour);
}
public override void OnData(Slice data)
{
if (IsWarmingUp) return;
var sma = SMA("EURUSD", 24, Resolution.Hour);
var holdings = Portfolio["EURUSD"].Quantity;
var currentPrice = data["EURUSD"].Bid.Close;
var close = Securities["EURUSD"].Close;
var limitPriceUp = close * 1.002m;
var limitPriceDown = close * 1.0016m;
DateTime endTime = DateTime.Today.AddDays(10);
bool tradeInPlace;
if(Portfolio["EURUSD"].Invested)
{
tradeInPlace = true;
}
else
{
tradeInPlace = false;
}
if(holdings <= 0 & currentPrice > sma & tradeInPlace == false)
{
MarketOrder("EURUSD", 100000);
LimitOrder("EURUSD", -100000, limitPriceUp);
// SetHoldings("EURUSD", 1);
Log("Purchased EURUSD on " + Time.ToShortDateString());
if(tradeInPlace == true && Portfolio["EURUSD"].IsLong)
{
Schedule.On(DateRules.On(endTime), TimeRules.At(1, 0), () =>
{
Liquidate("EURUSD");
//SetHoldings("EURUSD", 0);
List<OrderTicket> cancelledOrders = Transactions.CancelOpenOrders("EURUSD");
Log("Cancelled All Orders & Closed Long Trade " + Time.ToShortDateString());
});
}
}
if(holdings <= 0 & currentPrice < sma & tradeInPlace == false)
{
MarketOrder("EURUSD", -100000);
LimitOrder("EURUSD", 100000, limitPriceDown);
//SetHoldings("EURUSD", 1);
Log("Sold EURUSD on " + Time.ToShortDateString());
if(tradeInPlace == true && Portfolio["EURUSD"].IsShort)
{
Schedule.On(DateRules.On(endTime), TimeRules.At(1, 0), () =>
{
Liquidate("EURUSD");
// SetHoldings("EURUSD", 0);
List<OrderTicket> cancelledOrders = Transactions.CancelOpenOrders("EURUSD");
Log("Cancelled All Orders & Closed Short Trade " + Time.ToShortDateString());
});
}
}
}
}
}