Автор |
Сообщение |
tlt-vlad
Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва
|
Уважаемые коллеги, на чарте существуют две пересекающиеся линии , подскажите есть ли в Ами возможность узнать значение точки пересечения. Для наглядности прилагаю скриншот. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот такой код показывает значение этой точки. Одну линию надо обозвать 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
Откуда: ... теперь Москва
|
Извиняюсь, бросил приложенный код на окно графика, но там ни-ни.
В чём дело, может быть ???
Код: |
_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
|
Study("qq", 1000) 1000 это чартИД (номер подокна) Надо поставить свой (посмотри в хелпере в описании функции Study как узнать номер ChartID) или можно вместо 1000 поставить везде GetChartID(). |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
tlt-vlad
Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва
|
Может я где туплю, но что то ни как не получается.
Код: |
_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
Откуда: ... теперь Москва
|
Попытался разобраться , как работает этот код , навоял вот такое
Код: |
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
|
Ну, все правильно. На следующем после пересечения баре получаешь 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
Откуда: Санкт-Петербург
|
000 писал(а): |
ВАЖНО! Наклонная линия должна иметь имя "qq" |
В потрошении функции STUDY наступило время "типа АУ"
Код: |
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
|
Ей богу не понял. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
000 писал(а): |
Ей богу не понял. |
С кукульканского на русский попробую..
1. Непонятно. Функция Study некоторые буквенные обозначения видит, а некоторые нет. Причем обозначения, которые она "видит" часто произвольные типа FU. Прописаны ли где-то требования к буквенным обозначениям линий?
2. Если на графике у нас возникает семейство линий, допустим, Тarget Line, обозначаемые как "TA". Что мешает АМИ обратиться ко всему семейству? Почему при удалении крайней линии, код не обращается к предыдущей? Важна ли последовательность "сначала маркируем линии, потом прописываем их в коде"?
3. Прямая строится по двум точкам. Т.е. пока вторая точка не образовалась, прямой нет. Как сделать, чтобы код не обращал внимание на область, расположенную между точками 1 и 2 прямой?
Буду очень благодарен, если сориентируете где копать.
Кукулькан, с уважением. |
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
1. Непонятно. Функция Study некоторые буквенные обозначения видит, а некоторые нет. Причем обозначения, которые она "видит" часто произвольные типа FU. Прописаны ли где-то требования к буквенным обозначениям линий? |
Странно. Я попробовал TA (на англ.) Прекрасно работает. Скажи какие не работают. Вроде ограничений нет. Русскими буквами обзывать не надо.
Цитата: |
2. Если на графике у нас возникает семейство линий, допустим, Тarget Line, обозначаемые как "TA". Что мешает АМИ обратиться ко всему семейству? Почему при удалении крайней линии, код не обращается к предыдущей? Важна ли последовательность "сначала маркируем линии, потом прописываем их в коде"? |
Почему не обращается сразу ко всему семейству я не знаю. Вероятно Ами считает линию как один массив рисующий прямую на весь график а если линий несколько, то это уже ломанная. Кроме того, непонятно как действовать если несколько линий "наедут" друг на друга.
При удалении последней у меня расчет переключается на предыдущую. Тут, возможно, фигня вот в чем. Он переключается не на предыдущую левее удаленной, а на то, которая была нарисована предпоследней. Т.е. он их ставит по порядку не слева на право, а в порядке рисования.
Цитата: |
3. Прямая строится по двум точкам. Т.е. пока вторая точка не образовалась, прямой нет. Как сделать, чтобы код не обращал внимание на область, расположенную между точками 1 и 2 прямой? |
Не знаю возможно ли это.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
Да, спасибо. Действительно работают все обозначения. А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
|
BuyCond является массивом и сдвигать его функцией Ref() можно. Только чтобы сдвинуть на один бар вправо, надо -1
Ref(BuyCond1, -1) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
000 писал(а): |
BuyCond является массивом и сдвигать его функцией Ref() можно. Только чтобы сдвинуть на один бар вправо, надо -1
Ref(BuyCond1, -1) |
вэри сорри за дурацкий вопрос. конечно, -1. |
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
А сработает ли cross, если один график по касательной достигнет другого и начнет удаляться от него? т.е. возникнет точка, в которой первый график <= второму? |
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|