Статья "ИСПОЛЬЗОВАНИЕ РАЗНОМАСШТАБНЫХ ГРАФИКОВ"

Подробнее
9 года 9 мес. назад #86 от AlexLan
Михаил, добрый вечер.
Хорошая статья )) замечательная идея.)))
Но возникло несколько вопросов.
1. Вы пишете "В скрипте расчета индикатора при помощи StaticVarSet сохраняем в памяти текущий массив, описывающий наш индикатор, а в глобальном скрипте получаем его при помощи StaticVarGet." - но в helpe написано ВОЗВРАЩАЕТ КОНСТАНТУ или ТЕКСТ . Так все таки возвращает массив или константу?
2. Запускаем в отдельном окне msc-stoch.afl - выводится график всякие промежуточные расчеты.- отлично. Затем тот же скрипт вызываем в основном модуле #include <msc-stoch.afl> получаем расчету -супер )), а что делать с графиком он же тоже будет рисоваться. Если фьюс на ртс или сам ртс то его не будет видно а если сбер?
Подскажите пожалуйста, как решить эту проблему.
Из статьи я не понял.
С уважением, Александр.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #87 от admin

AlexLan пишет: Михаил, добрый вечер.
Хорошая статья )) замечательная идея.)))

Но возникло несколько вопросов.
1. Вы пишете "В скрипте расчета индикатора при помощи StaticVarSet сохраняем в памяти текущий массив, описывающий наш индикатор, а в глобальном скрипте получаем его при помощи StaticVarGet." - но в helpe написано ВОЗВРАЩАЕТ КОНСТАНТУ или ТЕКСТ . Так все таки возвращает массив или константу?
2. Запускаем в отдельном окне msc-stoch.afl - выводится график всякие промежуточные расчеты.- отлично. Затем тот же скрипт вызываем в основном модуле #include <msc-stoch.afl> получаем расчету -супер )), а что делать с графиком он же тоже будет рисоваться. Если фьюс на ртс или сам ртс то его не будет видно а если сбер?
Подскажите пожалуйста, как решить эту проблему.
Из статьи я не понял.
С уважением, Александр.


Спасибо :) . Попробую ответить.
По вопросу номер 1. Тут Вы, Александр, перепутали функции StaticVarGet и StaticVarGetText Первая из них возвращает массив/константу, вторая - текст. Мы используем первую
По второму вопросу. Вся фишка в том, что графики рисуются только в режиме индикатора. А если у нас формула используется в этом режиме, то include не сработает - он внутри if, . Соответственно и не нарисуется ничего неожиданного. Попробуйте ! ;)

Статья
Последнее редактирование: 9 года 9 мес. назад пользователем admin.
Спасибо сказали: AlexLan

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #88 от AlexLan
Огромное спасибо. ;)
"По второму вопросу. Вся фишка в том, что графики рисуются только в режиме индикатора. А если у нас формула используется в этом режиме, то include не сработает - он внутри if, . Соответственно и не нарисуется ничего "
К сожалению не совсем понял эту фразу. " что графики рисуются только в режиме индикатора" какой мне и где мне нужно выставить режим, что бы это все заработало как Sa написали.
С уважением, Александр.
Последнее редактирование: 9 года 9 мес. назад пользователем AlexLan.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад #89 от admin
Александр, на самом деле ничего нигде выставлять не нужно. Все проще.

Если вы намазали скрипт на график - это режим индикатора. Если запустили его в АА - это режим автоанализа. Если исполняете бектест - это режим запуска в бектесте. А функция Status нам как раз и рассказывает, в каком режиме исполняется скрипт. Если режим любой, кроме индикатора - подтягиваем дополнительные индикаторы в тело главного скрипта. Если индикатор - то не подтягиваем.
Спасибо сказали: AlexLan

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #90 от AlexLan
Михаил, добрый вечер.
Сейчас пытался сделать очень простую программку

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

if (Status("action") != actionIndicator)
{ #include <my-RSI.afl> }
_buy =Cross(_rsi,Porog30);
_short =Cross(Porog70,_rsi);

Buy = ExRem(_buy,_short);
Sell= ExRem(_short,_buy);
Short= ExRem(_short, _buy);
Cover=ExRem(_buy,_short);
и вставляем код my-RSI.afl

Porog30 = Param("Porog 30", 30, 10, 45, 1 );
Porog70 = Param("Porog 70", 70, 55, 90, 1 );
periods = Param("Periods", 15, 1, 200, 1 );
_rsi= RSIa( C, periods);
Plot( _rsi, _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );

Выдает ошибку 29 программа не видит переменные. Porog30, Porog70, _rsi
По пытался присвоить в глобальные переменные StaticVarSet( "RSIglob1", _rsi ); а в основном модуле считать данные
_rsi=StaticVarGet( "RSIglob1"); тоже ничего не получилось
Подскажите где ошибка.
Тест простой, в отдельном окне рассчитать _rsi перенести массив в основную программу. При этом нарисовать график
Подскажите пожалуйста где ошибка.
С уважением, Александр
Последнее редактирование: 9 года 9 мес. назад пользователем AlexLan.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #91 от admin
Александр, насколько я ничего не понимаю, ;) Вы запустили написанное в режиме индикатора? Ну то есть просто на чарт бросили формулу. Если я правильно ничего не понимаю, то вы получили именно то, что заказали:dry:

Смотрите:
if режим НЕ индикатор
включить include файл


он и не включается :huh:


Расчет rsi Вы делаете в отдельной формуле, которую запускаете вручную. Все переменные типа porog определяются в ней. Как вы хотите увидеть эти переменные в главном модуле? Не выйдет...

Вам нужно или передать массив рси + константы порог через глобальные переменные в главный модуль и там рассчитать сигналы, либо (что лучше) рассчитать buy/sell в доп модуле и передать в главный модуль уже рассчитанные сигналы
Последнее редактирование: 9 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад #92 от AlexLan
Спасибо за емкий ответ. ))
Если бы я понимал бы как решить данную проблему, я бы у Вас не спрашивал совета.
По статье мне показалось что Вы смогли решить задачу.
В 1 окне выводить свечки и прочие МА а в других окнах строить MACD и RSI отображать и данные передавать в окно там где свечи для дальнейшего использования.
Я, по пытался написать по Вашему примеру. У меня не получилось.
По пытался присвоить через StaticVarSet то же не получилось.
Я спросил у Вас. В ответ ирония.
........

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #93 от AlexLan
"Вам нужно или передать массив рси + константы порог через глобальные переменные в главный модуль и там рассчитать сигналы"
Я, так и хотел сделать.
"либо (что лучше) рассчитать buy/sell в доп модуле и передать в главный модуль уже рассчитанные сигналы"
Да это решение.
Но если я использую допустим MACD+RSI и только когда они не зависимо друг от друга дают сигнал лог. 1. Он по падает в основной модуль где на основе этих сигналов принимается решение.
То вариант "рассчитать buy/sell в доп модуле и передать" наверно не подходит или я не понимаю как работает buy/sell в нескольких модулях
Последнее редактирование: 9 года 9 мес. назад пользователем AlexLan.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #94 от admin
Никакой иронии, Александр. Прочтите внимательно. Переменные porog Вы определяете в одном модуле, а хотите использовать в другом. Ошибка происходит потому, что в режиме индикатора скрипты не склеиваются (if НЕ индикатор......) и вы получаете неизвестную переменную. Все происходит в точном соответствии с написанным Вами кодом.
Последнее редактирование: 9 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #95 от admin

AlexLan пишет: Но если я использую допустим MACD+RSI и только когда они не зависимо друг от друга дают сигнал лог. 1. Он по падает в основной модуль где на основе этих сигналов принимается решение.



Рассчитайте в модуле MACD сигналы, которые порождаются этим индикатором и поместите их в массивы macd_buy,macd_sell и остальные. Эти массивы и передайте.

сигналы от рси поместите в массивы типа rsi_buy, rsi_sell и т.д. и передайте в главный модуль

А в главном модуле делайте любые композиции из этих массивов и формируйте уже конечные buy/sell/short/cover
Последнее редактирование: 9 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #96 от AlexLan
Я так и сделал во втором варианте но не работает(((
я написал, что пытался их определить через глобальные переменные
a=StaticVarSet( "RSIglob1", _rsi );
a=StaticVarSet( "RSIglobporog30", Porog30 );
a=StaticVarSet( "RSIglobporog70", Porog70 );
и получить в основном модуле
_rsi=StaticVarGet( "RSIglob1");
Porog30=StaticVarGet( "RSIglobporog30" );
Porog70=StaticVarGet( "RSIglobporog70" );

_Buy =Cross(_rsi,Porog30);
_short =Cross(Porog70,_rsi);
Buy = ExRem(_buy,_short);
Sell= ExRem(_short,_buy);
Short= ExRem(_short, _buy);
Cover=ExRem(_buy,_short);
Последнее редактирование: 9 года 9 мес. назад пользователем AlexLan.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #97 от admin
В этих фрагментах я ошибок не вижу. Другой информации у меня нет.

"Что-то не работает" по другой причине.
Последнее редактирование: 9 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад #98 от AlexLan
Михаил, добрый день
Это текст из двух файлов. Я как в старину отлаживаю "маленький кирпичик" и вставляю на в общую программу.
Конечно в реальной программе, я не будет передаваться значение rsi (но может быть любая другая функция), так и пороги. Планировалось передать rsi_buy... ( логическая 1) внутри этого импульса (разные таймфреймы) основная программа принимает решение buy или не buy.
А код весь + прорисовка свечей и RSI и Ваша логика if режим НЕ индикатор
С уважением, Александр.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад #99 от AlexLan
Михаил, как мне кажется это действительно актуальная тема.
Потому что во время отладки приходится выводить массу дополнительной информации.
А если бы по Вашей ))) методике перенести все это в отдельное окно это было бы супер ))))))))
Александр.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад - 9 года 9 мес. назад #100 от admin
Александр, Мне кажется, Вам внимательнее нужно посмотреть в AFL код. Вы все делаете правильно, но "что-то не работает"
:
Вложения:
Последнее редактирование: 9 года 9 мес. назад пользователем admin.
Спасибо сказали: AlexLan

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
9 года 9 мес. назад #101 от AlexLan
Михаил, все заработало.
Сделал следующие шаги
в ФАЙЛ my-RSI.afl записал

_rsi= RSIa( C, periods);
_rsiMov = EMA(_rsi, Optimize("Per_Mov", 15, 3, 30, 1 ));
Plot( _rsiMov, _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );
_rsi_long=IIf(_rsiMov<Porog30,1,0);
_rsi_short=IIf(_rsiMov>Porog70,1,0);
a=StaticVarSet( "RSIglob1Long", _rsi_long );
a=StaticVarSet( "RSIglob1Short", _rsi_short );
В ФАЙЛ ОСНОВНОЙ
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
if (Status("action") != actionIndicator)
{ #include <my-RSI.afl> }
_rsiLongGlob=StaticVarGet( "RSIglob1Long");
_rsiShortGlob=StaticVarGet( "RSIglob1Short");
_mov1 =EMA(C,Optimize("pMov", 15, 3, 30, 1 ));
_buy=IIf(_rsiLongGlob,Cross(C,_mov1),0);
_short=IIf(_rsiShortGlob,Cross(_mov1, C),0);
Buy = ExRem(_buy,_short);
Sell= ExRem(_short,_buy);
Short= ExRem(_short, _buy);
Cover=ExRem(_buy,_short);
И все заработало. AFL не понимал (не отрабатывал) команду cross с глобальной переменной.
Сформировал логическое окно и обычное пересечение С и EMA.
Александр.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: admin