Автор |
Сообщение |
Azazello
Зарегистрирован: 06.07.2011
Сообщения: 20
|
В QUIK в таблице всех сделок различаются сделки покупки и продажи, по каждой проходит свой объём. Как написать в Амиброкере индикатор, который для одной свечи показывал бы отдельно объём покупки и отдельно - объём продаж? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
А формула для этого индюка известна?
И база для символа наверняка тиковой должна быть? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
С формулой все просто. Вопрос в другом. Придумай как и куда запихать в Ами эти данные.
Куда в Ами есть. Если бы квиковцы не поленились с плагином, то никаких проблем. Я такую штуку делал (только не с Квиком). |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Снарколов
Зарегистрирован: 18.01.2012
Сообщения: 10
|
И все-таки, как это технически сделать? Допустим, есть тиковая база. Как правильно написать индикатор, чтобы на к примеру часовках получить объем по сделок совершенных по аск (бид)? |
_________________ xz |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А как имея обычную тиковую базу узнать по биду или по офферу был тик? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Снарколов
Зарегистрирован: 18.01.2012
Сообщения: 10
|
У меня в базе ласт, бид и аск. База ES с БигМайка. Бид и аск загнал в aux1 aux2. В общем-то в Ами я пока полный ноль, читать умею, говорить нет.
ЗЫ если интересует, базой могу поделиться. |
_________________ xz |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем так.
Этих данных в принципе достаточно, для построения подобного графика, но в таком виде как они сейчас это к сожалению не возможно.
Дело вот в чем.
Для построения подобного графика надо
Смотрим чему равен ласт. Если биду, то объем этого тика записываем в продажу, а если офферу, то в покупку.
Но, когда мы с тиков переключимся на старший фрейм, то оперировать с тиками уже не сможем.
Для построения такого графика надо изначально, на тиках разделить объемы на продажу и на покупку. Тогда при переключении на старший фрейм их можно будет сложить.
При переключении на старший фрейм Ами по разному оперирует полями в данных.
Из поля Close берет последнее значение интервала. Точно так же и с полями Aux1 и Aux2
Из поля Open берет первое значение интервала
Из поля High берет максимальное значение
Из поля Low берет минимальное значение.
В поле Volume складывает все значения.
Нам надо именно сложить.
Поэтому нам подходит использование только поля Vol.
В общем требуется подготовить данные специально для вывода нужного графика.
Проще всего создать дополнительный символ в который в поле Vol записать только объемы на покупку.
Это делается функцией AddToComposite()
Потом переключаемся на нужный фрейм читая это поле функцией Foreign()
Ну а объем на продажу просто получить вычтя из общего объема объем на покупку. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Снарколов
Зарегистрирован: 18.01.2012
Сообщения: 10
|
Спасибо, Олег!
Завтра попробую что-нибудь соорудить.
Конечно, жалко, что из старшего таймфрейма нельзя обратиться к младшему. |
_________________ xz
Последний раз редактировалось: Снарколов (Пт Мар 29, 2013 9:45 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
Снарколов
Зарегистрирован: 18.01.2012
Сообщения: 10
|
Продолжу.
Пишу проверочный код
Код: |
AddToComposite(V, "~V", "Volume"); |
загоняю в АА, тест на тиках, текущий символ и...
получаю какую-то хрень, не соответствующую исходнику.
Начинаю искать и обнаруживаю, что композит считается для периода 1 секунда. В чем может быть трабл?
V 5.6.3 |
_________________ xz |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Только что прогнал на тиках вот такой код
Код: |
AddToComposite(V, "test", "V"); |
Все ОК
Может в настройках АА не поставил тики? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Снарколов
Зарегистрирован: 18.01.2012
Сообщения: 10
|
Вот именно, что поставил! Пробовал даже в тулс-пропертис-интрадей 1-тик поставить и его выбирать. На времени меньше секунд нет реакции. От секунд и выше создает правильно.
Есть еще какие-нибудь настройки, влияющие на анализатор?
Или глюк версии?
ЗЫ
Можно конечно пойти извращенским путем и разделить объемы внешним скриптом. Но это имхо стратегически неверный метод.
PPS
Если внутри секунды несколько тиков, АА в композите их объединяет. Как от этой заразы избавиться пока не знаю. Искусственные миллисекунды не помогли.
PPPS
Продолжаем эксперименты
Беру тестовые данные:
Код: |
130210 15:33:41:001 1476.75 1
130210 15:33:41:002 1476.50 2
130210 15:33:41:003 1476.75 2
130210 15:33:41:004 1476.75 3
130210 15:33:42:005 1476.75 2
130210 15:33:42:006 1476.75 6
130210 15:33:42:007 1476.75 1
130210 15:33:42:008 1476.75 2
130210 15:33:43:009 1477.00 2
130210 15:33:43:010 1476.75 5 |
Загоняю в ами
строю от них композит по формуле
Код: |
AddToComposite(C,"test","O");
AddToComposite(C,"test","H");
AddToComposite(C,"test","L");
AddToComposite(C,"test","C");
AddToComposite(V,"test","V"); |
Так вот, эта зараза подгоняет всё под секунды, причем
суммирует не только волюм, но и OHLC.
В результате получаю три бара:
1) O=H=L=C=5906.75, V=8;
2) O=H=L=C=5907.00, V=11;
3) O=H=L=C=2953.75, V=7.
|
_________________ xz |
|
Посмотреть профиль Отправить личное сообщение |
|
MrDzenLi
Зарегистрирован: 20.04.2015
Сообщения: 383
Откуда: VRN
|
spitfire писал(а): |
А формула для этого индюка известна?
И база для символа наверняка тиковой должна быть? |
Код: |
_SECTION_BEGIN("Volume BU");
SetBarsRequired(sbrAll,sbrAll);
// BUYING VOLUME AND SELLING VOLUME //
BV = IIf( (H==L), 0, V*(C-L)/(H-L) );
SV = IIf( (H==L), 0, V*(H-C)/(H-L) );
PlotOHLC(SV,SV,0,0,"SellVolume",colorRed,styleCandle|styleNoTitle|styleNoLabel );
PlotOHLC(SV,BV+SV,SV,BV+SV,"BuyVolume",colorbrightgreen ,styleCandle|styleNoTitle|styleNoLabel );
Va = MA(V,30);
PlotOHLC( Va, Va, 0, 0, "", ColorBlend( colorWhite , GetChartBkColor(), 0.4 ), styleNoLabel | styleCloud | styleNoRescale, Null, Null, Null, -1 );
Plot(Va,"Average Volume",colorRose,styleNoLine|styleNoLabel );
VI = V/Va;
Title = "SellVolume:"+WriteVal(SV,5.0)+" "+"BuyVolume:"+WriteVal(BV,5.0)+" "+"VolumeIndex:"+WriteVal(VI,1.2)+" "+
"BuyVolume:"+WriteVal(100*BV/(BV+SV),2.0)+"%"+" "+"SellVolume:"+WriteVal(100*SV/(BV+SV),2.0)+"%";
_SECTION_END(); |
как сделать горизонтальную линию не знаю... |
_________________ Нам не дано знать всего. |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
|