| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
using System;
using System.Collections.Generic;
using QuantConnect.Data;
using QuantConnect.Data.Market;
using System.Linq;
using QuantConnect.Interfaces;
using QuantConnect.Indicators;
using QuantConnect.Securities;
using QuantConnect.Orders;
using QuantConnect.Data.Consolidators;
namespace QuantConnect.Algorithm.CSharp
{
public class TestAlgo : QCAlgorithm, IRegressionAlgorithmDefinition
{
public RollingWindow<decimal> BidPrice = new RollingWindow<decimal>(4);
public RollingWindow<decimal> AskPrice = new RollingWindow<decimal>(4);
public RollingWindow<decimal> Volume = new RollingWindow<decimal>(4);
public override void Initialize()
{
SetStartDate(2010, 01, 08);
SetEndDate(DateTime.Now);
SetCash(1000000);
var futureSP500 = AddFuture(Futures.Indices.SP500EMini, Resolution.Hour);
futureSP500.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
var benchmark = AddEquity("SPY");
SetBenchmark(benchmark.Symbol);
}
public override void OnData(Slice slice)
{
if (!Portfolio.Invested)
{
foreach(var chain in slice.FutureChains)
{
// find the front contract expiring no earlier than in 90 days
var contract = (
from futuresContract in chain.Value.OrderBy(x => x.Expiry)
where futuresContract.Expiry > Time.Date.AddDays(90)
select futuresContract).FirstOrDefault();
// if found, perform logic
if (contract != null)
{
BidPrice.Add(contract.BidPrice);
AskPrice.Add(contract.AskPrice);
Volume.Add(contract.Volume);
var CurrentBidPrice = BidPrice[0];
Console.WriteLine(CurrentBidPrice);
var OneBidPriceAgo = BidPrice[1];
Console.WriteLine(OneBidPriceAgo);
var TwoBidPriceAgo = BidPrice[2];
Console.WriteLine(TwoBidPriceAgo);
var ThreeBidPriceAgo = BidPrice[3];
Console.WriteLine(ThreeBidPriceAgo);
var CurrentAskPrice = AskPrice[0];
Console.WriteLine(CurrentAskPrice);
var OneAskPriceAgo = AskPrice[1];
Console.WriteLine(OneAskPriceAgo);
var TwoAskPriceAgo = AskPrice[2];
Console.WriteLine(TwoAskPriceAgo);
var ThreeAskPriceAgo = AskPrice[3];
Console.WriteLine(ThreeAskPriceAgo);
var CurrentVolume = Volume[0];
Console.WriteLine(CurrentVolume);
var OneVolumeAgo = Volume[1];
Console.WriteLine(OneVolumeAgo);
var TwoVolumeAgo = Volume[2];
Console.WriteLine(TwoVolumeAgo);
var ThreeVolumeAgo = Volume[3];
Console.WriteLine(ThreeVolumeAgo);
var Long = (CurrentBidPrice > OneAskPriceAgo);
if (!BidPrice.IsReady || !AskPrice.IsReady || !Volume.IsReady)
continue;
if (Long)
{
MarketOrder(contract.Symbol, 10);
}
}
}
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "0"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0"},
{"Beta", "0"},
{"Annual Standard Deviation", "0"},
{"Annual Variance", "0"},
{"Information Ratio", "0"},
{"Tracking Error", "0"},
{"Treynor Ratio", "0"},
{"Total Fees", "$0.00"}
};
}
}