← К каталогу
Исходный код · ID 4634

#spudfibo button 1.01

#spudfibo button 1.01.mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор отображает уровни Фибоначчи на графике MetaTrader 5, используя максимум и минимум предыдущего торгового дня в качестве опорных точек. На графике создаются три объекта Фибоначчи: верхний (FiboUp), нижний (FiboDn) и внутренний дневной (FiboIn). Внутренние линии Фибоначчи можно включать и выключать отдельной настройкой.

Для управления видимостью всех линий Фибоначчи на графике размещается настраиваемая кнопка. При нажатии на кнопку состояние видимости переключается, а текущий режим сохраняется в глобальной переменной терминала. Индикатор перерисовывает уровни при появлении нового дневного бара или при смене таймфрейма.

Обработка нажатий на кнопку осуществляется через событие OnChartEvent, которое вызывает пересчёт и отрисовку объектов. Цвета каждой группы линий Фибоначчи настраиваются независимо. Параметры кнопки — положение, размер, шрифт и цвета — полностью настраиваются пользователем.

Настройки программы

НастройкаОписание
note1 Текстовый разделитель в блоке настроек цветов Фибоначчи.
UpperFiboColor Цвет линий верхнего объекта Фибоначчи (FiboUp).
MainFiboColor Цвет линий внутреннего объекта Фибоначчи (FiboIn).
LowerFiboColor Цвет линий нижнего объекта Фибоначчи (FiboDn).
note2 Текстовый разделитель в блоке настроек линий Фибоначчи.
InnerFibs Включает или отключает отображение внутренних линий Фибоначчи (FiboIn) на графике.
button_note1 Текстовый разделитель в блоке настроек кнопки.
btn_corner Угол графика, к которому привязывается кнопка (например, левый верхний угол).
btn_text Текст, отображаемый на кнопке управления видимостью.
btn_Font Шрифт текста на кнопке управления видимостью.
btn_FontSize Размер шрифта текста на кнопке.
btn_text_color Цвет текста на кнопке управления видимостью.
btn_background_color Цвет фона кнопки управления видимостью.
btn_border_color Цвет рамки кнопки управления видимостью.
button_x Горизонтальное положение кнопки в пикселях от угла графика.
button_y Вертикальное положение кнопки в пикселях от угла графика.
btn_Width Ширина кнопки управления видимостью в пикселях.
btn_Height Высота кнопки управления видимостью в пикселях.
button_note2 Текстовый разделитель в блоке настроек кнопки.
Получить полный код

Поиск по коду файла

#property indicator_chart_window

extern string              note1                 = "Fibonacci colors";
extern color               UpperFiboColor        = clrNavy;
extern color               MainFiboColor         = clrRoyalBlue;
extern color               LowerFiboColor        = clrDodgerBlue;
extern string              note2                 = "Draw main Fibonacci lines?";
extern bool                InnerFibs             = true;

extern string             button_note1          = "------------------------------";
extern ENUM_BASE_CORNER   btn_corner            = CORNER_LEFT_UPPER; // chart btn_corner for anchoring
extern string             btn_text              = "Fibo";
extern string             btn_Font              = "Arial";
extern int                btn_FontSize          = 10;                             //btn__font size
extern color              btn_text_color        = clrWhite;
extern color              btn_background_color  = clrDimGray;
extern color              btn_border_color      = clrBlack;
extern int                button_x              = 20;                                     //btn__x
extern int                button_y              = 13;                                     //btn__y
extern int                btn_Width             = 60;                                 //btn__width
extern int                btn_Height            = 20;                                //btn__height
extern string             button_note2          = "------------------------------";
bool                      show_data             = true;
string IndicatorName, IndicatorObjPrefix;
int WorkTime=0,Periods=0;

double HiPrice, LoPrice, Range;
datetime StartTime;

string GenerateIndicatorName(const string target)
{
   string name = target;
   int try = 2;
   while (WindowFind(name) != -1)
   {
      name = target + " #" + IntegerToString(try++);
   }
   return name;
}

class VisibilityCotroller
{
   string buttonId;
   string visibilityId;
   bool show_data;
   bool recalc;
public:
   void Init(string id, string indicatorName, string caption, int x, int y)
   {
      recalc = false;
      visibilityId = indicatorName + "_visibility";
      double val;
      if (GlobalVariableGet(visibilityId, val))
         show_data = val != 0;

      buttonId = id;
      ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, 1);
      createButton(buttonId, caption, btn_Width, btn_Height, btn_Font, btn_FontSize, btn_background_color, btn_border_color, btn_text_color);
      ObjectSetInteger(0,buttonId,OBJPROP_YDISTANCE, button_y);
      ObjectSetInteger(0,buttonId,OBJPROP_XDISTANCE, button_x);

   }

   void DeInit()
   {
      ObjectDelete(ChartID(), buttonId);
      ObjectDelete("FiboUp");
      ObjectDelete("FiboDn");
      ObjectDelete("FiboIn");
   }

   bool HandleButtonClicks()
   {
      if (ObjectGetInteger(0, buttonId, OBJPROP_STATE))
      {
         ObjectSetInteger(0, buttonId, OBJPROP_STATE, false);
         show_data = !show_data;
         GlobalVariableSet(visibilityId, show_data ? 1.0 : 0.0);
         recalc = true;
         return true;
      }
      return false;
   }

   bool IsRecalcNeeded()
   {
      return recalc;
   }

   void ResetRecalc()
   {
      recalc = false;
   }

   bool IsVisible()
   {
      return show_data;
   }

private:
   void createButton(string buttonID,string buttonText,int width,int height,string font,int fontSize,color bgColor,color borderColor,color txtColor)
   {
      ObjectDelete    (0,buttonID);
      ObjectCreate    (0,buttonID,OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,buttonID,OBJPROP_COLOR,txtColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,bgColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BORDER_COLOR,borderColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BORDER_TYPE,BORDER_RAISED);
      ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,height);
      ObjectSetString (0,buttonID,OBJPROP_FONT,font);
      ObjectSetString (0,buttonID,OBJPROP_TEXT,buttonText);
      ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,fontSize);
      ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
      ObjectSetInteger(0,buttonID,OBJPROP_CORNER,btn_corner);
      ObjectSetInteger(0,buttonID,OBJPROP_HIDDEN,1);
   }
};
VisibilityCotroller visibility;

int init()
  {
      // код доступен только после оплаты
   };

int deinit()  
  {
   visibility.DeInit();
    ObjectsDeleteAll(ChartID(), IndicatorObjPrefix);

    ObjectDelete("FiboUp");
    ObjectDelete("FiboDn");
    ObjectDelete("FiboIn");
   return(0);
  }

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if (visibility.HandleButtonClicks())
      start();
}

int DrawFibo()
{
	if(ObjectFind("FiboUp") == -1)
		ObjectCreate("FiboUp",OBJ_FIBO,0,StartTime,HiPrice+Range,StartTime,HiPrice);
	else
	{
		ObjectSet("FiboUp",OBJPROP_TIME2, StartTime);
		ObjectSet("FiboUp",OBJPROP_TIME1, StartTime);
		ObjectSet("FiboUp",OBJPROP_PRICE1,HiPrice+Range);
		ObjectSet("FiboUp",OBJPROP_PRICE2,HiPrice);
	}
   ObjectSet("FiboUp",OBJPROP_LEVELCOLOR,UpperFiboColor);
   ObjectSet("FiboUp",OBJPROP_FIBOLEVELS,13);
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+0,0.0);	   ObjectSetFiboDescription("FiboUp",0,"(100.0%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+1,0.236);	   ObjectSetFiboDescription("FiboUp",1,"(123.6%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+2,0.382); 	ObjectSetFiboDescription("FiboUp",2,"(138.2%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+3,0.500); 	ObjectSetFiboDescription("FiboUp",3,"(150.0%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+4,0.618); 	ObjectSetFiboDescription("FiboUp",4,"(161.8%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+5,0.764); 	ObjectSetFiboDescription("FiboUp",5,"(176.4%) -  %$"); 

Показано первые 50% кода (символов: 9748)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
974,80₽ ≈ $12.01