| Overall Statistics |
|
Total Trades 21 Average Win 21.54% Average Loss -1.79% Compounding Annual Return 246.381% Drawdown 24.700% Expectancy 8.109 Net Profit 247.562% Sharpe Ratio 2.488 Loss Rate 30% Win Rate 70% Profit-Loss Ratio 12.01 Alpha -0.03 Beta 69.214 Annual Standard Deviation 0.371 Annual Variance 0.138 Information Ratio 2.45 Tracking Error 0.371 Treynor Ratio 0.013 Total Fees $77.60 |
namespace QuantConnect
{
/*
This algo uses a Momersion indicator and buys when Momersion is below 45
and sells when momersion is above 55
*/
public class Momersion : QCAlgorithm
{
// USER VARIABLES
private string ticker = "ETHUSD"; // virtual pair - tracks the current USD value of 1 ether
private int startingCash = 2000;
private int maxPosition = 1000;
private int minPosition = 500;
public int top = 70;
public int bottom = 30;
private int minPeriod = 12;
private int fullPeriod = 26;
// PROGRAM VARIABLES
public decimal price;
public decimal holding; // the number of ether that we hold in the portfolio
public string baseSymbol; // "ETH"
public decimal usd;
MomersionIndicator momersion;
// INITIALIZE BLOCK
public override void Initialize()
{
SetStartDate(2017, 1, 1); // Set Start Date
SetEndDate(2018, 1, 1); // Set End Date
SetCash(startingCash); // Set Strategy Cash
var crypto = AddCrypto(ticker, Resolution.Hour);
baseSymbol = crypto.BaseCurrencySymbol;
SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash);
momersion = MOMERSION(ticker, minPeriod, fullPeriod, Resolution.Hour);
Chart tradePlotter = new Chart("Trades");
tradePlotter.AddSeries(new Series("BUY", SeriesType.Scatter, index:0));
tradePlotter.AddSeries(new Series("SELL", SeriesType.Scatter, index:0));
AddChart(tradePlotter);
}
// ONDATA BLOCK
public override void OnData(Slice data)
{
price = data[ticker].Price;
usd = Portfolio.CashBook["USD"].Amount;
if (!Portfolio.Invested && usd > minPosition)
{
if(momersion < bottom)
{
decimal quantity = Math.Round(Math.Min(usd, maxPosition) / price, 2);
MarketOrder(ticker, quantity);
Plot("Trades", "BUY", price);
}
}
if(Portfolio.Invested)
{
holding = Portfolio.CashBook[baseSymbol].Amount;
if(momersion > top)
{
Sell(ticker, holding);
Plot("Trades", "SELL", price);
}
}
}
}
}