Индикаторы: BarPoints

 

BarPoints:

BarPoints

Author: excelf

 
Это Вы так стопы выставляете?
 

Попытка создать Supertrend заново не удалась.

 
dektec:

Попытка создать Supertrend заново не удалась.


Supertrend тут не причем, совсем другие алгоритмы
 
leman:
Это Вы так стопы выставляете?
Для стопов думаю не плохо подойдет.
 
excelf:
leman:
Это Вы так стопы выставляете?
Для стопов думаю не плохо подойдет


Тогда показания индикатора надо отдельно . ну типа 1,3253
 
Перерисовывает?
 
У вас будет различаться реальная работа и прогон на истории при пересчете из-за этого фрагмента:
        if(Close[i] > High[i + 1] + N) {
            Trand[i] = 1;
        }
        
        if(Close[i] < Low[i + 1] - N) {
            Trand[i] = -1;
        
Дело в том, что Close[0] в реал-тайм может пробить уровень предыдущего High (Low) с отступом, а потом уйти и завершить бар ниже (выше) его. Но переключение тренда произойдет. А на истории Close так и будет Close ниже (выше) High (Low) и никакого преключения тренда в 1 (-1) при пересчете (подключении индикатора, докачке истории) НЕ произодет.
Для того, чтобы избежать этой проблемы достаточно
или вместо Close использовать High (Low),
или сдвинуть все на бар в историю, т.е.:
        if(Close[i+1] > High[i + 2] + N) {
            Trand[i] = 1;
        }
        
        if(Close[i+1] < Low[i + 2] - N) {
            Trand[i] = -1;
        
Можно оставить два варианта - на выбор.
Да, а N удобнее, наверное, задавать в пунктах. И переводить в цены в init(). Но это - дело вкуса.

Удачи.
 
А этот код не даст использовать индикатор в качестве стопа, так как он его будет передвигать на нулевом баре в противоположную тренду сторону
        if(Trand[i] == 1) {
            DownPoints[i] = Low[i] - shift;
            UpPoints[i] = EMPTY_VALUE;
        } else if(Trand[i] == -1) {
            UpPoints[i] = High[i] + shift;
            DownPoints[i] = EMPTY_VALUE;
        } else {
            UpPoints[i] = EMPTY_VALUE;
            DownPoints[i] = EMPTY_VALUE;
        }
 
leman:
А этот код не даст использовать индикатор в качестве стопа, так как он его будет передвигать на нулевом баре в противоположную тренду сторону
        if(Trand[i] == 1) {
            DownPoints[i] = Low[i] - shift;
            UpPoints[i] = EMPTY_VALUE;
        } else if(Trand[i] == -1) {
            UpPoints[i] = High[i] + shift;
            DownPoints[i] = EMPTY_VALUE;
        } else {
            UpPoints[i] = EMPTY_VALUE;
            DownPoints[i] = EMPTY_VALUE;
        }


А это такой стоп хитрый, который коррекции пропускает и потому о5 идет за трендом
 
excelf:

А это такой стоп хитрый, который коррекции пропускает и потому о5 идет за трендом

А не разумней закрыться, а потом по новой войти?
Причина обращения: