Код: Выделить всё
function Initialize()
{
IndicatorName = "PlotLine";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddSeries("PlotLine", DrawAs.Line, Color.Red);
AddParameter("Price", 20);
AddLevel(0, Color.Red, "PlotLine");
}
function Evaluate()
{
Levels[0].Level = Price;
}
если здесь посмотреть в инициализацию, то видно что добавлена серия PlotLine
Код: Выделить всё
AddSeries("PlotLine", DrawAs.Line, Color.Red);
но в функции Evaluate() изменяется только добавленные уровни (1 уровень) и всё.
Т.е. сама серия индикатора ничем не заполняется.
Глубокого смысла не вижу в заполнении серии тем же параметром, что передаете в индикатор. Индикатор должен на основании переданных ему параметров произвести какие-то расчеты и записать их в серию.
Вот именно серию мы и будем читать в стратегии.
Для примера изменим код индикатора:
Код: Выделить всё
function Initialize()
{
IndicatorName = "PlotLine";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddSeries("PlotLine", DrawAs.Line, Color.Red);
AddParameter("Price", 20);
AddLevel(0, Color.Red, "PlotLine");
}
function Evaluate()
{
Levels[0].Level = Price;
PlotLine = (Input.Close + Input.Open) * 0.5;
}
Здесь мы хотя бы какое-то полезное действие выполняем
PlotLine = (Input.Close + Input.Open) * 0.5;
Тут мы вычислили среднюю цену по бару из суммы цен открытия и закрытия и поместили это добро в последнее значение серии PlotLine
теперь мы можем вызывая индикатор из стратегии получать эту среднюю цену из серии PlotLine
Код: Выделить всё
MY.PlotLine(Input1, 0).GetValue("PlotLine", 0);
ну или как я привык и что тоже самое (аналог)