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


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

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

HighestVisibleValue()
LowestVisibleValue()

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



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

СообщениеДобавлено: Чт Фев 28, 2013 2:00 pm Ответить с цитатой Вернуться к началу

Эти функции я знаю. Но они вычисляют мин/макс только одного индикатора. А когда несколько индикаторов на графике, то непонятно, по какому из них вычислять.
Я думал, что может есть какая-нибудь готовая функция, которая прочитывает непосредственно минимальное и максимальное значения оси Y. Т.е. то, что уже амиброкер сам отмасштабировал.
Посмотреть профиль Отправить личное сообщение
Leonid



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

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

Добрый день. Олег, ну или другие гуру AFL, подскажите пожалуйста. Как (какой функцией) можно получить цены открытия и закрытия предыдущего дня. Именно дня, а не свечи и именно конец дня, а не цена в 23:45 (т.к. есть дни когда биржа работает короткий день).
Посмотреть профиль Отправить личное сообщение
Leonid



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

СообщениеДобавлено: Ср Апр 03, 2013 12:56 pm Ответить с цитатой Вернуться к началу

Leonid писал(а):
Добрый день. Олег, ну или другие гуру AFL, подскажите пожалуйста. Как (какой функцией) можно получить цены открытия и закрытия предыдущего дня. Именно дня, а не свечи и именно конец дня, а не цена в 23:45 (т.к. есть дни когда биржа работает короткий день).

Кажется нашёл то, что нужно. Хэлпер крайне полезная вещь
// Пример 5. получить максимум предыдущего дня при работе на внутридневных данных
TimeFrameGetPrice( "H", inDaily, -1 )
Посмотреть профиль Отправить личное сообщение
Alex14



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

СообщениеДобавлено: Чт Апр 04, 2013 1:06 pm Ответить с цитатой Вернуться к началу

Олег или еще кто из шарящих, подскажите, что не так делаю. Хочу сделать некий индикатор волатильности инструмента
Код:
ATRR = ATR(15)/C*100*1.1;
K1= Sum (ATRR,200);
Plot(K1,"K1",colorIndigo);
хочу чтобы в одном окне сравнивалось несколько символов пишу
Код:
ATRR1 = ATR(15)/C*100*1.1;
K1= Sum (Foreign("FEES","ATRR1"),200);
или так
Код:
 ATRR1 = Foreign("FEES", "ATR(15)/C*100*1.1");
K1 = Sum (ATRR1,200);
совершенно другие значения, при этом мне нужно, чтобы считало как в первом случае. При этов второй и третий варианты совпадают. Спасибо
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Апр 04, 2013 1:21 pm Ответить с цитатой Вернуться к началу

Как я понял тебе надо получить ATR внешнего символа.
Поскольку функция ATR() использует не один ценовой массив для расчета (не только Close) она может работать только с ценами базового символа.
Для того чтобы расчитать ATR на ценах внешнего символа надо подменить цены открытого символа ценами внешнего. Это делается функцией SetForeign(). Разумеется потом надо вернуть оригинальные цены функцией RestorePriceArrays()

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



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

СообщениеДобавлено: Чт Апр 04, 2013 2:23 pm Ответить с цитатой Вернуться к началу

Спасибо, вроде заработало.
Посмотреть профиль Отправить личное сообщение
Alex14



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

СообщениеДобавлено: Чт Апр 04, 2013 5:04 pm Ответить с цитатой Вернуться к началу

Олег, в продолжение темы. Хотел для своих целей модифицировать твой код, вставляю вот это
Код:
SetForeign("FEES");
ATRR1 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("Gazp");
ATRR2 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("MRKH");
ATRR3 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("ROSN ");
ATRR4 = ATR(15)/C*100*1.1;
RestorePriceArrays ();
...........................

s1 = Sum (ATRR1,200);
s2 = Sum (ATRR2,200);
s3 = Sum (ATRR3,200);
s4 = Sum (ATRR4,200);
..............................


Plot(s1, "s1", ParamColor( "Color", colorCycle ));
Plot(s2, "s2", ParamColor( "Color", colorCycle ));
Plot(s3, "s3", ParamColor( "Color", colorCycle ));
Plot(s4, "s4", ParamColor( "Color", colorCycle ));

все показывает и работает, но при попытке всавить в твой код, считает только один символ, может чего не досмотрел...

Код:
dat = ParamDate("Start Data", "01.01.2000", 0);

symb1 = ParamStr("Symbol 1","");
symb1S = ParamToggle("Show symbol 1?", "No|Yes", 0);
symb1C = ParamColor("color symbol 1", colorBlue);
symb2 = ParamStr("Symbol 2", "");
symb2S = ParamToggle("Show symbol 2?", "No|Yes", 0);
symb2C = ParamColor("color symbol 2", colorBlue);
symb3 = ParamStr("Symbol 3", "");
symb3S = ParamToggle("Show symbol 3?", "No|Yes", 0);
symb3C = ParamColor("color symbol 3", colorBlue);
symb4 = ParamStr("Symbol 4", "");
symb4S = ParamToggle("Show symbol 4?", "No|Yes", 0);
symb4C = ParamColor("color symbol 4", colorBlue);
symb5 = ParamStr("Symbol 5", "");
symb5S = ParamToggle("Show symbol 5?", "No|Yes", 0);
symb5C = ParamColor("color symbol 5", colorBlue);
symb6 = ParamStr("Symbol 6", "");
symb6S = ParamToggle("Show symbol 6?", "No|Yes", 0);
symb6C = ParamColor("color symbol 6", colorBlue);
symb7 = ParamStr("Symbol 7", "");
symb7S = ParamToggle("Show symbol 7?", "No|Yes", 0);
symb7C = ParamColor("color symbol 7", colorBlue);
symb8 = ParamStr("Symbol 8", "");
symb8S = ParamToggle("Show symbol 8?", "No|Yes", 0);
symb8C = ParamColor("color symbol 8", colorBlue);
symb9 = ParamStr("Symbol 9", "");
symb9S = ParamToggle("Show symbol 9?", "No|Yes", 0);
symb9C = ParamColor("color symbol 9", colorBlue);
symb0 = ParamStr("Symbol 0", "");
symb0S = ParamToggle("Show symbol 0?", "No|Yes", 0);
symb0C = ParamColor("color symbol 0", colorBlue);

symb10 = ParamStr("Symbol 10", "");
symb10C = ParamColor("color symbol 10", colorWhite);
symb11 = ParamStr("Symbol 11", "");
symb11C = ParamColor("color symbol 11", colorWhite);
symb12 = ParamStr("Symbol 12", "");
symb12C = ParamColor("color symbol 12", colorWhite);

Vol = ParamToggle("Volume weighted", "No|Yes", 0);
spread = ParamToggle("spread", "No|Yes", 0);


SetForeign("symb1");
ATRR1 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb2");
ATRR2 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb3 ");
ATRR3 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb4 ");
ATRR4 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb5 ");
ATRR5 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb6 ");
ATRR6 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb7 ");
ATRR7 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb8 ");
ATRR8 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb9 ");
ATRR9 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb0 ");
ATRR0 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb10 ");
ATRR10 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb11 ");
ATRR11 = ATR(15)/C*100*1.1;
RestorePriceArrays ();

SetForeign("symb12 ");
ATRR12 = ATR(15)/C*100*1.1;
RestorePriceArrays ();


s1 = Sum (ATRR1,200);
s2 = Sum (ATRR2,200);
s3 = Sum (ATRR3,200);
s4 = Sum (ATRR4,200);
s5 = Sum (ATRR5,200);
s6 = Sum (ATRR6,200);
s7 = Sum (ATRR7,200);
s8 = Sum (ATRR8,200);
s9 = Sum (ATRR9,200);
s0 = Sum (ATRR0,200);

s10 = Sum (ATRR10,200);
s11 = Sum (ATRR11,200);
s12 = Sum (ATRR12,200);



if(symb1S)
{    Plot(s1, symb1, symb1C);
     PlotText(symb1, BarCount, LastValue(s1), symb1C);}
if(symb2S)
{    Plot(s2, symb2, symb2C);
     PlotText(symb2, BarCount, LastValue(s2), symb2C);}
if(symb3S)
{    Plot(s3, symb3, symb3C);
     PlotText(symb3, BarCount, LastValue(s3), symb3C);}
if(symb4S)
{    Plot(s4, symb4, symb4C);
     PlotText(symb4, BarCount, LastValue(s4), symb4C);}
if(symb5S)
{    Plot(s5, symb5, symb5C);
     PlotText(symb5, BarCount, LastValue(s5), symb5C);}
if(symb6S)
{    Plot(s6, symb6, symb6C);
     PlotText(symb6, BarCount, LastValue(s6), symb6C);}
if(symb7S)
{    Plot(s7, symb7, symb7C);
     PlotText(symb7, BarCount, LastValue(s7), symb7C);}
if(symb8S)
{    Plot(s8, symb8, symb8C);
     PlotText(symb8, BarCount, LastValue(s8), symb8C);}
if(symb9S)
{    Plot(s9, symb9, symb9C);
     PlotText(symb9, BarCount, LastValue(s9), symb9C);}
if(symb0S)
{    Plot(s0, symb0, symb0C);
     PlotText(symb0, BarCount, LastValue(s0), symb0C);}
if(symb10 != "")
{    Plot(s10, symb10, symb10C);
     PlotText(symb10, BarCount, LastValue(s10), symb10C);}
if(symb11 != "")
{    Plot(s11, symb11, symb11C);
     PlotText(symb11, BarCount, LastValue(s11), symb11C);}
if(symb12 != "")
{    Plot(s12, symb12, symb12C);
     PlotText(symb12, BarCount, LastValue(s12), symb12C);}
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Апр 04, 2013 9:13 pm Ответить с цитатой Вернуться к началу

Конечно недосмотрел.
Вот тут
Код:
SetForeign("symb1");

кавычки зачем?

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



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

СообщениеДобавлено: Чт Апр 04, 2013 10:19 pm Ответить с цитатой Вернуться к началу

Спасибо, точно)) Пример из хелпера ввел в заблуждение...
Посмотреть профиль Отправить личное сообщение
Swell



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

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

Олег. А как в амиброкере обстоят дела с типами данных?
Как я понял, тип "number" включает в себя и целочисленные значения (integer), и дробные (real). Но тогда непонятно, какие они могут принимать максимальные значения.
Просто я заметил, что если число больше 9999, то начинает искажаться дробная часть. Возникает вопрос - может не стоит работать с дробными числами выше 9999? В мануале я не нашёл об этом никакой информации, кроме того, что есть такой тип данных "number". Хотя в описании любого языка указывается, какие типы данных в нём есть и какие они могут принимать значения (в каком диапазоне).
Нет ли у тебя какой-нибудь информации об этом?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Июн 23, 2013 12:23 am Ответить с цитатой Вернуться к началу

На сколько помню все ограничения в разрядности. 32 бита и все с этим связанное.

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



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

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

подскажите, пожалуйста, в чем ошибка в коде?

PeriodAPC=20;
SignalTop = abs(H - Ref(H, -PeriodAPC));
NoiseTop = Sum(abs(H Ref(H, -1)), PeriodAPC);


После проверки синтаксиса, курсор стоит в третьей строчке перед первым знаком минус, но после пробела ("-" в коде выделен таким способом) и выдается ошибка 32 "Синтаксическая ошибка. Возможно, пропущена точка с запятой в конце предыдущей строки" (Error 32. Syntax error, probably missing semicolon at the end of the previous line).

Полный текст сообщения об ошибке:
Ln: 3, Col: 22 : Error 32. Syntax error, unexpected $end. Is there semicolon missing ft the end of the previous line?
(перевод сообщения об ошибке:
строка 3, колонка 22 : Ошибка 32, неожиданный $end. Может быть пропущена точка с запятой в конце предыдущей строки?

В чем может быть ляп?

Заранее спасибо за ответ(ы).


Добавлено.

Занятно, если закомментировать строку с ошибкой, то при проверке синтаксиса появляется ошибка 32 в строке 4, но эта строка 4 почти полностью идентична строке 2 (только массив High заменен на массив Close):

PeriodAPC=20;
SignalTop = abs(H - Ref(H, -PeriodAPC));
//NoiseTop = Sum(abs(H – Ref(H, -1)), PeriodAPC);
SignalBot = abs(C Ref(C, - PeriodAPC));

Может у меня на компе что-то с синтаксическим анализатором AFL случилось? Например, по выходным он берет отгул и не работает Smile
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

У тебя в третьей строке кокой то не правильный минус.
Копирую твой код в AFL editor, проверяю. Ругается. Удаляю минус, пишу по новому. Все ОК
Так работает.
Код:

PeriodAPC = 20;
SignalTop = abs(H - Ref(H, -PeriodAPC));
NoiseTop = Sum(abs(H - Ref(H, -1)), PeriodAPC);

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



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

СообщениеДобавлено: Вс Июл 28, 2013 3:36 pm Ответить с цитатой Вернуться к началу

Спасибо, Олег.

Все перепробовал, но заменить символ - не догадался Smile
Видимо что-то скопировал с инета, - возможно, что там как раз какой-то левый знак минус и появился Sad

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen