Автор |
Сообщение |
Nero Wolfe
Зарегистрирован: 17.03.2010
Сообщения: 174
|
Посмотрите, пожалуйста, правильно ли я перевел на АФЛ код индикатора NRTR_WATR от konkop'a http://konkop.narod.ru/codes.htm
Код: |
StopATRFactor = Param( "ATR multiple", 2, 0.1, 10, 0.1 );
Smooth = Param( "Smoothing", 30, 15, 100 );
//StopATRFactor = Optimize( "Chandelier ATR multiple", 2.4, 1, 3, 0.2 );
//Smooth = Optimize( "Smoothing", 20, 20, 50, 1 );
sup = H - StopATRFactor * WMA( ATR( 1 ), Smooth );
res = L + StopATRFactor * WMA( ATR( 1 ), Smooth );
// calculate trailing stop line
trailARRAY = Null;
trailstop = 0;
for ( i = 1; i < BarCount; i++ )
{
trailstop[ i ] = IIf( C[ i ] > trailstop[i-1], sup[ i ], res[ i ] );
trailARRAY[ i ] = trailstop[ i ];
}
// generate buy/sell signals based on crossover with trail stop line
Buy = Cross( C, trailArray );
Sell = Cross( trailArray, C );
Short = Cross( trailArray, C );
Cover = Cross( C, trailArray );
PlotShapes( Buy*shapeUpArrow, colorGreen, 0, trailarray );
PlotShapes( Cover*shapeUpArrow, colorGreen, 0, trailarray );
PlotShapes( Sell*shapeDownArrow, colorRed, 0, trailarray );
PlotShapes( Short*shapeDownArrow, colorRed, 0, trailarray );
//Plot( Close, "Price", colorBlack, styleBar );
Plot( trailARRAY, "trailing stop level", ParamColor("Color", colorBlue), styleNoTitle | ParamStyle("Style") ); |
вроде работает, но при некоторых значения параметров как то странно себя ведет |
_________________ Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По моему неправильно. Я давным давно делал. Вот
Код: |
SetBarsRequired(100000,0);
GraphXSpace = 3;
// Параметры
k = Param("Мультипликатор", 3, 1, 4, 0.1);
Per = Param("Период WATR", 14, 1, 30, 1);
/*
// Расчет WATR
WATR = WMA(H-L, Per);
Для форекса взыешивать по объему смысла нет поэтому заменил WATR на обычный ATR
В результате получился обычный "Chandler exit"
*/
WATR = ATR(Per);
revers = k * WATR;
Trend[0] = 1; // тренд вверх
NW[0] = C[0] - Revers[0]; // Первое значение NW
PE[0] = 0;
for(i = 1; i < BarCount; i++)
{
if(Trend[i-1] == 1) //Up Trend
{
if(C[i] > PE[i-1]) //Новый High
{
Trend[i] = 1;
PE[i] = C[i];
NW[i] = PE[i] - Revers[i];
}
else
{
if(C[i] < NW[i-1]) //Реверс
{
Trend[i] = -1;
PE[i] = C[i];
NW[i] = PE[i] + Revers[i];
}
else //Нет нового high и реверса
{
Trend[i] = 1;
PE[i] = PE[i-1];
NW[i] = PE[i] - Revers[i];
}
}
}
//======================================
else //Down Trend
{
if(C[i] < PE[i-1]) //Новый Low
{
Trend[i] = -1;
PE[i] = C[i];
NW[i] = PE[i] + Revers[i];
}
else
{
if(C[i] > NW[i-1]) //Реверс
{
Trend[i] = 1;
PE[i] = C[i];
NW[i] = PE[i] - Revers[i];
}
else //Нет нового Low и реверса
{
Trend[i] = -1;
PE[i] = PE[i-1];
NW[i] = PE[i] + Revers[i];
}
}
}
}
Plot(NW, "NRTR WATR", IIf(Trend == 1, 27, 4), 4);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Nero Wolfe
Зарегистрирован: 17.03.2010
Сообщения: 174
|
Да, наверное вы правы, я слишком упростил расчет
Ваш вариант работает понадежнее... |
_________________ Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает. |
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|