Страница 1 из 1

Как пару строк (из Метасток) перевести

Добавлено: 27 янв 2019, 22:10
JASON
Просьба помочь.
Как пару строк (из Метасток) перевести ?
Границы канала (Up и Dn) . Необходимо, чтобы осталась на графике видимая часть от Up и Dn в виде Trend (вид или параболика, или NATR).

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

UpDn:=If(Dn>Ref(Dn,-1),1,If(Up<Ref(Up,-1),-1,PREV));
Trend:=If((UpDn=1 and Ref(UpDn,-1)=-1) or UpDn=1 ,Up,Dn);
Trend


Пытался в лоб

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

if (( UpDn[0]=1 && UpDn[-1]=-1) || (UpDn[0]=1 || UpDn[0]=0))
{
Trend=Dn;
}
else
{
Trend=Up;
}

но , не спец и естественно ошибка.
Спасибо

Re: Как пару строк (из Метасток) перевести

Добавлено: 28 янв 2019, 12:07
evge

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

UpDn:=If(Dn>Ref(Dn,-1),1,If(Up<Ref(Up,-1),-1,PREV));
Trend:=If((UpDn=1 and Ref(UpDn,-1)=-1) or UpDn=1 ,Up,Dn);


в АД4 можно так:

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

UpDn = ?(Dn[0] > Dn[1], 1, ?(Up[0] < Up[1], -1, PREV));
Trend = ?((UpDn == 1 && UpDn[1] == -1) || UpDn == 1, Up, Dn);


вторая строка конечно подозрительная по условию :)

мне кажется, что результат будет тот же при таком условии:

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

Trend = ?(UpDn == 1, Up, Dn);


но автору оригинального кода виднее

что-то не получается

Добавлено: 28 янв 2019, 13:49
JASON
скомпилировать. Выдает "Недопустимый термин "?" в строке.."

Re: Как пару строк (из Метасток) перевести

Добавлено: 28 янв 2019, 14:15
BugsDigger
> Недопустимый термин

Правильный синтаксис:

result = b ? val_true : val_false;

где b - условие, val_true и val_false - результат для случая b==true и b==false соответственно.

В вашем случае:

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

UpDn = (Dn[0] > Dn[1] ? 1 : (Up[0] < Up[1] ? -1 : PREV));
Trend = ((UpDn == 1 && UpDn[1] == -1) || UpDn == 1 ? Up : Dn);

Re: Как пару строк (из Метасток) перевести

Добавлено: 28 янв 2019, 15:43
JASON
Спасибо. Единственно, теперь PREV не распознает. Корректно ли будет вставить UpDn[1] ?

Re: Как пару строк (из Метасток) перевести

Добавлено: 28 янв 2019, 16:28
BugsDigger
> PREV не распознает

В приведенном вами исходном коде ни декларации, ни вычисления переменной PREV нет (или это даже какой-то макрос, если таковые есть в Метастоке, не знаю), так что ничего определенного сказать не могу...

Re: Как пару строк (из Метасток) перевести

Добавлено: 28 янв 2019, 17:11
Indigo-On
BugsDigger писал(а):> PREV не распознает

В приведенном вами исходном коде ни декларации, ни вычисления переменной PREV нет (или это даже какой-то макрос, если таковые есть в Метастоке, не знаю), так что ничего определенного сказать не могу...

PREV - это не переменная. Это функция для организации рекурсивных вычислений. Из документации:
PREV is a special value the refers to the current formulas' value for the previous period. It makes a formula slower to calculate and increases the discrepances if there is an error in the formula. However. PREV is the only way to create self-referencing formulas in MetaStock

Вроде как возвращает предыдущее значение текущей вычисляемой функции.
For example, if you want to calculate this:
a = close + [Previous Value of this Formula];
In Metastock, you can use:
a = close + PREV;
This formula takes the value of "close" and adds it to the previous value of "a".
At bar "100", it takes the close price at that bar and adds it to the value of variable "a" at bar 99.
JASON писал(а):Спасибо. Единственно, теперь PREV не распознает. Корректно ли будет вставить UpDn[1] ?
Да.

Re: Как пару строк (из Метасток) перевести

Добавлено: 28 янв 2019, 18:14
evge
Спасибо что синтаксис поправили. Это накладывается моя активная работа с 1С последнее время, а там синтаксис чуть другой :)

Re: Как пару строк (из Метасток) перевести

Добавлено: 28 янв 2019, 20:17
JASON
Да PREv- предыдущее значение индикатора, функции.
Indigo, спасибо