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



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Вс Окт 28, 2012 6:34 am Ответить с цитатой Вернуться к началу

Доброго всем дня.

Допустим, имеем некий индикатор (см.картинку). Строится он по временному ряду Line в коде. Есть необходимость наложить на него стандартные отклонения, дабы отрабатывать пересечению индюком его отклонений.

У нас есть толковый код средневзвешенной цены, в котором отлично сделаны стандартные отклонения. Вот он:

Код:
qq = ParamList("отклонение", "std|ATR|2*ATR");
pp = Param("период ATR", 15, 5, 30, 1);
dd = ParamDate("Дата начала", "2012-01-10", 0);
tt = ParamTime("Время начала", "12:00:00", 0);

Bars = 1 + BarsSince(DateNum() == dd AND tt == TimeNum());
StartBar = ValueWhen(DateNum() == dd AND tt == TimeNum(), BarIndex());
TodayVolume = Sum(V, Bars);
Avgp=(C+O+L+H)/4;
IIf (BarIndex() >= StartBar, VWAP = Sum (Avgp * V, Bars )/TodayVolume, Null);
VWAP = IIf(VWAP > 0 , VWAP, Null);
Plot (VWAP,"VWAP",colorGreen, styleThick);


if(qq == "std")
   stde = sqrt( Sum((Avgp-Vwap)^2 ,Bars)/bars);
else if(qq == "ATR")
   stde = ATR(pp);
else
   stde = 2*ATR(pp);
   
Plot (stde+Vwap,"VWAP_std+1",colorGrey50, styleDashed);
Plot (Vwap-stde,"VWAP_std-1",colorGrey50, styleDashed);
Plot (Vwap+2*stde,"VWAP_std+2",colorGrey40, styleDashed);
Plot (Vwap-2*stde,"VWAP_std-2",colorGrey40, styleDashed);


Оснавная часть нам рассчитывает средневзвес и в нашей работе нам не нужна. Главная формула расчета стандартного отклонения: stde = sqrt( Sum((Avgp-Vwap)^2 ,Bars)/bars);

В данном случае Avgp заменяем на Line, поскольку по науке этот член есть n-ый элемент выборки. А заместо VWAP ставим MA (Line, bars), поскольку тут стоит среднее арифметическое выборки. Количество элементов выборки, как я понимаю - bars.

В итоге получаем:

Код:
qq = ParamList("отклонение", "std|ATR|2*ATR");
pp = Param("период ATR", 15, 5, 30, 1);
dd = ParamDate("Дата начала", "2012-01-10", 0);
tt = ParamTime("Время начала", "12:00:00", 0);

Bars = 1 + BarsSince(DateNum() == dd AND tt == TimeNum());
StartBar = ValueWhen(DateNum() == dd AND tt == TimeNum(), BarIndex());

stde = sqrt( Sum((Line-MA(Line, bars)^2 ,Bars)/bars);
   
Plot (stde+Vwap,"VWAP_std+1",colorGrey50, styleDashed);
Plot (Vwap-stde,"VWAP_std-1",colorGrey50, styleDashed);
Plot (Vwap+2*stde,"VWAP_std+2",colorGrey40, styleDashed);
Plot (Vwap-2*stde,"VWAP_std-2",colorGrey40, styleDashed);


Но ничего не строится. Вылезают непонятные ошибки.

В общем, вопрос стоит в том, как построить стандартные (среднеквадратичные отклонения) на линию "индюка"?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Окт 28, 2012 8:37 am Ответить с цитатой Вернуться к началу

Вот тут
Код:

Plot (stde+Vwap,"VWAP_std+1",colorGrey50, styleDashed);
 Plot (Vwap-stde,"VWAP_std-1",colorGrey50, styleDashed);
 Plot (Vwap+2*stde,"VWAP_std+2",colorGrey40, styleDashed);
 Plot (Vwap-2*stde,"VWAP_std-2",colorGrey40, styleDashed);

При выводе ты упорно используешь Vwap. А где выше он расчитывается?

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



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Вс Окт 28, 2012 8:42 am Ответить с цитатой Вернуться к началу

000 писал(а):
Вот тут
Код:

Plot (stde+Vwap,"VWAP_std+1",colorGrey50, styleDashed);
 Plot (Vwap-stde,"VWAP_std-1",colorGrey50, styleDashed);
 Plot (Vwap+2*stde,"VWAP_std+2",colorGrey40, styleDashed);
 Plot (Vwap-2*stde,"VWAP_std-2",colorGrey40, styleDashed);

При выводе ты упорно используешь Vwap. А где выше он расчитывается?


Да-да, я это ошибочно написал. Исправил. В целом, я сделал вывод отклонений для определенного периода расчета арифметического среднего (без использования параметра Bars и StartBar. Но хотелось бы иметь возможность брать период от определенной даты и чтобы дальше шло накоплением. Помоги, Олег.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Окт 28, 2012 9:19 am Ответить с цитатой Вернуться к началу

Не понял?
У тебя же там задается дата начала...

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



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Вс Окт 28, 2012 9:30 am Ответить с цитатой Вернуться к началу

000 писал(а):
Не понял?
У тебя же там задается дата начала...


Да не работает. Пришлось делать с определенным периодом расчета. А хочется, чтобы бралось с начала истории.
Посмотреть профиль Отправить личное сообщение
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Вс Окт 28, 2012 9:58 am Ответить с цитатой Вернуться к началу

000 писал(а):
Не понял?
У тебя же там задается дата начала...


Вот, навесил такой код на график. МА чертит, от который считаются отклонения, а самих отклонений нет.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Окт 28, 2012 11:51 pm Ответить с цитатой Вернуться к началу

В Ами так IIf использовать нельзя. Надо
Код:
StdMA = IIf(.....);

Я тебе в следующий раз когда буду отвечать длинным кодом нарочно его напишу подлиннее раза в 3 чем возможно и запощу скрином. Трахайся....

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



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Пн Окт 29, 2012 4:46 am Ответить с цитатой Вернуться к началу

000 писал(а):
В Ами так IIf использовать нельзя. Надо
Код:
StdMA = IIf(.....);

Я тебе в следующий раз когда буду отвечать длинным кодом нарочно его напишу подлиннее раза в 3 чем возможно и запощу скрином. Трахайся....


Виноват. Забылся.
Посмотреть профиль Отправить личное сообщение
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Пн Окт 29, 2012 6:34 am Ответить с цитатой Вернуться к началу

Вот исправил на следующий код:

Код:
SB = Foreign("SBRFSP", "Close");
VT = Foreign("SBRFPR", "Close");

qq = ParamList("отклонение", "std|ATR|2*ATR");
pp = Param("период ATR", 15, 5, 30, 1);
dd = ParamDate("Дата начала", "2012-09-04", 0);
tt = ParamTime("Время начала", "10:00:00", 0);

spred = SB - VT;
spred2 = SB/VT;

Bars = 1 + BarsSince(DateNum() == dd AND tt == TimeNum());
StartBar = ValueWhen(DateNum() == dd AND tt == TimeNum(), BarIndex());
StdMAbegin = IIf (BarIndex() >= StartBar, MA(spred2, Bars), Null);
StdMA = IIf(StdMAbegin > 0 , StdMAbegin, Null);

stde = sqrt( Sum((spred2-StdMA)^2 , Bars)/Bars);

Plot (StdMA,"StdMA",colorGreen, styleDashed);
Plot (stde+StdMA,"VWAP_std+1",colorGrey50, styleDashed);
Plot (StdMA-stde,"VWAP_std-1",colorGrey50, styleDashed);
Plot (StdMA+2*stde,"VWAP_std+2",colorGrey40, styleDashed);
Plot (StdMA-2*stde,"VWAP_std-2",colorGrey40, styleDashed);

Plot (spred2, "spred2", colorBlack);


Результат остался прежним - саму среднеарифметическую считает и выводит на график. Отклонения выводить отказывается. При этом, если заменить в расчете отклонений параметр Bars, который считает свечи, на абсолютное значение, то выводит отклонения.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Окт 29, 2012 8:53 am Ответить с цитатой Вернуться к началу

Массив Bars в этой строке
Код:
Bars = 1 + BarsSince(DateNum() == dd AND tt == TimeNum());

до начала расчета получается не определен.
В результате тут
Код:
stde = sqrt( Sum((spred2-StdMA)^2 , Bars)/Bars);

глючит функция Sum...

В общем исправь расчет Bars вот так
Код:
Bars = Nz(1 + BarsSince(DateNum() == dd AND TimeNum() == tt));

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



Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск

СообщениеДобавлено: Пн Окт 29, 2012 1:42 pm Ответить с цитатой Вернуться к началу

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

Нарисовало. Правда сделки проводить не хочет, но в возможно где-то в логике ошибки. Буду смотреть.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen