Автор |
Сообщение |
IzBu
Зарегистрирован: 28.06.2016
Сообщения: 83
|
Помогите визуализировать горизонтальные объемы.
Вообщем сделал базу на сервере Firebird. Сделал вывод туда из Квика по
ODBC. С помощью ODBCA AFL удалось подключится и получать данные, а выводить их на график как?
код AFL
Код: |
SetBarsRequired(sbrAll,sbrAll);
odbcOpenDatabase("ODBC;DSN=remserver;Driver=Firebird/InterBase(r) driver;Dbname=D:/T_QWIK.FDB;CHARSET=WIN1251;PWD=masterkey;UID=SYSDBA;Client=C:/Program Files/Firebird/Firebird_2_5/WOW64/fbclient.dll");
Graph0=odbcGetArraySQL("Select DPRICE, sum(IQUANTITY) From TABLE_DEN Where SDATE Between '27.10.2016' AND '27.10.2016' Group by DPRICE, SOPERATION HAVING SOPERATION='Buy';");
Plot(Graph0, "", colorBlack, styleCandle);
|
код SQL
http://savepic.ru/11986610.png
Код получает две колонки цена и количество покупок. |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В таблице должно быть 2 столбца.
1 столбец данные
2 столбец дата и время.
Судя по скрину у тебя даты/времени нет. Надо чтобы были, иначе этот массив никак нельзя привязать. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
IzBu
Зарегистрирован: 28.06.2016
Сообщения: 83
|
Вот Дата и время.
Код: |
SetBarsRequired(sbrAll,sbrAll);
odbcOpenDatabase("ODBC;DSN=remserver;Driver=Firebird/InterBase(r) driver;Dbname=D:/T_QWIK.FDB;CHARSET=WIN1251;PWD=masterkey;UID=SYSDBA;Client=C:/Program Files/Firebird/Firebird_2_5/WOW64/fbclient.dll");
Graph0=odbcGetArraySQL("Select SDATE, STIME, DPRICE, sum(IQUANTITY) From TABLE_DEN Where SDATE Between '27.10.2016' AND '27.10.2016' Group by SDATE, STIME, DPRICE, SOPERATION HAVING SOPERATION='Buy';");
|
http://savepic.ru/11957966.png |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не. Должно быть только 2 колонки. Первая колонка необходимые данные и вторая Дата/Время. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
IzBu
Зарегистрирован: 28.06.2016
Сообщения: 83
|
Вот две колонки Время и Количество.
http://savepic.ru/11960004.png
Код: |
SetBarsRequired(sbrAll,sbrAll);
odbcOpenDatabase("ODBC;DSN=remserver;Driver=Firebird/InterBase(r) driver;Dbname=D:/T_QWIK.FDB;CHARSET=WIN1251;PWD=masterkey;UID=SYSDBA;Client=C:/Program Files/Firebird/Firebird_2_5/WOW64/fbclient.dll");
Graph0=odbcGetArraySQL("Select STIME, sum(IQUANTITY) From TABLE_DEN Where SDATE Between '27.10.2016' AND '27.10.2016' Group by STIME, SOPERATION HAVING SOPERATION='Buy';");
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
IzBu
Зарегистрирован: 28.06.2016
Сообщения: 83
|
А вот так Количество и время.
Код: |
SetBarsRequired(sbrAll,sbrAll);
odbcOpenDatabase("ODBC;DSN=remserver;Driver=Firebird/InterBase(r) driver;Dbname=D:/T_QWIK.FDB;CHARSET=WIN1251;PWD=masterkey;UID=SYSDBA;Client=C:/Program Files/Firebird/Firebird_2_5/WOW64/fbclient.dll");
Graph0=odbcGetArraySQL("Select sum(IQUANTITY), STIME From TABLE_DEN Where SDATE Between '27.10.2016' AND '27.10.2016' Group by STIME, SOPERATION HAVING SOPERATION='Buy';");
|
http://savepic.ru/11991771.png |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я тебе не совсем правильно написал.
В описании функции сказано
"Оператор должен возвращать набор записей с двумя столбцами. Первый столбец должны быть сами данные, а второй столбец должен быть столбец даты и времени. Набор записей должен быть отсортирован по второму столбцу (дата/время) в порядке возрастания."
т.е. в таблице не обязательно должно быть 2 столбца. SQL запрос должен передать в функцию 2столбца первый данные второй дата/время. И обязательно должно быть отсортировано по дата/время в порядке возрастания.
Ты в SQL запросах шаришь? Я полный 0. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
IzBu
Зарегистрирован: 28.06.2016
Сообщения: 83
|
Я тока учусь SQL около месяца простые команды понимаю.
Последний код как раз первый количество потом Время по возастающей
как сделать сделать профиль рынка(горизонтальные обьемы напротив цены), гистрограмму? |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так чтоли?
В Ами есть такой встроеный индикатор
Volume At Price Multi
Код: |
segments = IIf( Interval() < inDaily, Day(), Month() );
segments = segments != Ref( segments , -1 );
PlotVAPOverlayA( segments , Param("Lines", 300, 100, 1000, 1 ), Param("Width", 80, 1, 100, 1 ), ParamColor("Color", colorGold ), ParamToggle("Side", "Left|Right" ) | 2 * ParamToggle("Style", "Fill|Lines", 0) | 4*ParamToggle("Z-order", "On top|Behind", 1 ) );
Plot(segments, "", colorLightGrey, styleHistogram | styleOwnScale );
|
Или
http://www.amisite.ru/afl/ind/0009.php |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
IzBu
Зарегистрирован: 28.06.2016
Сообщения: 83
|
Вот сделал мин максимум и среднюю цену тащит из базы
Код: |
_SECTION_BEGIN("Firebird");
odbcOpenDatabase("ODBC;DSN=remserver;Driver=Firebird/InterBase(r) driver;Dbname=D:/T_QWIK.FDB;CHARSET=WIN1251;PWD=masterkey;UID=SYSDBA;Client=C:/Program Files/Firebird/Firebird_2_5/WOW64/fbclient.dll");
sMax=odbcGetValueSQL("Select max(dprice) from TABLE_Den Where SDATE Between '27.10.2016'AND '27.10.2016';");
sMin=odbcGetValueSQL("Select min(dprice) from TABLE_Den Where SDATE Between '27.10.2016'AND '27.10.2016';");
sAvg=odbcGetValueSQL("Select avg(dprice) from TABLE_Den Where SDATE Between '27.10.2016'AND '27.10.2016';");
Plot(sMax,"", colorRed);
Plot(sMin,"", colorBlue);
Plot(sAvg,"", colorBlack);
_SECTION_END();
|
http://savepic.ru/11966186.png |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
IzBu
Зарегистрирован: 28.06.2016
Сообщения: 83
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
IzBu писал(а): |
еще бы замутить делту (покупки минус продажи) |
Если сможешь закинуть данные о направлении в базу, то почему нет? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
IzBu
Зарегистрирован: 28.06.2016
Сообщения: 83
|
Можно фильтровать в Sql командой HAVING SOPERATION='Buy'; или Sell |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
2 варианта. Либо у тебя в ами база тиковая. Тогда передаешь в Ами массив 1, -1 в зависимости от направления сделки. Перемножаешь этот массив и объем и в общем все. Переключаешься на другой фрейм и смотришь дельту.
Если в Ами база не тиковая, то в базе необходимо получить тиковую дельту и потом в базе обработать чтобы получить нужный фрейм. Потом передать в Ами. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
trashfx
Зарегистрирован: 27.06.2015
Сообщения: 90
|
000 писал(а): |
Так чтоли?
В Ами есть такой встроеный индикатор
Volume At Price Multi
Код: |
segments = IIf( Interval() < inDaily, Day(), Month() );
segments = segments != Ref( segments , -1 );
PlotVAPOverlayA( segments , Param("Lines", 300, 100, 1000, 1 ), Param("Width", 80, 1, 100, 1 ), ParamColor("Color", colorGold ), ParamToggle("Side", "Left|Right" ) | 2 * ParamToggle("Style", "Fill|Lines", 0) | 4*ParamToggle("Z-order", "On top|Behind", 1 ) );
Plot(segments, "", colorLightGrey, styleHistogram | styleOwnScale );
|
Или
http://www.amisite.ru/afl/ind/0009.php |
What you are referring to is old technology (PlotVAPOverlayA is old limited technology).
You guys have to watch AmiBroker development closely because AB development department is not sleeping but AmiBroker is constantly evolving every week/month/year.
In order to get volume at price there has been implemented a new function called PriceVolDistribution() (6.11)
That function is of type MATRIX. You can store any data (making sense) to that matrix. Also you can now access that data. And of yourse you can output to Explorer via Addrow.
Example outputs (visible chart area profile, profile of selected chart range, intra-day profile, intrabar profile -> Footprint, etc)
http://amibrokerforum.proboards.com/thread/100/achievable-using-tiny-bit-imagination?page=2&scrollTo=727
http://amibrokerforum.proboards.com/thread/159/volume-price-buying-selling-volumes?page=2&scrollTo=730
http://amibrokerforum.proboards.com/thread/159/volume-price-buying-selling-volumes?page=3 |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
|