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 |
namespace QuantConnect.Algorithm.CSharp { public class VentralVerticalContainmentField : QCAlgorithm { string[] tickers = {"TSLA", "AAPL", "FB", "XOM", "JNJ", "AMD"}; Dictionary<Symbol, RollingWindow<decimal>> closingData = new Dictionary<Symbol, RollingWindow<decimal>>(); public override void Initialize() { SetStartDate(2020, 3, 1); //Set Start Date SetCash(100000); //Set Strategy Cash foreach(var ticker in tickers){ var symbol = AddEquity(ticker, Resolution.Hour).Symbol; closingData.Add(symbol, new RollingWindow<decimal>(50)); } SetWarmUp(50); } public override void OnData(Slice data) { foreach(var symbol in data.Keys){ if(closingData.ContainsKey(symbol)){ closingData[symbol].Add(data[symbol].Close); } } if(IsWarmingUp){ return; } foreach(var symbol in closingData.Keys){ var window = closingData[symbol]; if(window.IsReady){ var supports = GetSupports(window); var resistances = GetResistances(window); Log($"Symbol: {symbol.Value} , Supports: {String.Join(", ", supports.ToArray())} , Resistances: {String.Join(", ", resistances.ToArray())}"); } } } public List<decimal> GetSupports(RollingWindow<decimal> series, double variation = 0.01, int h = 3){ List<decimal> minima = new List<decimal>(); List<decimal> supports = new List<decimal>(); for(int i = h; i < series.Size - h; i++){ if(series[i] < series[i - h] && series[i] < series[i + h]){ minima.Add(series[i]); } } foreach(var low1 in minima){ var r = low1 * (decimal)variation; List<decimal> commonLevel = new List<decimal>(); foreach(var low2 in minima){ if(low2 > low1 - r && low2 < low1 + r){ commonLevel.Add(low2); } } if(commonLevel.Count > 1){ var level = commonLevel.Min(price => price); if(!supports.Contains(level)){ supports.Add(level); } } } return supports; } public List<decimal> GetResistances(RollingWindow<decimal> series, double variation = 0.01, int h = 3){ List<decimal> maxima = new List<decimal>(); List<decimal> resistances = new List<decimal>(); for(int i = h; i < series.Size - h; i++){ if(series[i] > series[i - h] && series[i] > series[i + h]){ maxima.Add(series[i]); } } foreach(var high1 in maxima){ var r = high1 * (decimal)variation; List<decimal> commonLevel = new List<decimal>(); foreach(var high2 in maxima){ if(high2 > high1 - r && high2 < high1 + r){ commonLevel.Add(high2); } } if(commonLevel.Count > 1){ var level = commonLevel.Max(price => price); if(!resistances.Contains(level)){ resistances.Add(level); } } } return resistances; } } }