| Overall Statistics |
|
Total Trades 10 Average Win 36.91% Average Loss -0.99% Compounding Annual Return 312.608% Drawdown 19.400% Expectancy 29.577 Net Profit 234.559% Sharpe Ratio 2.416 Loss Rate 20% Win Rate 80% Profit-Loss Ratio 37.22 Alpha 1.011 Beta 0.478 Annual Standard Deviation 0.442 Annual Variance 0.196 Information Ratio 2.144 Tracking Error 0.442 Treynor Ratio 2.233 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 RelativeStrengthIndex _rsi;
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);
_fast = SMA("BTCUSD", 5, Resolution.Daily);
_slow = SMA("BTCUSD", 18, Resolution.Daily);
_rsi = RSI("BTCUSD", 14, MovingAverageType.Simple, Resolution.Daily);
}
public override void OnData(Slice data)
{
Plot(_sym, "Price", Securities[_sym].Price);
Plot(_sym, _fast, _slow);
Plot(_sym, "RSI", _rsi);
if (! _rsi.IsReady)
return;
// 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);
Log("RSI " + _rsi);
// if the fast is greater than the slow, we'll go long
//if (_fast > _slow * (1 + tolerance))
if(_rsi < 30)
{
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 && _rsi > 80)
{
Log("SELL >> " + Securities[_sym].Price);
Liquidate(_sym);
}
}
}
}