Если вообще на форуме не не уместна тема - сообщите и удалите ее.
На официальном форуме начинал тему - ОХ помог сделав такой индикатор:
Индикатор
Up и Dn - ближайшие главные уровни вокруг цены (серые)
St - стоп уровень для закрытия позиции (синий)
Для закрытия позиции как прибыльной, так и убыточной, цена должна пройти вниз последовательно главный уровень и стоп
Код: Выделить всё
function Initialize()
{
IndicatorName = "LevelBase";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("Up", DrawAs.Line, Color.Gray);
AddSeries("Dn", DrawAs.Line, Color.Gray);
AddSeries("St", DrawAs.Line, Color.Blue);
AddParameter("D", 1.5, 0);
AddParameter("BaseLev", 90, 0);
}
function Evaluate()
{
// Область расчета значения индикатора
double Delta = Input[0] - BaseLev;
double N = Math.Floor(Delta / D);
Up = BaseLev + D*(N+1);
Dn = BaseLev + D*(N);
St = Up - 0.25*D;
}
В принципе то что хотел - но не удобно идет отображение - что линия двигается зигзагом где-то + не получается у меня описать корректный вход - выход.
Идея изначально такая - см.картинку.
Решил каждую линию назвать именем (в данном случае иногда придется менять базовую линию)
Код: Выделить всё
function Initialize()
{
IndicatorName = "Level_ABC";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("A", DrawAs.Line, Color.Gray);
AddSeries("B", DrawAs.Line, Color.Gray);
AddSeries("C", DrawAs.Line, Color.Gray);
AddSeries("D", DrawAs.Line, Color.Gray);
AddSeries("E", DrawAs.Line, Color.Gray);
AddSeries("St_bay_A", DrawAs.Line, Color.Blue);
AddSeries("St_sell_A", DrawAs.Line, Color.Blue);
AddSeries("St_bay_B", DrawAs.Line, Color.Blue);
AddSeries("St_sell_B", DrawAs.Line, Color.Blue);
AddSeries("St_bay_C", DrawAs.Line, Color.Blue);
AddSeries("St_sell_C", DrawAs.Line, Color.Blue);
AddSeries("St_bay_D", DrawAs.Line, Color.Blue);
AddSeries("St_sell_D", DrawAs.Line, Color.Blue);
AddSeries("St_bay_E", DrawAs.Line, Color.Blue);
AddSeries("St_sell_E", DrawAs.Line, Color.Blue);
AddParameter("Dell", 1.5, 0);
AddParameter("BaseLev", 80, 0);
}
function Evaluate()
{
// Область расчета значения индикатора
A = BaseLev + Dell;
St_bay_A = A - 0.25*Dell;
St_sell_A = A + 0.25*Dell;
B = A + Dell;
St_bay_B = B - 0.25*Dell;
St_sell_B = B + 0.25*Dell;
C = B + Dell;
St_bay_C = C - 0.25*Dell;
St_sell_C = C + 0.25*Dell;
D = C + Dell;
St_bay_D = D - 0.25*Dell;
St_sell_D = D + 0.25*Dell;
E = D + Dell;
St_bay_E = E - 0.25*Dell;
St_sell_E = E + 0.25*Dell;
}
Такое отображение и нужно - но столкнулся с другой проблемой - все линии постоянно отображаются на экране - т.е. убрать линии которые не участвуют с помощью масштабирования - не получается.
Наверняка такие исходные данные можно сделать более проще - посоветуйте как.
Когда у каждой линии есть имя - то проще прописать условие (только их будет много) - т.е. если цена больше линии А но меньше линии В (предыдущее значение цены менее линии А) - то осуществляем вход и так для каждой линии. Как выход прописать - не могу логарифмировать данный момент - нужно ведь сначала пробить следующую линию - а потом вернуться и выйти при проходе линии - 25%
Поможете?
Заранее спасибо!