Автор |
Сообщение |
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Всем привет. В альфе есть индикатор BBline.
Ищу возможность перенести его в ами. А Может он уже есть , просто по другому называется?
Вот его код для альфы:
Код: |
function Initialize()
{
IndicatorName = "BBLine";
AddInput("Input", Inputs.Price);
PriceStudy = true;
AddSeries("BBLine", DrawAs.Line, Color.Magenta);
AddParameter("Period", 30, 2);
AddParameter("D", 3.0);
AddGlobalVariable("Direction", Types.Double, 0.0);
}
function Evaluate()
{
// Alfadirect. OX. 2015
// BBLine - определяет направление по пробою границ Полос Болинджера
// Для шорта - ищем пробой ценой минимального значения BB
// Для лонга - ищем пробой ценой максимального значения BB
if ( CurrentIndex < Period )
{
BBLine = Input[0];
Direction = 1.0;
}
else
{
double sigma = D*LIB.STD(Input, Period)[0];
double Upper = Input[0] + sigma;
double Lower = Input[0] - sigma;
if(Direction > 0)
{
if (Lower > BBLine[-1] )
BBLine = Lower;
else
BBLine = BBLine[-1] ;
if( Input[0] < BBLine[0] )
{
Direction = -1;
BBLine = Upper;
}
}
else
{
if (Upper < BBLine[-1] )
BBLine = Upper;
else
BBLine = BBLine[-1] ;
if( Input[0] > BBLine[0] )
{
Direction = 1;
BBLine = Lower;
}
}
}
}
|
и ссылка где есть немного про него с картинками
https://alfadirect4.ru/viewtopic.php?f=4&p=4665#p4665
спасибо) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
SetBarsRequired(sbrAll, sbrAll);
Plot(C, "", colorBlack, styleCandle);
Period = Param("Period", 30, 2, 30, 1);
Upper = C + StDev(C, Period);
Lower = C - StDev(C, Period);
dir = 1;
bbline = 0;
for(i = Period+1; i<BarCount-1; i++)
{
if(dir>0.5)
{
if(bbline[i-1]<Lower[i])
bbline[i]=Lower[i];
else
bbline[i]=bbline[i-1];
if(C[i] < bbline[i])
{
dir = 0;
bbline[i] = Upper[i];
}
}
else
{
if(bbline[i-1]>Upper[i])
bbline[i]=Upper[i];
else
bbline[i]=bbline[i-1];
if(C[i] > bbline[i])
{
dir = 1;
bbline[i] = Lower[i];
}
}
}
Plot(Upper, "Upper", colorGreen);
Plot(Lower, "Lower", colorRed);
Plot(BBline, "BBline", colorBlue);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Олег, вот что получилось)
И еще в оригинале есть параметр D.
Я так понял тут он используется для расчета stdev?
тогда вроде надо типа такого (верхушка кода):
Код: |
SetBarsRequired(sbrAll, sbrAll);
Plot(C, "", colorBlack, styleCandle);
Period = Param("Period", 30, 2, 30, 1);
PerStDev = Param("Period", 3, 2, 5, 1);
Upper = C + StDev(C, PerStDev);
Lower = C - StDev(C, PerStDev);
dir = 1;
bbline = 0;
for(i = Period+1; i<BarCount-1; i++)
|
?? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ничего не понял...
Про D
Её надо вставить сюда
Код: |
Upper = C + StDev(C, Period);
Lower = C - StDev(C, Period); |
Код: |
Upper = C + D*StDev(C, Period);
Lower = C - D*StDev(C, Period); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Вот поправил, получаем:
Код: |
SetBarsRequired(sbrAll, sbrAll);
Plot(C, "", colorBlack, styleCandle);
Period = Param("Period", 30, 2, 30, 1);
d = Param("d", 3, 1, 5, 1);
Upper = C + d*StDev(C, Period);
Lower = C - d*StDev(C, Period);
dir = 1;
bbline = 0;
for(i = Period+1; i<BarCount-1; i++)
{
if(dir>0.5)
{
if(bbline[i-1]<Lower[i])
bbline[i]=Lower[i];
else
bbline[i]=bbline[i-1];
if(C[i] < bbline[i])
{
dir = 0;
bbline[i] = Upper[i];
}
}
else
{
if(bbline[i-1]>Upper[i])
bbline[i]=Upper[i];
else
bbline[i]=bbline[i-1];
if(C[i] > bbline[i])
{
dir = 1;
bbline[i] = Lower[i];
}
}
}
//Plot(Upper, "Upper", colorGreen);
//Plot(Lower, "Lower", colorRed);
Plot(BBline, "BBline", colorBlue); |
На последнем баре bbline равна 0 и из-за этого выглядит вот так: |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А сам поправить? Не?
Код: |
for(i = Period+1; i<=BarCount-1; i++) |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
000 писал(а): |
А сам поправить? Не?
Код: |
for(i = Period+1; i<=BarCount-1; i++) |
|
Да что-то подтупил)
Спасибо, Олег, все работает! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|