Разная формула расчета кривой. Как сделать?

Подробнее
4 года 4 мес. назад #3114 от Colonel
Добрый день.
Прошу помочь мне с одной вещью. Вроде бы несложная ситуация, но я оказался в стопоре.

Допустим у нас есть экстремум. Допустим он верхний. Я начинаю расчет определенной кривой от этого экстремума. Т.е. задаю через меню место старта кривой. Все бы было бы ничего, если бы кривая строилась тупо по формуле (к примеру) у = Ln - A*Ln-1. Но в таком случае мы внесем изначально ошибку в построение, поскольку на первом баре (том самом экстремуме) будут учитываться значения предыдущего бара, а нам этого надо избежать.

Что же требуется? Необходимо построить кривую следующим образом.
1. На первом баре кривая будет тупо равна, к примеру ХАЮ свечи (которую мы выбрали за стартовую). Ну или ЛОЮ - это уж как мы выберем из контекстного меню. Или вообще конкретному значению, которое мы также пропишем в меню параметров.
2. На втором баре расчет кривой несколько должен измениться. В начале мы рассчитываем, к примеру, разницу между лоем текущей свечи и тем самым хаем или другим параметром (который мы выбрали в меню) старта нашей кривой. А потом эту разницу вычитаем из нашего лоя текущей свечи.
3. Третий бар и все дольнейшие уже считаются по одной формуле - из лоя текущей свечи вычитаем разницу между лоем текущей свечи и лоем предыдущей свечи. Да не просто разницу, а накопленную сумму таких разниц (т.е. на каждом баре оно суммируется).

Ну как-то так.
Главное, что я не могу понять, как прописать - это как сделать расчет первых двух значений кривой по отличным формулам, нежели остальные. И желательно не задействовать циклы.

Заранее благодарю.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
4 года 4 мес. назад #3115 от admin
Первое что приходит в голову:

1. Создаём массив, в котором true стоит в свече, которую вы задаете и false в остальных. Что-то типа

Startcandle = timenum() == время вашей свечи;

Вид этого выражения зависит от того как вы задаете нужную вам свечу

1. Новый массив, в котором в каждой свече находится расстояние от этой свечи до той, что вы задали

Distance = barsSince(StartCandle)

3. Считаете вашу кривую

Curve = iif(Distance == 0, cчитаем свечу начала,
Iif(Distance== 1, следующая свеча,
Считаем остальные свечи));

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
4 года 4 мес. назад #3117 от Colonel
Я наверное лучше дам с картинками, чтобы было понятее.

Имею следующий код:
dd = ParamDate("Дата начала", "2012-01-10", 0); 
tt = ParamTime("Время начала", "12:00:00", 0); 

BarsStart = 1 + BarsSince(DateNum() == dd AND tt == TimeNum()); 
StartBar = ValueWhen(DateNum() == dd AND tt == TimeNum(), BarIndex()); 
//StartBar = DateNum() == dd AND tt == TimeNum();

//l0 = ValueWhen (StartBar, L, 1);
//Plot(l0, "", colorBlueGrey); 
xi3 = L;
wil = L-Ref(L,-1);
wilsum = Sum (wil, BarsStart-1);
wilkr = xi3+wilsum;
wilkrplot2 = IIf (BarIndex() >= StartBar, wilkr, Null);
//wilkrplot2 = ValueWhen (StartBar, wilkr, 1);

Plot (wilkrplot2,"wilkrplot2",colorRed, styleLine | styleNoRescale, Null, Null, 0, 0, 3);

Он рисует красную кривую. См. картинку.


Мне же требуется получить несколько иную картинку. Вся кривая будет считаться также, но за исключением первых двух свечей. Математика расчета первых двух свечей представлена на следующей картинке.


Вот мне хотелось бы понять, как это дело объединить.
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: admin