Блог им. VladT

Кнопка на графике в Amibroker

Всем добрый день.
Давно мне хотелось сделать такую кнопку на графике в Amibroker, что бы нажать и отправить заявки в квик. Но хотелось не просто жать по условному прямоугольнику, а по настоящей живой кнопке как в Windows, чтобы откликалась… Поиск в интернете не дал результатов, кроме платных, поэтому решив переломить жадных робототорговцев, я произвел на свет свой собственный код, коим с удовольствием делюсь с вами.
Комментариев по каждой строчке я не стал писать, потому что тем кому интересно программирование в Ami, разобраться не составит труда. Тем более что большинство строчек связано с рисованием на низком уровне.

Кнопка в покое:
Кнопка на графике в Amibroker
Кнопка в нажатом состоянии:
Кнопка на графике в Amibroker
Мелочь, а приятная мелочь.

Код:
 
GfxSetBkMode(1);
RequestTimedRefresh( 1 );
EnableTextOutput(False);

//Значения по умолчанию

Def_LeftX = 10; //X — левый угол кнопки
Def_LeftY = 20;  // Y- левый угол кнопки
  Def_btnWidth = 120;  //Ширина кнопки
Def_btnHeight = 24;  //Высота кнопки
Def_btnFontSize = 12;
Def_btnBuyColor = colorGreen;
Def_btnBuyTextColor = colorBlack;

//Пользовательские параметры

LeftX = Param(«Left X»,Def_LeftX,10,1000,1);
LeftY = Param(«Left Y»,Def_LeftY,20,1000,1);
btnWidth = Param(«BTN Width»,Def_btnWidth,10,300,1);
btnHeight = Param(«BTN Height»,Def_btnHeight,15,300,1);
btnFontSize = Param(«Font Size»,Def_btnFontSize,8,20,1);
btnBuyColor = ParamColor(«Buy BTN color»,Def_btnBuyColor);
btnBuyTextColor = ParamColor(«Buy BTN text color»,Def_btnBuyTextColor);

function DrawButton(X1,Y1,btnColor,btnText,btnTextColor)
{

//Определяем текущие координаты курсора
X = GetCursorXPosition(1);
Y = GetCursorYPosition(1);

//Если курсор над кнопкой и произведен клик кнопка вжимается
if( X > X1 AND X < X1+btnWidth  AND Y > Y1 AND Y < Y1+btnHeight  AND GetCursorMouseButtons() & 10 )  
{
GfxSelectPen( ColorRGB(128,128,128), 1 );
GfxMoveTo( X1+1, Y1+btnHeight -1 );
GfxLineTo( X1+1, Y1+1);
GfxLineTo( X1+btnWidth-1, Y1+1 );
GfxSelectPen( ColorRGB(212,208,200), 1 );
GfxMoveTo( X1+btnWidth-1, Y1+1  );
GfxLineTo( X1+btnWidth-1, Y1+btnHeight );
GfxLineTo( X1, Y1+btnHeight  );
GfxSelectPen( ColorRGB(255,255,255), 1 );
GfxMoveTo( X1,Y1+btnHeight  +1  );
GfxLineTo( X1+btnWidth, Y1+btnHeight +1 );
GfxLineTo( X1+btnWidth, Y1-1);
GfxSelectPen( btnColor, 0 );
GfxSelectSolidBrush( btnColor);
GfxRectangle( X1+2, Y1+2, X1+btnWidth-1, Y1+btnHeight );

 GfxSelectFont(«Arial Cyr», btnFontSize, 700);  
GfxSetTextColor(btnTextColor);  
GfxTextOut(btnText, LeftX +7, Y1+btnHeight/2 — btnFontSize/2 );  

//возвращаем значение функции = 1 для перехвата события
result = 1;  
}

//Состояние покоя кнопки
else  
{
GfxSelectPen( ColorRGB(255,255,255), 1 );
GfxMoveTo( X1, Y1+btnHeight );
GfxLineTo( X1, Y1);
GfxLineTo( X1+btnWidth, Y1 );
GfxSelectPen( ColorRGB(212,208,200), 1 );
GfxMoveTo( X1+1, Y1+btnHeight -1 );
GfxLineTo( X1+1, Y1+1);
GfxLineTo( X1+btnWidth-1, Y1+1 );
GfxSelectPen( ColorRGB(128,128,128), 1 );
GfxMoveTo( X1+btnWidth-1, Y1+1 );
GfxLineTo( X1+btnWidth-1, Y1+btnHeight );
GfxLineTo( X1, Y1+btnHeight );
GfxSelectPen( btnColor, 0 );
GfxSelectSolidBrush( btnColor);
GfxRectangle( X1+2, Y1+2, X1+btnWidth-1, Y1+btnHeight );
 GfxSelectFont(«Arial Cyr», btnFontSize, 700);  
GfxSetTextColor(btnTextColor);  
GfxTextOut(btnText, LeftX + 5, Y1+btnHeight/2-btnFontSize/2-2);  
result = 0;  
}  
return result;
}

//Вызов функции отрисовки кнопки для примера как работает
if (DrawButton(LeftX ,LeftY,btnBuyColor,«Нажми меня»,btnBuyTextColor) & 1)
{  
//здесь может быть Ваш любой код события, которое вызывается кнопкой
PopupWindow(«Работает!», «Кнопка в Ami»);
}

Вот такой результат должен быть при нажатии кнопки: появится всплывающее окно:
Кнопка на графике в Amibroker
556 | ★11
2 комментария
так можно ж просто сделать отправку заявок по сигналам без нажатия кнопок
про кнопку и многое другое можно найти на amisite.ru
по крайней мере года полтора 2 назад вроде видел про кнопку
avatar
Andrey, можно и по сигналам, это смотря для каких целей, я вручную сигналы выполняю, так как слишком большой объем — приходится реверс делать по частям.
На амисайте кнопка без анимации.

Читайте на SMART-LAB:
🗓️ Календарь конференций SOFL
Друзья, мы всегда открыты к диалогу и не упускаем возможности пообщаться с инвест-сообществом. Сегодня делимся расписанием ближайших мероприятий с...
Нефтяные доходы России в марте почти удвоились
По данным Международного энергетического агентства (МЭА), Россия нарастила зарубежные поставки нефти и нефтепродуктов практически вдвое, до $19...
Фото
Можно ли без прогнозов опередить рынок? Взгляд Morning Star
Почему успешному инвестору не нужны прогнозы? Последние годы прекрасно показали, что рынки никогда не стоят на месте. Геополитика менялась в...
Фото
Основные инвест идеи с выступления Mozgovik в Калининграде + презентации с выступления
Доброго дня! В субботу мы ездили в Калининград, выступали перед годовыми подписчиками, обсуждали стратегию и идеи на рынке акций. Спасибо всем, кто...

теги блога Владимир Терентьев

....все тэги



UPDONW
Новый дизайн