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



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

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

добрый день!
стоит следующая задача
1.посчитать вольюм на премаркете
2.посчитать вольюм на постмаркете вчера
3. вычислить дыру между закрытием бара в 15.59 вчера с открытием бара сегодня в 09.34
при условии что работаем внутри дня и в настройках базы открытие указано с учетом премаркета и закрытие с учетом постмаркета

Вот с тем как считать вольюм на премаркете (да и вообще на заданном интервале ) я разобрался (добрые люди помогли). Теперь осталось понять как дать знать АМИ что мне нужно данные на закрытие 15.59 но за вчера и вольюм за вчера
спасибо!
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Апр 27, 2009 12:22 am Ответить с цитатой Вернуться к началу

Цитата:

3. вычислить дыру между закрытием бара в 15.59 вчера с открытием бара сегодня в 09.34
А в чем сложность?
Код:

C1559 = ValueWhen(TimeNum() == 155900, C);
O0934 = ValueWhen(TimeNum() == 093400, O);

Ch = C1559 - O0934;

Цитата:

Вот с тем как считать вольюм на премаркете (да и вообще на заданном интервале ) я разобрался (добрые люди помогли). Теперь осталось понять как дать знать АМИ что мне нужно данные на закрытие 15.59 но за вчера и вольюм за вчера
спасибо!

Было бы проще, если бы написали как считаете. Потому, что непонятно в чем сложность.

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



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

СообщениеДобавлено: Пн Апр 27, 2009 4:48 pm Ответить с цитатой Вернуться к началу

Вот какие идеи:
1.Отловить дни, в которых объем премаркета и\или постмаркета был "ненормальным" (или в качестве % от среднедневного или отличного в разы от внутредневного) и посмотреть что в эти дни происходило интересного
2.отловить эти же дни, но которые сопровождались гепом на открытии.

Вот какие сложности:
мне никак не удается его заставить выводить
результаты в следующем виде для гепа:
размер дырки | вольюм на премаркете сегодня | вольюм на постмаркете вчера

Вот код
Код:

Vop = IIf( TimeNum() > 080000 AND TimeNum() <= 092400,V,0);
prem_end = IIf( Vop==0 AND Ref(Vop,-1)>0, BarIndex(),0);
prem_start = IIf( Vop>0 AND Ref(Vop,-1)==0, BarIndex(),0);
Vl_sum= IIf(prem_end,Sum(V,BarsSince(prem_start>0)),0);

Vcl = IIf( TimeNum() > 160000 AND TimeNum() <= 200000,V,0);
post_end = IIf( Vcl==0 AND Ref(Vcl,-1)>0, BarIndex(),0);
post_start = IIf( Vcl>0 AND Ref(Vcl,-1)==0, BarIndex(),0);
Vc_sum= IIf(post_end,Sum(V,BarsSince(post_start>0)),0);

TimeFrameSet(inDaily); // switch to 5 minute frame
Vo50 = MA(V,50);
Vo1 = V;
TimeFrameRestore();

C1559 = ValueWhen(TimeNum() == 155900, C);
O0934 = ValueWhen(TimeNum() == 093400, O);
Ch = (C1559 - O0934)/C1559;

Plot(Vl_sum,"Volprem",colorRed, styleLine);
Plot(Vc_sum,"Volpost",colorYellow, styleLine);
//Plot( TimeFrameExpand(Vo50, inDaily), "13 bar moving average from 5 min bars", colorRed );
Filter=Ch*100>1;//Vc_sum OR Vl_sum;
AddColumn(Ch*100,"Ch*100");
AddColumn(Vl_sum,"Volprem");
AddColumn(Vc_sum,"Volpost");
AddColumn( TimeFrameExpand(Vo50, inDaily),"Vo50");
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Апр 27, 2009 10:33 pm Ответить с цитатой Вернуться к началу

Попробуй так.
Код:

C_end = ValueWhen(TimeNum() == 155900, C);
O_begin = ValueWhen(TimeNum() == 093400, O);
Ch = IIf(TimeNum() >= 155900 OR TimeNum() < 093400, Null, (C_end - O_begin)/C_end);

Vop = IIf( TimeNum() > 080000 AND TimeNum() <= 092400, V, 0);
prem_start = TimeNum() == 080000;
prem_end = TimeNum() == 092400;
Vl_sum = ValueWhen(prem_end, Sum(V, BarsSince(prem_start)));

Vcl = IIf( TimeNum() > 160000 AND TimeNum() <= 200000, V, 0);
post_start = TimeNum() == 160000;
post_end = TimeNum() == 200000;
Vc_sum= ValueWhen(post_end, Sum(V, BarsSince(post_start)));

Vo50 = TimeFrameGetPrice("V", inDaily, -1);


Filter = abs(Ch) * 100 > 1; // абс берется т.к. геп может быть вверх и вниз
AddColumn(Ch*100, "Ch*100");
AddColumn(Vl_sum, "Volprem");
AddColumn(Vc_sum, "Volpost");
AddColumn( Vo50, "Vo50");

Только очень тщательно проверь время в коде, оно в точности должно соответствовать временам баров на графике.

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



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

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

Добрый день!
Спасибо за помощь. Действительно, так выглядит лучше. Я только дописал немного кода для вывода результатов объемов на график
К сожалению ваш вариант
Vl_sum = ValueWhen(prem_end, Sum(V, BarsSince(prem_start)));
не позволяет строить график, поэтому я добавил
Vl_sum2= IIf(prem_end,Sum(V,BarsSince(prem_start>0)),0);

Кроме того, расчет вольюма на дневках так же чуток переделал - иначе средняя не получалась
Итоговый код ниже.
Но всплыла очень странная и серьезная засада. Я тестировал на AAPL - у него всегда большой премаркет и пост маркет. Так вот, если первый бар (5минут) рисуется в 0804 - все считается правильно. Если же первый бар датирован 0803, то сумма объема считается не верно и как правило в разы превышает дневной объем. Аналогичная хрень с постмаркетом - если происходит сдвиг по времени - выдаем фигню

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


Код:

C_end = ValueWhen(TimeNum() == 155900, C);
O_begin = ValueWhen(TimeNum() == 093400, O);
Ch = IIf(TimeNum() >= 155900 OR TimeNum() < 093400, Null, (C_end - O_begin)/C_end);

Vop = IIf( TimeNum() > 080000 AND TimeNum() <= 092900, V, 0);
prem_start = TimeNum() == 080400;
prem_end = TimeNum() == 092900;
Vl_sum = ValueWhen(prem_end, Sum(V, BarsSince(prem_start)));
Vl_sum2= IIf(prem_end,Sum(V,BarsSince(prem_start>0)),0);

Vcl = IIf( TimeNum() > 160000 AND TimeNum() <= 195900, V, 0);
post_start = TimeNum() == 160400;
post_end = TimeNum() == 195900;
Vc_sum= ValueWhen(post_end, Sum(V, BarsSince(post_start)));
Vc_sum2= IIf(post_end,Sum(V,BarsSince(post_start>0)),0);

TimeFrameSet(inDaily); // switch to 5 minute frame
Vo50 = Ref(MA(V,50),-1);
Vo = Ref(V,-1);
TimeFrameRestore();

Filter = TimeNum() == 093400 AND abs(Ch) * 100 > 1; // абс берется т.к. геп может быть вверх и вниз
AddColumn(Ch*100, "Ch*100",1.2);
AddColumn(Vl_sum, "Volprem",1.0);
AddColumn(Vc_sum, "Volpost",1.0);
AddColumn( TimeFrameExpand(Vo50, inDaily),"Vo50",1.0);
AddColumn( TimeFrameExpand(Vo, inDaily),"Vo",1.0);

Plot(Vl_sum2,"Volprem",colorRed, styleLine);
Plot(Vc_sum2,"Volpost",colorYellow, styleLine);
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Май 01, 2009 12:13 am Ответить с цитатой Вернуться к началу

Есть у меня одна мысль, но точно не уверен. Скинь плиз данные на которых такой косяк и напиши конкретно даты. Посмотрю.

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



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

СообщениеДобавлено: Пт Май 01, 2009 12:20 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Есть у меня одна мысль, но точно не уверен. Скинь плиз данные на которых такой косяк и напиши конкретно даты. Посмотрю.


настройки базы - открытие в 08-00 закрытие в 20-00
Даты вы сами сможете увидеть в эксплорейшене, но в качестве примера
преопен косяки
3/27/2009
1/2/2009
2/6/2009
3/26/2009

постмаркет
2/26/2009
1/14/2009
3/25/2009

эксплорейшн делал на 5 и 1 минутках - один хрне

а вот прицепить файл не получается - он зазипованный чуть выше 1 мб получается, а рар форум не понимает Sad
Пришлось тут положить
http://forex.kbpauk.ru/showflat.php?Cat=0&Number=256024&page=0&vc=#Post256024

Спасибо за помощь!

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


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

СообщениеДобавлено: Сб Май 02, 2009 12:10 am Ответить с цитатой Вернуться к началу

Ага. Даже тестить не пришлось и так все ясно (надеюсь Smile )
Смотрю преопен 27 марта. По коду начало в 8 часов 4 минуты. А такой свечки там нет совсем. Поэтому он берет ближайшую свечку с этим временем, а она была только 24 го. Вот он и складывает все эти дни. Придется изменить код таким макаром
Код:
prem_start = TimeNum() >= 080400 AND Ref(TimeNum(), -1) < 080400;

и так везде.

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



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

СообщениеДобавлено: Сб Май 02, 2009 1:51 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ага. Даже тестить не пришлось и так все ясно (надеюсь Smile )
Смотрю преопен 27 марта. По коду начало в 8 часов 4 минуты. А такой свечки там нет совсем. Поэтому он берет ближайшую свечку с этим временем, а она была только 24 го. Вот он и складывает все эти дни. Придется изменить код таким макаром
Код:
prem_start = TimeNum() >= 080400 AND Ref(TimeNum(), -1) < 080400;

и так везде.


К сожалению, это не помогает 100%
дело в том, что фактическое открытие в каждой акции свое. Эппл как очень леквидный открывается 08-00
а вот Agilent Tec(A) может открыться и 8-10 и 09-00
аналогично по закрытию - что-то закрылось в 1959, а что-то последней сделкой в 16-15
И Ами сносит башку мгновенно Sad
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Май 02, 2009 8:23 pm Ответить с цитатой Вернуться к началу

Давай тогда сделаем
начало премаркета - первая сделка дня
Код:
prem_start = Day() != Ref(Day(), -1);

конец премаркета
Код:
prem_end = TimeNum() >= 092900 AND (Ref(TimeNum(), -1) < 092900 OR Day() != Ref(Day(), -1));

Начало постмаркета
Код:
post_start = TimeNum() >= 160400 AND Ref(TimeNum(), -1)  < 160400;

Конец постмаркета
последняя сделка дня
Код:
post_end = Day() != Ref(Day(), 1);

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



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

СообщениеДобавлено: Сб Май 02, 2009 11:14 pm Ответить с цитатой Вернуться к началу

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen