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 Probabilistic 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 QuantConnect; namespace QuantConnect.Algorithm.CSharp { public class IndicatorTest : QCAlgorithm { private static readonly string VERSION = "1.0"; private readonly string _ticker = "ETHUSD"; private readonly int _startingCash = 2000; private readonly int _period = 40; private readonly Resolution _resolution = Resolution.Hour; private string _baseSymbol; private SimpleMovingAverage _sma; private bool _isWarmUpFinished = false; private bool _updatedPeriod = false; private TradeBarConsolidator _consolidator; private RollingWindow<TradeBar> _priceRollingWindow; public override void Initialize() { SetStartDate(2018, 1, 1); //Set Start Date SetEndDate(2018, 1, 2); //Set End Date SetCash(_startingCash); //Set Strategy Cash QuantConnect.Securities.Crypto.Crypto crypto = AddCrypto(_ticker, _resolution); _baseSymbol = crypto.BaseCurrencySymbol; SetBrokerageModel(BrokerageName.Bitfinex, AccountType.Cash); _consolidator = new TradeBarConsolidator(TimeSpan.FromHours(2)); SubscriptionManager.AddConsolidator(_ticker, _consolidator); _consolidator.DataConsolidated += OnCustomHandler; _priceRollingWindow = new RollingWindow<TradeBar>(_period); // how to change the period of this indicator on runtime and feed it with historical data? _sma = new SimpleMovingAverage(_period); SetWarmUp(_period); } public override void OnWarmupFinished(){ _isWarmUpFinished = true; } public void OnCustomHandler(object sender, TradeBar data) { _priceRollingWindow.Add(data); _sma.Update(data.EndTime, data.Close); if (!_sma.IsReady || !_isWarmUpFinished || !_priceRollingWindow.IsReady) { return; } if (!_updatedPeriod) { _updatedPeriod = false; _sma = UpdateSmaPeriod(_period - 1); } } public override void OnData(Slice data) { // nothing to do } private SimpleMovingAverage UpdateSmaPeriod(int period) { SimpleMovingAverage sma = new SimpleMovingAverage(period); for (int i = _period - 1; i >= 0; i --) { sma.Update(_priceRollingWindow[i].EndTime, _priceRollingWindow[i].Close); } return sma; } } }