Overall Statistics
Total Trades
649
Average Win
0.15%
Average Loss
-0.02%
Compounding Annual Return
55.215%
Drawdown
1.600%
Expectancy
3.346
Net Profit
11.988%
Sharpe Ratio
6.933
Loss Rate
50%
Win Rate
50%
Profit-Loss Ratio
7.75
Alpha
0.291
Beta
0.14
Annual Standard Deviation
0.043
Annual Variance
0.002
Information Ratio
3.369
Tracking Error
0.068
Treynor Ratio
2.15
Total Fees
$1.37
namespace QuantConnect.Algorithm.CSharp
{
    public class TestRenkoConsolidator : QCAlgorithm
    {
    	private double renkoSize = 0.75;
    	private string symString = "LTCUSD";
    	private double startingCash = 100;
    	private BarDirection currentBarDirection = BarDirection.NoDelta;
    	
    	private RenkoBar currentBar;
    	
        public override void Initialize()
        {
            SetStartDate(2017, 06, 01);  
            SetEndDate(2017, 09, 02);    
            
            SetCash(startingCash);

            AddCrypto(symString, Resolution.Second, Market.GDAX);
            SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash);
            
            var renko = new RenkoConsolidator((decimal)renkoSize, RenkoType.Wicked);
            renko.DataConsolidated += OnRenkoBar;
            SubscriptionManager.AddConsolidator(symString, renko);
        }
        
        public override void OnData(Slice data) 
        {
        }
        
        public void OnRenkoBar(object sender, RenkoBar bar)
        {
        	currentBar = bar;
        	currentBarDirection = currentBar.Direction;
        	CheckForExitCondition();
        	CheckForEntryCondition();
        }
        
        private void CheckForExitCondition()
        {
        	if(currentBarDirection == BarDirection.Falling)
        	{
        		Liquidate(symString);
        	}
        }
        
        private void CheckForEntryCondition()
        {
        	Transactions.CancelOpenOrders(symString);
        	if(currentBarDirection == BarDirection.Rising)
        	{
        		decimal units = UnitsToBuy();
        		decimal limitPrice = currentBar.Close;
        		
        		LimitOrder(symString, units, limitPrice);
        	}
        }
        
        private decimal UnitsToBuy()
        {
        	decimal dollarsAtRisk = Portfolio.Cash * 0.01m;		
        	decimal riskPerUnit = currentBar.Close - (decimal)(2 * renkoSize);
        	decimal unitsToBuy = dollarsAtRisk / riskPerUnit;
        	
        	return unitsToBuy;
        }	
    }
}