28 private bool _isReady;
45 : base(GetIndicatorName(args[0]))
54 : base(GetIndicatorName(indicator))
66 foreach (var attributeName
in new[] {
"IsReady",
"Update",
"Value" })
68 if (!_indicatorWrapper.
HasAttr(attributeName))
70 var name = GetIndicatorName(indicator);
72 var message = $
"Indicator.{attributeName.ToSnakeCase()} must be implemented. " +
73 $
"Please implement this missing method in {name}";
75 if (attributeName ==
"IsReady")
77 message +=
" or use PythonIndicator as base:" +
78 $
"{Environment.NewLine}class {name}(PythonIndicator):";
81 throw new NotImplementedException(message);
105 _isReady = _indicatorWrapper.
InvokeMethod<
bool?>(nameof(Update), input)
107 return _indicatorWrapper.
GetProperty<decimal>(
"Value");
114 private int GetIndicatorWarmUpPeriod()
124 private static string GetIndicatorName(PyObject indicator)
129 if (indicator.HasAttr(
"Name"))
131 name = indicator.GetAttr(
"Name");
133 else if (indicator.HasAttr(
"name"))
135 name = indicator.GetAttr(
"name");
139 name = indicator.GetAttr(
"__class__").GetAttr(
"__name__");
141 return name.GetAndDispose<
string>();