| Overall Statistics |
|
Total Trades 76 Average Win 10.92% Average Loss -16.32% Compounding Annual Return 466.319% Drawdown 30.200% Expectancy 0.450 Net Profit 1134.550% Sharpe Ratio 2.624 Loss Rate 13% Win Rate 87% Profit-Loss Ratio 0.67 Alpha 0.303 Beta 0.675 Annual Standard Deviation 0.505 Annual Variance 0.255 Information Ratio -0.537 Tracking Error 0.353 Treynor Ratio 1.962 Total Fees $7424.85 |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using QuantConnect.Data;
namespace QuantConnect.Algorithm.CSharp.GDAX
{
public class CryptoKiller5 : QCAlgorithm
{
private Indicators.ExponentialMovingAverage _fast;
private Indicators.ExponentialMovingAverage _slow;
private QuantConnect.Symbol _coin1;
//private QuantConnect.Symbol _coin2;
private int _shortEMA = 15;
private int _longEMA = 60;
private DateTime _previous;
private decimal _boughtAt;
/// <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(2016, 6, 21);
SetEndDate(2017, 12, 1);
SetCash(10000);
SetBrokerageModel(Brokerages.BrokerageName.GDAX);
_coin1 = AddCrypto("BTCUSD", Resolution.Minute).Symbol;
//_coin2 = AddCrypto("ETHUSD", Resolution.Hour).Symbol;
_fast = EMA(_coin1, _shortEMA, Resolution.Minute);
_slow = EMA(_coin1, _longEMA, Resolution.Minute);
SetBenchmark(_coin1);
}
public override void OnData(Slice slice)
{
if (!_slow.IsReady)
return;
var holdings = Portfolio[_coin1].Quantity;
if (_previous.Date == Time.Date) return;
const decimal tolerance = 0.00015m;
if (holdings <= 0)
{
if (_fast > _slow*(1 + tolerance))
{
//Log("BUY >> {0}".format(self.Securities[_coin].Price));
SetHoldings(_coin1, 1.0);
_boughtAt = Securities[_coin1].Price;
}
}
else
{
// .92, 1.15
decimal profit = 1.09m;
decimal loss = .85m;
var pct = Portfolio[_coin1].Price/_boughtAt;
if (holdings > 0 && (pct > profit || pct < loss))
{
Log(string.Format("CLEARING {0}-{1} {2}", _boughtAt, Portfolio[_coin1].Price, pct));
Liquidate(_coin1);
}
}
_previous = Time;
}
}
}