Общие вопросы по разработке > Как пару строк (из Метасток) перевести

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
JASON
Сообщения: 27
Зарегистрирован: 31 янв 2017, 21:50
Благодарил (а): 3 раза

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

Непрочитанное сообщение JASON » 27 янв 2019, 22:10

Просьба помочь.
Как пару строк (из Метасток) перевести ?
Границы канала (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;
}

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 28 янв 2019, 12:07

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

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);


но автору оригинального кода виднее
никогда такого не было и вот опять

JASON
Сообщения: 27
Зарегистрирован: 31 янв 2017, 21:50
Благодарил (а): 3 раза

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

Непрочитанное сообщение JASON » 28 янв 2019, 13:49

скомпилировать. Выдает "Недопустимый термин "?" в строке.."

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

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

Непрочитанное сообщение BugsDigger » 28 янв 2019, 14:15

> Недопустимый термин

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

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);

JASON
Сообщения: 27
Зарегистрирован: 31 янв 2017, 21:50
Благодарил (а): 3 раза

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

Непрочитанное сообщение JASON » 28 янв 2019, 15:43

Спасибо. Единственно, теперь PREV не распознает. Корректно ли будет вставить UpDn[1] ?

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

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

Непрочитанное сообщение BugsDigger » 28 янв 2019, 16:28

> PREV не распознает

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

Аватара пользователя
Indigo-On
Сообщения: 55
Зарегистрирован: 28 ноя 2018, 18:44
Откуда: Russia
Благодарил (а): 24 раза
Поблагодарили: 9 раз

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

Непрочитанное сообщение Indigo-On » 28 янв 2019, 17:11

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] ?
Да.

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 28 янв 2019, 18:14

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

JASON
Сообщения: 27
Зарегистрирован: 31 янв 2017, 21:50
Благодарил (а): 3 раза

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

Непрочитанное сообщение JASON » 28 янв 2019, 20:17

Да PREv- предыдущее значение индикатора, функции.
Indigo, спасибо


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей