Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Пересечение линий Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
tlt-vlad



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

СообщениеДобавлено: Пт Фев 11, 2011 7:53 pm Ответить с цитатой Вернуться к началу

Уважаемые коллеги, на чарте существуют две пересекающиеся линии , подскажите есть ли в Ами возможность узнать значение точки пересечения. Для наглядности прилагаю скриншот.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Фев 11, 2011 9:53 pm Ответить с цитатой Вернуться к началу

Вот такой код показывает значение этой точки. Одну линию надо обозвать qq а другую ww
Код:

Plot( ValueWhen(Cross(Study("ww", 1000), Study("qq", 1000)) OR Cross( Study("qq", 1000), Study("ww", 1000)), Study("qq", 1000)), "", colorRed);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
tlt-vlad



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

СообщениеДобавлено: Пт Фев 11, 2011 10:24 pm Ответить с цитатой Вернуться к началу

Извиняюсь, бросил приложенный код на окно графика, но там ни-ни.
В чём дело, может быть ???

Код:
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();

_SECTION_BEGIN("Unnamed 18");
Plot( ValueWhen(Cross(Study("ww", 1000), Study("qq", 1000)) OR Cross( Study("qq", 1000), Study("ww", 1000)), Study("qq", 1000)), "", colorRed);
_SECTION_END();
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Фев 11, 2011 10:41 pm Ответить с цитатой Вернуться к началу

Study("qq", 1000) 1000 это чартИД (номер подокна) Надо поставить свой (посмотри в хелпере в описании функции Study как узнать номер ChartID) или можно вместо 1000 поставить везде GetChartID().

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
tlt-vlad



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

СообщениеДобавлено: Пт Фев 11, 2011 11:09 pm Ответить с цитатой Вернуться к началу

Может я где туплю, но что то ни как не получается.
Код:
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();

_SECTION_BEGIN("Unnamed 18");
Plot( ValueWhen(Cross(Study("ww", GetChartID()), Study("qq", GetChartID())) OR Cross( Study("qq", GetChartID()), Study("ww", GetChartID())), Study("qq", GetChartID())), "", colorRed);
_SECTION_END();
Посмотреть профиль Отправить личное сообщение
tlt-vlad



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

СообщениеДобавлено: Сб Фев 12, 2011 3:31 pm Ответить с цитатой Вернуться к началу

Попытался разобраться , как работает этот код , навоял вот такое
Код:
SetBarsRequired(500000, 500000);
Plot(C, "", colorWhite, styleBar);
Res = IIf((Cross(Study("ww", GetChartID()), Study("qq", GetChartID())) OR Cross( Study("qq", GetChartID()), Study("ww", GetChartID()))),1,0);
Plot(res,"",colorRed,styleLine|styleOwnScale);


и в результате получил такое
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Фев 12, 2011 9:43 pm Ответить с цитатой Вернуться к началу

Ну, все правильно. На следующем после пересечения баре получаешь Res == 1. А на первых двух картинках пересечение происходит правее окончания графика. Там AFL ничего рассчитать не может.
А вот такой код
Код:

Plot(C, "", colorBlack, styleBar);
Res = ValueWhen( Cross(Study("ww", GetChartID()), Study("qq", GetChartID()))
        OR Cross( Study("qq", GetChartID()), Study("ww", GetChartID())),
        Ref(Study("qq", GetChartID()), -1));
Plot(res,"",colorRed,styleLine);

Дает вот такую картинку
ВАЖНО! Наклонная линия должна иметь имя "qq"

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Kukulkan



Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург

СообщениеДобавлено: Вс Янв 27, 2013 11:01 pm Ответить с цитатой Вернуться к началу

000 писал(а):
ВАЖНО! Наклонная линия должна иметь имя "qq"

В потрошении функции STUDY наступило время "типа АУ" Smile
Код:

SellCond1=Cross(Study("TR",GetChartID()),Graph0);
BuyCond1=Graph0-Study("SU",GetChartID())<=0.75;
Sell=SellCond1;
Buy=BuyCond1;
shape=Sell*shapeHollowSmallDownTriangle+Buy*shapeHollowSmallUpTriangle;
PlotShapes(shape,IIf(Sell,colorRed,colorGreen),0,Graph0,-18);


во второй строке вместо SU вставляется qq, UG, FU и работает. Но когда я вставляю нужное мне(и прописанное в проперти) "TA" АМИ притворяется глухонемым.
На чарте Ами видит только одну линию с некоторым chartId?
При выполнении кода, АМИ радостно хохоча маркирует первую и вторую точку построения, как соответствующую условию.. Они соответствуют, но линия появляется после них. Можно сделать, чтобы поиск начинался за пределами первых двух точек?
Буду очень благодарен, если сориентируете где копать.

Кукулькан, с уважением.

_________________
Не ходи за мной, я сам заблудился.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Янв 27, 2013 11:57 pm Ответить с цитатой Вернуться к началу

Ей богу не понял.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Kukulkan



Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург

СообщениеДобавлено: Пн Янв 28, 2013 8:15 am Ответить с цитатой Вернуться к началу

000 писал(а):
Ей богу не понял.

С кукульканского на русский попробую..

1. Непонятно. Функция Study некоторые буквенные обозначения видит, а некоторые нет. Причем обозначения, которые она "видит" часто произвольные типа FU. Прописаны ли где-то требования к буквенным обозначениям линий?
2. Если на графике у нас возникает семейство линий, допустим, Тarget Line, обозначаемые как "TA". Что мешает АМИ обратиться ко всему семейству? Почему при удалении крайней линии, код не обращается к предыдущей? Важна ли последовательность "сначала маркируем линии, потом прописываем их в коде"?
3. Прямая строится по двум точкам. Т.е. пока вторая точка не образовалась, прямой нет. Как сделать, чтобы код не обращал внимание на область, расположенную между точками 1 и 2 прямой?

Буду очень благодарен, если сориентируете где копать.

Кукулькан, с уважением.

_________________
Не ходи за мной, я сам заблудился.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Янв 28, 2013 8:47 am Ответить с цитатой Вернуться к началу

Цитата:
1. Непонятно. Функция Study некоторые буквенные обозначения видит, а некоторые нет. Причем обозначения, которые она "видит" часто произвольные типа FU. Прописаны ли где-то требования к буквенным обозначениям линий?

Странно. Я попробовал TA (на англ.) Прекрасно работает. Скажи какие не работают. Вроде ограничений нет. Русскими буквами обзывать не надо.
Цитата:
2. Если на графике у нас возникает семейство линий, допустим, Тarget Line, обозначаемые как "TA". Что мешает АМИ обратиться ко всему семейству? Почему при удалении крайней линии, код не обращается к предыдущей? Важна ли последовательность "сначала маркируем линии, потом прописываем их в коде"?

Почему не обращается сразу ко всему семейству я не знаю. Вероятно Ами считает линию как один массив рисующий прямую на весь график а если линий несколько, то это уже ломанная. Кроме того, непонятно как действовать если несколько линий "наедут" друг на друга.
При удалении последней у меня расчет переключается на предыдущую. Тут, возможно, фигня вот в чем. Он переключается не на предыдущую левее удаленной, а на то, которая была нарисована предпоследней. Т.е. он их ставит по порядку не слева на право, а в порядке рисования.
Цитата:
3. Прямая строится по двум точкам. Т.е. пока вторая точка не образовалась, прямой нет. Как сделать, чтобы код не обращал внимание на область, расположенную между точками 1 и 2 прямой?

Не знаю возможно ли это....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Kukulkan



Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Фев 01, 2013 10:33 am Ответить с цитатой Вернуться к началу

Да, спасибо. Действительно работают все обозначения. АMI не нравится только когда одно и тоже обозначение линии фигурирует и в SellCond и в BuyCond.

Дальше написал такое:

Код:
Buy=Ref(BuyCond1,1) OR Ref(BuyCond2,1) OR Ref(BuyCond3,1) OR Ref(BuyCond4,1);//

напрасно ожидая, что сигнал сместится на одну точку вправо. Мне важно это сделать, потому что в первые минуты часа значение индикатора "летает" по всему полю, генерируя сигналы во все стороны.

Теперь я понимаю, что функция Ref() относится к массивам, а BuyCond таковым не является... И возникновение условия SellCond нужно пристегнуть к массиву, на котором он возникает. Как это сделать, Олег?

_________________
Не ходи за мной, я сам заблудился.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Фев 01, 2013 10:40 am Ответить с цитатой Вернуться к началу

BuyCond является массивом и сдвигать его функцией Ref() можно. Только чтобы сдвинуть на один бар вправо, надо -1
Ref(BuyCond1, -1)

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Kukulkan



Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Фев 01, 2013 11:11 am Ответить с цитатой Вернуться к началу

000 писал(а):
BuyCond является массивом и сдвигать его функцией Ref() можно. Только чтобы сдвинуть на один бар вправо, надо -1
Ref(BuyCond1, -1)


вэри сорри за дурацкий вопрос. конечно, -1. Embarassed

_________________
Не ходи за мной, я сам заблудился.
Посмотреть профиль Отправить личное сообщение
Kukulkan



Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург

СообщениеДобавлено: Пн Апр 08, 2013 9:02 am Ответить с цитатой Вернуться к началу

А сработает ли cross, если один график по касательной достигнет другого и начнет удаляться от него? т.е. возникнет точка, в которой первый график <= второму?

_________________
Не ходи за мной, я сам заблудился.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen