Автор |
Сообщение |
Чичиков
Гость
|
Доброго времени суток.
Ситуация:
На одной странице (Sheet) расположено несколько окон по одному инструменту (например в одном "цена+сигналы" (с параметрами), в другом- к примеру, эквити).
Код первого окна (TC_1)- находится в Custom.
В коде второго содержится:
.....
#include "C:\.........путь......\Custom\TC_1.afl";
Plot (equity(........; (это все работает нормально)
.....
Далее: При изменении параметров через "диалог" Parameters, обновляется (пересчитывается+перерисовывается) только окно, из которого был вызван "диалог". В других окнах параметры не меняются, что не очень удобно, особенно если параметров много...
Соответственно вопрос: можно ли сделать так, чтобы при изменении параметров одного окна, автоматически (синхронно) изменялись параметры в других окнах, с последующим обновлением окон. |
|
|
|
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
--------------------------------------------------------------- |
Последний раз редактировалось: ID (Вт Янв 22, 2008 1:15 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Это как два пальца. Функции STATICVARSET() и STATICVARGET().
Позже напишу подробнее, сейчас некогда |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Первое окно
Код: |
period = Param("Period", 5, 2, 10, 1);
StaticVarSet("period", period);
Plot(StochD(period, 3, 3), _DEFAULT_NAME(), colorRed, styleLine); |
Второе окно
Код: |
period = StaticVarGet("period");
period = Nz(period, 5); // Если период не определен, то 5
Plot(RSI(period), _DEFAULT_NAME(), colorBlue, styleLine); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Чичиков
Гость
|
Благодарю за ответ. Попробую применить...
Удачи Олегу, проекту AmiSite.ru и всем форумянам! |
|
|
|
|
Чичиков
Гость
|
Попробовал приведенный пример. работает. Спасибо еще раз...
(Кстати, то что я называл "окнами", в Хелпе называется, как я понял, "подокнами"; поэтому несколько изменю термины.)
Есть здесь маленькие "тонкости", поэтому напишу подробнее:
при изменении параметров мышкой (например передвигание скролеров мышкой и.т.д.) "вживую" изменяется только подокно из которого был вызван "диалог" Parameters (далее-"главное" подокно). Для перерисовки остальных подокон надо "щелкать" мышкой в любое из подокон ("диалог" Parameters закрывать необязательно). При изменении параметров с клавиатуры -нужен "двойной" щелчок в подокна (т.к первый применяет новое значение параметра к главному подокну (равносильно нажатию ОК но без закрытия "диалога") второй щелчок мышкой вызывает обновление (перерисовку) остальных подокон.
При применении в изначально изображенной ситуации, т.е. когда:
-------------------------------------------------
На одной странице (Sheet) расположено несколько подокон по одному инструменту (например в одном "цена+сигналы" (с параметрами), в другом- к примеру, эквити).
Код первого подокна (TC_1)- находится в Custom.
(Ввод параметров в первом подокне)
В коде второго содержится:
.....
#include "C:\.........путь......\Custom\TC_1.afl";
Plot (equity(........;
--------------------------------------------
Тут все несколько сложнее: т.к. ввод параметров из-за наличия #include можно производить как из первого так и из второго подокна, то, судя по всему наличие Param(..... в первом подокне ( соответственно через #include и во втором) блокирует применение передаваемого через STATICVARSET() - STATICVARGET() параметра.
Пока выход найден следующий:
Param(.... и STATICVARSET() перенесены во втрое подокно ( перед #include) ,STATICVARGET() - в первое.
Соответственно "рулим" только из второго подокна (где эквити).
Но в конечном итоге: это как раз и удобно т.к. при рулежке (мышкой)из этого подокна "вживую" меняется эквити, что по большому счету и требовалось...
(соответственно для перерисовки первого подокна( например при нахождении "интересной" картины по эквити) просто щелкаем мышкой за пределы "диалога" ).
Недостаток такого варианта- после открытия страницы надо щелкнуть мышкой в подокно для перерисовки первого подокна в соответствии с параметрами, сохраненными в "диалоге" Parameters.
Возможно есть более "элегантные" способы решения - надо еще подумать. |
|
|
|
|
Чичиков
Гость
|
В разобранном выше примере есть еще один недостаток:
Если код первого подокна содержит Plot, то индикаторы во второе окно через #include не переносится, что как раз и требуется.
А если мы применяем PlotShapes, то Shapes-значки отображаются в обоих подокнах- во втором- вокруг "0",что несколько мешает просмотру.
Все попытки избежать отображения значков во втором подокне пока ни к чему не привели. Может кто подскажет как быть..
Или с учетом того что в переводе хелпа написано "PlotShapes - Чертит стрелки или другие значки в любом подокне.": слова "в любом подокне" это приговор для моего начинания избежать "переползания" значков через #include? |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вообще Томаш не рекомендует использовать функцию #include. Может имеет смысл отказаться от её использования и просто скопировать нужный код в индикатор заменив #include. Тогда можно внести в него нужные изменения. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|