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

TrueTL

truetl v1.01 bt.mq5
Вы автор или правообладатель?

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

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

О программе

TrueTL — это пользовательский индикатор для платформы MetaTrader 4, предназначенный для построения и визуализации трендовых линий на графиках цен. Индикатор отрисовывает нисходящие и восходящие трендовые линии (OBJ_TREND), автоматически обновляя их по мере поступления новых свечей.

В основе работы лежит обнаружение фракталов и паттернов свечей для определения точек начала трендовых линий. Линии окрашиваются в разные цвета в зависимости от их продолжительности: обычные и длинные трендовые линии имеют отдельные настройки цвета. Доступна функция «Three Touch», которая выделяет особые трендовые линии, сформированные при трёх касаниях.

Индикатор оснащён встроенной кнопкой-переключателем, позволяющей показывать или скрывать отрисовку. Реализована функция автообновления, а также ускоренный анализ для таймфреймов M1 и M5. Доступна маркировка наибольших и наименьших трендовых линий на графике.

Настройки включают параметры периодов, цветов, ширин линий и внешнего вида кнопки управления. Индикатор работает в основном графике (indicator_chart_window) и совместим с стандартными объектами MetaTrader 4.

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

НастройкаОписание
Auto_Refresh Автообновление — Переключатель автоматического обновления трендовых линий при поступлении новых свечей.
Normal_TL_Period Период обычной линии — Период (в барах) для определения нормальной длительности трендовой линии.
Three_Touch Three Touch — Включает режим Three Touch для выделения особых трендовых линий.
M1_Fast_Analysis Быстрый анализ M1 — Включает ускоренный анализ на таймфрейме M1.
M5_Fast_Analysis Быстрый анализ M5 — Включает ускоренный анализ на таймфрейме M5.
Mark_Highest_and_Lowest_TL Маркировка экстремумов — Отображение маркеров для наибольших и наименьших трендовых линий.
Expiration_Day_Alert Дней до предупреждения — Число дней до истечения срока для отображения предупреждения об истечении.
Normal_TL_Color Цвет обычных линий — Цвет обычных трендовых линий.
Long_TL_Color Цвет длинных линий — Цвет длинных трендовых линий.
Three_Touch_TL_Width Толщина Three Touch линий — Толщина линий Three Touch.
Three_Touch_TL_Color Цвет Three Touch линий — Цвет трендовых линий в режиме Three Touch.
button_note1_ Разделитель 1 — Текстовый разделитель перед группой настроек кнопки.
What window to put the button on. If <0, the button will use the same sub-window as the indicator. (btn_Subwindow) Подокно кнопки — Подокно, в котором размещается кнопка. Если значение меньше 0, кнопка использует тот же подокон индикатора.
button corner on chart for anchoring (btn_corner) Угол кнопки — Угол графика для привязки кнопки.
a button name (btn_text) Текст кнопки — Текст (название) кнопки.
button font name (btn_Font) Шрифт кнопки — Шрифт текста на кнопке управления.
button font size (btn_FontSize) Размер шрифта кнопки — Размер шрифта текста на кнопке.
ON color when the button is turned on (btn_text_ON_color) Цвет текста (вкл) — Цвет текста кнопки во включённом состоянии.
OFF color when the button is turned off (btn_text_OFF_color) Цвет текста (выкл) — Цвет текста кнопки в выключенном состоянии.
background color of the button (btn_background_color) Фон кнопки — Цвет фона кнопки.
border color the button (btn_border_color) Рамка кнопки — Цвет рамки кнопки.
x coordinate of the button (button_x) X-координата кнопки — Горизонтальная координата кнопки на графике.
y coordinate of the button (button_y) Y-координата кнопки — Вертикальная координата кнопки на графике.
button width (btn_Width) Ширина кнопки — Ширина кнопки управления.
button height (btn_Height) Высота кнопки — Высота кнопки управления.
button_note2 Разделитель 2 — Текстовый разделитель после группы настроек кнопки.
Получить полный код

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

#property indicator_chart_window

extern bool  Auto_Refresh               = TRUE;
extern int   Normal_TL_Period           = 500;
extern bool  Three_Touch                = TRUE;
extern bool  M1_Fast_Analysis           = TRUE;
extern bool  M5_Fast_Analysis           = TRUE;
extern bool  Mark_Highest_and_Lowest_TL = TRUE;
extern int   Expiration_Day_Alert       = 5;
extern color Normal_TL_Color            = clrGainsboro;
extern color Long_TL_Color              = clrGoldenrod;
extern int   Three_Touch_TL_Width       = 2;
extern color Three_Touch_TL_Color       = clrDimGray;

extern string             button_note1_          = "------------------------------";
extern int                btn_Subwindow         = 0;                               // What window to put the button on.  If <0, the button will use the same sub-window as the indicator.
extern ENUM_BASE_CORNER   btn_corner            = CORNER_LEFT_UPPER;               // button corner on chart for anchoring
extern string             btn_text              = "TRUETL";                        // a button name
extern string             btn_Font              = "Arial";                         // button font name
extern int                btn_FontSize          = 9;                               // button font size               
extern color              btn_text_ON_color     = clrLime;                         // ON color when the button is turned on
extern color              btn_text_OFF_color    = clrRed;                          // OFF color when the button is turned off
extern color              btn_background_color  = clrDimGray;                      // background color of the button
extern color              btn_border_color      = clrBlack;                        // border color the button
extern int                button_x              = 20;                              // x coordinate of the button     
extern int                button_y              = 25;                              // y coordinate of the button     
extern int                btn_Width             = 80;                              // button width
extern int                btn_Height            = 20;                              // button height
extern string             button_note2          = "------------------------------";

bool show_data, recalc=false;
string IndicatorObjPrefix, buttonId;

int counted_bars;

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

void createButton(string buttonID,string buttonText,int width2,int height,string font,int fontSize,color bgColor,color borderColor,color txtColor)
{
      ObjectDelete    (0,buttonID);
      ObjectCreate    (0,buttonID,OBJ_BUTTON,btn_Subwindow,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,width2);
      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);
      ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,9999);
      ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,9999);

      ObjectSetInteger(0, buttonId, OBJPROP_STATE, true);
}

void OnDeinit(const int reason) 
{

   if(reason != REASON_CHARTCHANGE) ObjectDelete(buttonId);
   deinit2();
}

void OnChartEvent(const int id, //don't change anything here
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{

   if(id==CHARTEVENT_OBJECT_CREATE || id==CHARTEVENT_OBJECT_DELETE) return; // This appears to make this indy compatible with other programs that enabled CHART_EVENT_OBJECT_CREATE and/or CHART_EVENT_OBJECT_DELETE
   if(id==CHARTEVENT_MOUSE_MOVE    || id==CHARTEVENT_MOUSE_WHEEL)   return; // If this, or another program, enabled mouse-events, these are not needed below, so skip it unless actually needed. 

   if (id==CHARTEVENT_OBJECT_CLICK && sparam == buttonId)
   {
      show_data = ObjectGetInteger(0, buttonId, OBJPROP_STATE);

      if (show_data)
      {
         ObjectSetInteger(0,buttonId,OBJPROP_COLOR,btn_text_ON_color); 
         init2();

         recalc=true;
         mystart();
      }
      else
      {
         ObjectSetInteger(0,buttonId,OBJPROP_COLOR,btn_text_OFF_color);
         deinit2();
      }
   }
}

int init2() {
   ObjectCreate("calctl", OBJ_HLINE, 0, 0, 0);
   ObjectCreate("visibletl", OBJ_HLINE, 0, 0, 0);
   ObjectCreate("downmax", OBJ_TREND, 0, 0, 0, 0, 0);
   ObjectCreate("upmax", OBJ_TREND, 0, 0, 0, 0, 0);
   return (0);
}

int deinit2() {
   for (int ForexStation = 0; ForexStation <= 100; ForexStation++) {
      ObjectDelete("downtrendline" + ForexStation);
      ObjectDelete("uptrendline" + ForexStation);
      ObjectDelete("downtrendline" + ForexStation + "tt");
      ObjectDelete("uptrendline" + ForexStation + "tt");
   }
   ObjectDelete("calctl");
   ObjectDelete("timeleft");
   ObjectDelete("invacc");
   ObjectDelete("visibletl");
   ObjectDelete("downmax");
   ObjectDelete("upmax");
   ObjectDelete("downmax");
   ObjectDelete("upmax");
   return (0);
}

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

int mystart()
  {
   if (show_data)
      {
   double mySecondCount;
   double myFractal01;
   double CandleHigh;
   double SemaFor01;
   double myFractal02;
   double AnotherCandleHigh;
   double myTemp01;
   double DownLine;
   double AlternatePoint;
   double TouchDownLine01;
   double Touch3Shift;
   double NormalTL;
   double Forex01;
   double MachNumber;
   double MandoNumber;
   double anotherDownLine01;
   double anotherDownLine02;
   double TempDownLine02;
   double TempDownLine;
   double myATRnumber;
   double MagicNumber;
   double yourDownTrendLine02;
   double yourUpTrendLine02;
   if (Normal_TL_Period > 1000 || Normal_TL_Period < 100) Normal_TL_Period = 500;
   string myAccount01 = AccountNumber();
   string myAccount02 = AccountNumber();
   int myGoal = 1;

   int myVisibleBar = MathMax(0, WindowFirstVisibleBar() - WindowBarsPerChart());
   double limit = Bars;

   if (counted_bars == 0) counted_bars = limit;
        if(recalc) 
        {

           counted_bars = 0;
           recalc=false;
        }

   if (limit > counted_bars) {
      counted_bars = limit;
      if (Auto_Refresh == TRUE && myVisibleBar == 0) ObjectSet("calctl", OBJPROP_PRICE1, -1);
   }
   if (Auto_Refresh == TRUE && IndicatorCounted() == 0) ObjectSet("calctl", OBJPROP_PRICE1, -1);
   if (ObjectGet("visibletl", OBJPROP_PRICE1) == -1.0) {
      for (int myDownTrendLine = 0; myDownTrendLine <= 100; myDownTrendLine++) {
         ObjectDelete("downtrendline" + myDownTrendLine);
         ObjectDelete("uptrendline" + myDownTrendLine);
         ObjectDelete("downtrendline" + myDownTrendLine + "tt");
         ObjectDelete("uptrendline" + myDownTrendLine + "tt");
      }
   }
   if (ObjectGet("calctl", OBJPROP_PRICE1) == -1.0 && ObjectGet("visibletl", OBJPROP_PRICE1) == 0.0 && StringFind(myAccount02, myAccount01, 0) >= 0 && myGoal > 0) {
      for (myDownTrendLine = 0; myDownTrendLine <= 100; myDownTrendLine++) {
         ObjectDelete("downtrendline" + myDownTrendLine);
         ObjectDelete("uptrendline" + myDownTrendLine);
         ObjectDelete("downtrendline" + myDownTrendLine + "tt");
         ObjectDelete("uptrendline" + myDownTrendLine + "tt");
      }
      mySecondCount = 150000;
      if (Period() == PERIOD_M1 && M1_Fast_Analysis == TRUE) mySecondCount = 8000;
      if (Period() == PERIOD_M5 && M5_Fast_Analysis == TRUE) mySecondCount = 2400;
      if (Period() == PERIOD_MN1) {
         mySecondCount = 150;
         Three_Touch = FALSE;
         Normal_TL_Period = 150;
      }
      myFractal01 = myVisibleBar + MathMin(Bars - myVisibleBar - 10, mySecondCount);
      CandleHigh = iHigh(NULL, 0, myFractal01);
      myFractal02 = myVisibleBar + MathMin(Bars - myVisibleBar - 10, mySecondCount);
      AnotherCandleHigh = iHigh(NULL, 0, myFractal02);
      for (int kounter01 = 1; kounter01 < 50; kounter01++) {
         if ((iFractals(NULL, 0, MODE_UPPER, myVisibleBar + kounter01) > 0.0 && kounter01 > 2) || (Close[myVisibleBar + kounter01 + 1] > Open[myVisibleBar + kounter01 + 1] && Close[myVisibleBar + kounter01 + 1] - (Low[myVisibleBar +
            kounter01 + 1]) < 0.6 * (High[myVisibleBar + kounter01 + 1] - (Low[myVisibleBar + kounter01 + 1])) && Close[myVisibleBar + kounter01] < Open[myVisibleBar + kounter01]) || (Close[myVisibleBar + kounter01 + 1] <= Open[myVisibleBar +
            kounter01 + 1] && Close[myVisibleBar + kounter01] < Open[myVisibleBar + kounter01]) || (Close[myVisibleBar + kounter01] < Open[myVisibleBar + kounter01] && Close[myVisibleBar + kounter01] < Low[myVisibleBar + kounter01 + 1])) {
            SemaFor01 = myVisibleBar + kounter01;
            break;
         }
      }
      for (int kounter02 = 1; kounter02 <= 30; kounter02++) {
         if (myFractal01 > SemaFor01 + 6.0) {
            ObjectCreate("downtrendline" + kounter02, OBJ_TREND, 0, iTime(NULL, 0, myFractal01), CandleHigh, iTime(NULL, 0, myFractal01), CandleHigh);
            for (kounter01 = myFractal01; kounter01 >= SemaFor01; kounter01--) {
               if (ObjectGet("downtrendline" + kounter02, OBJPROP_PRICE1) == ObjectGet("downtrendline" + kounter02, OBJPROP_PRICE2)) {
                  ObjectMove("downtrendline" + kounter02, 1, iTime(NULL, 0, kounter01 - 1), iHigh(NULL, 0, kounter01 - 1));
                  myFractal01 = kounter01 - 1;
                  CandleHigh = iHigh(NULL, 0, kounter01 - 1);
               }
               DownLine = ObjectGetValueByShift("downtrendline" + kounter02, kounter01);
               if (DownLine < iHigh(NULL, 0, kounter01)) {
                  ObjectMove("downtrendline" + kounter02, 1, iTime(NULL, 0, kounter01), iHigh(NULL, 0, kounter01));
                  myFractal01 = kounter01;
                  CandleHigh = iHigh(NULL, 0, kounter01);
               }
            }
         }
         if (ObjectGet("downtrendline" + kounter02, OBJPROP_PRICE1) < ObjectGet("downtrendline" + kounter02, OBJPROP_PRICE2)) ObjectDelete("downtrendline" + kounter02);
         if (iBarShift(NULL, 0, ObjectGet("downtrendline" + kounter02, OBJPROP_TIME1)) - myVisibleBar >= Normal_TL_Period) {
            ObjectSet("downtrendline" + kounter02, OBJPROP_COLOR, Long_TL_Color);
            ObjectSetText("downtrendline" + kounter02, "Long");
         } else {
            ObjectSet("downtrendline" + kounter02, OBJPROP_COLOR, Normal_TL_Color);
            ObjectSetText("downtrendline" + kounter02, "Normal");
         }
      }
      for (kounter01 = 1; kounter01 < 50; kounter01++) {
         if ((iFractals(NULL, 0, MODE_LOWER, myVisibleBar + kounter01) > 0.0 && kounter01 > 2) || (Close[myVisibleBar + kounter01 + 1] < Open[myVisibleBar + kounter01 + 1] && High[myVisibleBar + kounter01 + 1] - (Close[myVisibleBar +
            kounter01 + 1]) < 0.6 * (High[myVisibleBar + kounter01 + 1] - (Low[myVisibleBar + kounter01 + 1])) && Close[myVisibleBar + kounter01] > Open[myVisibleBar + kounter01]) || (Close[myVisibleBar + kounter01 + 1] >= Open[myVisibleBar +
            kounter01 + 1] && Close[myVisibleBar + kounter01] > Open[myVisibleBar + kounter01]) || (Close[myVisibleBar + kounter01] > Open[myVisibleBar + kounter01] && Close[myVisibleBar + kounter01] > High[myVisibleBar + kounter01 + 1])) {
            myTemp01 = myVisibleBar + kounter01;
            break;
         }
      }
      for (kounter02 = 1; kounter02 <= 30; kounter02++) {
         if (myFractal02 > myTemp01 + 6.0) {
            ObjectCreate("uptrendline" + kounter02, OBJ_TREND, 0, iTime(NULL, 0, myFractal02), AnotherCandleHigh, iTime(NULL, 0, myFractal02), AnotherCandleHigh);
          

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

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

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

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

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

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

Стоимость полного кода
1 795,50₽ ≈ $21.94