Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
263.209%
Drawdown
2.200%
Expectancy
0
Net Profit
1.663%
Sharpe Ratio
4.41
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0.007
Beta
76.134
Annual Standard Deviation
0.192
Annual Variance
0.037
Information Ratio
4.354
Tracking Error
0.192
Treynor Ratio
0.011
Total Fees
$3.29
using QuantConnect.Data;
 using RDotNet;
 using System.Linq;

 namespace QuantConnect.Algorithm.CSharp
 {
    /// <summary>
    /// Demonstration of the R-integration for calling external statistics operations in QuantConnect.
    /// </summary>
    /// <meta name="tag" content="using r" />
    /// <meta name="tag" content="statistics libraries" />
    public class CallingRFromCSharp : QCAlgorithm
     {
         private Symbol _spy = QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA);

         /// <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(2013, 10, 07);  //Set Start Date
             SetEndDate(2013, 10, 11);    //Set End Date
             SetCash(100000);             //Set Strategy Cash
             // Find more symbols here: http://quantconnect.com/data
             AddEquity("SPY", Resolution.Second);

             var engine = REngine.GetInstance();
             engine.Evaluate("print('This is from R command.')");
             // .NET Framework array to R vector.
             var group1 = engine.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97, 30.01, 29.99 });
             engine.SetSymbol("group1", group1);
             // Direct parsing from R script.
             var group2 = engine.Evaluate("group2 <- c(29.89, 29.93, 29.72, 29.98, 30.02, 29.98)").AsNumeric();
             // Test difference of mean and get the P-value.
             var testResult = engine.Evaluate("t.test(group1, group2)").AsList();
             var p = testResult["p.value"].AsNumeric().First();
             // you should always dispose of the REngine properly.
             // After disposing of the engine, you cannot reinitialize nor reuse it
             engine.Dispose();

         }

         /// <summary>
         /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
         /// </summary>
         /// <param name="data">Slice object keyed by symbol containing the stock data</param>
         public override void OnData(Slice data)
         {
             if (!Portfolio.Invested)
             {
                 SetHoldings(_spy, 1);
             }
         }
     }
 }