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

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

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

"По второму вопросу. Вся фишка в том, что графики рисуются только в режиме индикатора. А если у нас формула используется в этом режиме, то include не сработает - он внутри if, . Соответственно и не нарисуется ничего "
К сожалению не совсем понял эту фразу. " что графики рисуются только в режиме индикатора" какой мне и где мне нужно выставить режим, что бы это все заработало как Sa написали.
С уважением, Александр.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Если вы намазали скрипт на график - это режим индикатора. Если запустили его в АА - это режим автоанализа. Если исполняете бектест - это режим запуска в бектесте. А функция Status нам как раз и рассказывает, в каком режиме исполняется скрипт. Если режим любой, кроме индикатора - подтягиваем дополнительные индикаторы в тело главного скрипта. Если индикатор - то не подтягиваем.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Сейчас пытался сделать очень простую программку
_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 перенести массив в основную программу. При этом нарисовать график
Подскажите пожалуйста где ошибка.
С уважением, Александр
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.


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

Расчет rsi Вы делаете в отдельной формуле, которую запускаете вручную. Все переменные типа porog определяются в ней. Как вы хотите увидеть эти переменные в главном модуле? Не выйдет...
Вам нужно или передать массив рси + константы порог через глобальные переменные в главный модуль и там рассчитать сигналы, либо (что лучше) рассчитать buy/sell в доп модуле и передать в главный модуль уже рассчитанные сигналы
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Если бы я понимал бы как решить данную проблему, я бы у Вас не спрашивал совета.
По статье мне показалось что Вы смогли решить задачу.
В 1 окне выводить свечки и прочие МА а в других окнах строить MACD и RSI отображать и данные передавать в окно там где свечи для дальнейшего использования.
Я, по пытался написать по Вашему примеру. У меня не получилось.
По пытался присвоить через StaticVarSet то же не получилось.
Я спросил у Вас. В ответ ирония.
........
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Я, так и хотел сделать.
"либо (что лучше) рассчитать buy/sell в доп модуле и передать в главный модуль уже рассчитанные сигналы"
Да это решение.
Но если я использую допустим MACD+RSI и только когда они не зависимо друг от друга дают сигнал лог. 1. Он по падает в основной модуль где на основе этих сигналов принимается решение.
То вариант "рассчитать buy/sell в доп модуле и передать" наверно не подходит или я не понимаю как работает buy/sell в нескольких модулях
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
AlexLan пишет: Но если я использую допустим MACD+RSI и только когда они не зависимо друг от друга дают сигнал лог. 1. Он по падает в основной модуль где на основе этих сигналов принимается решение.
Рассчитайте в модуле MACD сигналы, которые порождаются этим индикатором и поместите их в массивы macd_buy,macd_sell и остальные. Эти массивы и передайте.
сигналы от рси поместите в массивы типа rsi_buy, rsi_sell и т.д. и передайте в главный модуль
А в главном модуле делайте любые композиции из этих массивов и формируйте уже конечные buy/sell/short/cover
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
я написал, что пытался их определить через глобальные переменные
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);
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
"Что-то не работает" по другой причине.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Это текст из двух файлов. Я как в старину отлаживаю "маленький кирпичик" и вставляю на в общую программу.
Конечно в реальной программе, я не будет передаваться значение rsi (но может быть любая другая функция), так и пороги. Планировалось передать rsi_buy... ( логическая 1) внутри этого импульса (разные таймфреймы) основная программа принимает решение buy или не buy.
А код весь + прорисовка свечей и RSI и Ваша логика if режим НЕ индикатор
С уважением, Александр.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Потому что во время отладки приходится выводить массу дополнительной информации.
А если бы по Вашей ))) методике перенести все это в отдельное окно это было бы супер ))))))))
Александр.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
:
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Сделал следующие шаги
в ФАЙЛ 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.
Александр.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.