Блог им. 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
554 | ★11
2 комментария
так можно ж просто сделать отправку заявок по сигналам без нажатия кнопок
про кнопку и многое другое можно найти на amisite.ru
по крайней мере года полтора 2 назад вроде видел про кнопку
avatar
Andrey, можно и по сигналам, это смотря для каких целей, я вручную сигналы выполняю, так как слишком большой объем — приходится реверс делать по частям.
На амисайте кнопка без анимации.

Читайте на SMART-LAB:
Фото
BRENT: рынок ищет точку опоры после шоковой дестабилизации
Нефть взлетела до многолетних максимумов, затем резко скорректировалась, теряя большую часть прироста, испытав при этом экстремальную...
Пять акций на весну 2026 года
Павел Гаврилов Российский рынок начал 2026 год в плюсе: Индекс МосБиржи прибавил почти 4%. Главные драйверы роста прежние: снижение ставки,...
Фото
📃 Как изменилось «лицо» российского рынка за 10 лет
Пока инвесторы пристально вглядываются в новости о нефти, мы решили посмотреть, насколько сильно от неё зависит индекс Мосбиржи, и почему он уже...
Фото
Сбер РПБУ февраль 2026 г. - снижение резервов помогло удержать рекордную прибыль
Сбер опубликовал результаты за 2 месяца работы в 2026 году по РСБУ. Чистая прибыль за 2 месяца составила 325 млрд руб. (+21,4%). За февраль...

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

....все тэги



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