| Overall Statistics |
|
Total Trades 435 Average Win 3.58% Average Loss -1.61% Compounding Annual Return 660.750% Drawdown 21.200% Expectancy 0.530 Net Profit 424.058% Sharpe Ratio 2.881 Loss Rate 53% Win Rate 47% Profit-Loss Ratio 2.22 Alpha 1.502 Beta 0.311 Annual Standard Deviation 0.533 Annual Variance 0.284 Information Ratio 2.663 Tracking Error 0.535 Treynor Ratio 4.942 Total Fees $0.00 |
using System;
using System.Linq;
using QuantConnect.Data.Market;
using QuantConnect.Indicators;
namespace QuantConnect.Algorithm.CSharp
{
public class BasicTemplateAlgorithm : QCAlgorithm
{
private SimpleMovingAverage _fast;
private SimpleMovingAverage _slow;
private string _sym = QuantConnect.Symbol.Create("BTCUSD", SecurityType.Crypto, Market.GDAX);
public override void Initialize()
{
SetStartDate(2017, 1, 1); //Set Start Date
SetEndDate(DateTime.Now);
AddCrypto("BTCUSD", Resolution.Minute, Market.GDAX);
SetCash(40000);
var consolidator = new TradeBarConsolidator(3);
consolidator.DataConsolidated += HourHandler;
SubscriptionManager.AddConsolidator("BTCUSD", consolidator);
_fast = SMA("BTCUSD", 5, Resolution.Hour);
_slow = SMA("BTCUSD", 18, Resolution.Hour);
}
private void HourHandler(object sender, BaseData consolidated)
{
Debug(Time.ToString() + " > New Bar!");
Plot(_sym, "Price", consolidated.Price);
// define a small tolerance on our checks to avoid bouncing
const decimal tolerance = 0.00015m;
var holdings = Portfolio[_sym].Quantity;
Log("HOLDINGS " + holdings);
// we only want to go long if we're currently short or flat
if (holdings <= 0)
{
Log("FASTSMA " + _fast);
Log("SLOWSMA " + _slow);
// if the fast is greater than the slow, we'll go long
if (_fast > _slow * (1 + tolerance))
{
Log("BUY >> " + Securities[_sym].Price);
SetHoldings(_sym, 1.0);
}
}
// we only want to liquidate if we're currently long
// if the fast is less than the slow we'll liquidate our long
if (holdings > 0 && _fast < _slow)
{
Log("SELL >> " + Securities[_sym].Price);
Liquidate(_sym);
}
Plot(_sym, _fast, _slow);
}
public override void OnData(Slice data)
{
}
}
}