Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1230

Добавлено: Avialr » 06 фев 2016, 16:13

Тема: Линии ABC

Текст сообщения:

Если не туда создал тему - перенаправьте куда нужно.
Если вообще на форуме не не уместна тема - сообщите и удалите ее.

На официальном форуме начинал тему - ОХ помог сделав такой индикатор:

Индикатор
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;

}


В принципе то что хотел - но не удобно идет отображение - что линия двигается зигзагом где-то + не получается у меня описать корректный вход - выход.

Идея изначально такая - см.картинку.

Экскиз2.pdf
идея алгоритма
(51.17 КБ) 1861 скачивание


Решил каждую линию назвать именем (в данном случае иногда придется менять базовую линию)

Код: Выделить всё

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%

Поможете?

Заранее спасибо!
Вложения
LevelBase.png