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

#spudfibo monthly button 1.01.mq5

Вы автор или правообладатель?

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

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

О программе

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

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

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

Продукт не содержит торговой логики и не отправляет ордера. Все настройки внешнего вида и позиционирования кнопки доступны через параметры индикатора.

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

НастройкаОписание
note1 Заголовок секции настроек цветов фибоначчиевых уровней.
UpperFiboColor Цвет линий верхних фибоначчиевых уровней.
MainFiboColor Цвет линий внутренних фибоначчиевых уровней.
LowerFiboColor Цвет линий нижних фибоначчиевых уровней.
note2 Заголовок секции настройки отрисовки основных линий фибоначчи.
InnerFibs Включает или выключает отрисовку внутренних фибоначчиевых уровней на графике.
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        = clrDarkGreen;
extern color               MainFiboColor         = clrDarkOliveGreen;
extern color               LowerFiboColor        = clrForestGreen;
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              = "FiboM";
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              = 53;                                     //btn__y
extern int                btn_Width             = 60;                                 //btn__width
extern int                btn_Height            = 20;                                //btn__height
extern string             button_note2          = "------------------------------";
bool                      show_dataM             = 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 = 11;
   while (WindowFind(name) != -1)
   {
      name = target + " #" + IntegerToString(try++);
   }
   return name;
}

class VisibilityCotrollerM
{
   string buttonIdM;
   string visibilityIdM;
   bool show_dataM;
   bool recalcM;
public:
   void Init2(string id, string indicatorName, string caption, int x, int y)
   {
      recalcM = false;
      visibilityIdM = indicatorName + "_visibility";
      double val;
      if (GlobalVariableGet(visibilityIdM, val))
         show_dataM = val != 0;

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

   }

   void DeInit2()
   {
      ObjectDelete(ChartID(), buttonIdM);
      ObjectDelete("FiboUpM");
      ObjectDelete("FiboDownM");
      ObjectDelete("FiboInM");
   }

   bool HandleButtonClicksM()
   {
      if (ObjectGetInteger(0, buttonIdM, OBJPROP_STATE))
      {
         ObjectSetInteger(0, buttonIdM, OBJPROP_STATE, false);
         show_dataM = !show_dataM;
         GlobalVariableSet(visibilityIdM, show_dataM ? 1.0 : 0.0);
         recalcM = true;
         return true;
      }
      return false;
   }

   bool IsrecalcMNeeded()
   {
      return recalcM;
   }

   void ResetrecalcM()
   {
      recalcM = false;
   }

   bool IsVisibleM()
   {
      return show_dataM;
   }

private:
   void createButtonM(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);
   }
};
VisibilityCotrollerM FiboMonthly;

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

int deinit()  
  {
   FiboMonthly.DeInit2();
    ObjectDelete("FiboUpM");
    ObjectDelete("FiboDownM");
    ObjectDelete("FiboInM");
    ObjectsDeleteAll(ChartID(), IndicatorObjPrefix);
   return(0);
  }

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

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

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

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

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

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

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

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

Стоимость полного кода
1 009,90₽ ≈ $12.59