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

!!!-mt4 x-tma channel-01 button.mq5

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Данный файл является пользовательским индикатором для MetaTrader 5, написанным на языке MQL5. Индикатор отображается в окне графика и рассчитывает несколько наборов данных, включая две конфигурируемые линии TMA с полосами, а также ленту, построенную на основе этих линий. В коде присутствуют обработчики OnInit, OnCalculate (через start2) и OnChartEvent, что подтверждает работу индикатора в реальном времени и реакцию на события графика.

Индикатор предоставляет настраиваемые параметры для каждой из двух линий TMA: период, множитель ATR, цвет, а также возможность включения или отключения отображения. Дополнительно реализована кнопка на графике, которая позволяет пользователю включать и отключать отображение данных индикатора. Состояние кнопки сохраняется в глобальной переменной терминала.

В коде также присутствует расчёт ленты (ribbon), которая визуализируется в виде гистограммы и зависит от взаимного расположения полос двух линий TMA. Все вычисления производятся на основе ценовых данных и индикаторов iMA и iATR. Индикатор не содержит торговых функций и не выполняет автоматических операций.

Важно отметить, что исходный код содержит множество настроек, включая внешний вид кнопки и её расположение. Пользователь может изменять эти параметры для адаптации индикатора под свои предпочтения.

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

НастройкаОписание
Indicator Текстовый параметр, задающий версию индикатора. По умолчанию содержит строку "TMA CHANNEL-01".
STR01 Текстовый разделитель для группы настроек TMA1.
showTMA1 Включает или отключает отображение линий TMA1.
TMA1per Период для расчёта линии TMA1.
TMA1clr Цвет линий и полос TMA1.
TMA1atrMulti Множитель для значения ATR при расчёте полос TMA1.
STR02 Текстовый разделитель для группы настроек TMA2.
showTMA2 Включает или отключает отображение линий TMA2.
TMA2per Период для расчёта линии TMA2.
TMA2price Тип цены, применяемый для расчёта TMA2.
TMA2clr Цвет линий и полос TMA2.
STR03 Текстовый разделитель для группы настроек ленты.
button_note1 Текстовый разделитель для группы настроек кнопки.
btn_corner Угол графика для привязки кнопки.
btn_text Текст, отображаемый на кнопке.
btn_Font Название шрифта для текста кнопки.
btn_FontSize Размер шрифта текста кнопки.
btn_text_ON_color Цвет текста кнопки, когда данные отображаются.
btn_text_OFF_color Цвет текста кнопки, когда данные скрыты.
btn_background_color Цвет фона кнопки.
btn_border_color Цвет границы кнопки.
button_x Горизонтальное смещение кнопки от угла привязки.
button_y Вертикальное смещение кнопки от угла привязки.
btn_Width Ширина кнопки в пикселях.
btn_Height Высота кнопки в пикселях.
button_note2 Текстовый разделитель для группы настроек кнопки.
Получить полный код

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

#property description "Let light shine out of darkness and illuminate your world"
#property description "and with this freedom leave behind your cave of denial"
#property indicator_chart_window
#property indicator_buffers 15
#define Version "TMA CHANNEL-01"
string ID="Xard>",TimeFrame="Current time frame";

#include <WinUser32.mqh>
extern string Indicator = Version;

extern string STR01                      = "<<<==== [01] TMA1 Settings ====>>>";
  extern bool showTMA1                   = false;
   extern int TMA1per                    = 56,TMA1atr=100,TMA1width=1;
 extern color TMA1clr                    = clrRed;
extern double TMA1atrMulti               = 2.;
       double TMA1[],TMA1up[],TMA1dn[],TMA1bandUp[],TMA1bandDn[];

extern string STR02                      = "<<<==== [02] TMA2 Settings ====>>>";  
  extern bool showTMA2                   = true, Extrapolate=true;
   extern int TMA2per                    = 56,TMA2atr=100,TMA2width=3;
extern ENUM_APPLIED_PRICE TMA2price      = PRICE_WEIGHTED;
 extern color TMA2clr                    = clrDimGray;
extern double TMA2atrMulti               = 2.;  bool returnBars;
       double TMA2[],TMA2up[],TMA2dn[],TMA2bandUp[],TMA2bandDn[];   double TMA2slope[],trend1[],trend2[];

extern string STR03                      = "<<<==== [03] Ribbon Settings ====>>>";
  extern bool showRIBBON                 = true;  double MA1[],MA2[],MA3[],MA4[];
 extern color RibColUP                   = C'80,80,180',RibColDN=C'160,60,60';  int getChartScale=WRONG_VALUE;

extern string             button_note1          = "------------------------------";
extern ENUM_BASE_CORNER   btn_corner            = CORNER_LEFT_UPPER; // chart btn_corner for anchoring
extern string             btn_text              = "TMA";
extern string             btn_Font              = "Arial";
extern int                btn_FontSize          = 10;                             //btn__font size
extern color              btn_text_ON_color     = clrWhite;
extern color              btn_text_OFF_color    = clrRed;
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;

   bool calculateValue;  string FontType="Arial Black",SymPair="",indicatorFileName;
   double data1;  int timeFrame,BarsCount=1000,Type,Type2,win,FontSize=14,FontSize2=12,pipsize;

   int init2(){

   int Buffers=15,Buf=-1;  IndicatorBuffers(Buffers);  TMA2per=MathMax(TMA2per,1);
   if(TimeFrame==0 || TimeFrame<Period()) TimeFrame=Period();  timeFrame=stringToTimeFrame(TimeFrame);

   win=WindowFind(ID);

   if(showRIBBON)         Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
   Buf+=1; SetIndexBuffer(Buf,MA1);       
   Buf+=1; SetIndexBuffer(Buf,MA2);       
   Buf+=1; SetIndexBuffer(Buf,MA3);       
   Buf+=1; SetIndexBuffer(Buf,MA4);       fSetBuffers();

   if(showTMA1)           Type=DRAW_LINE; else Type=DRAW_NONE; int T1w=TMA1width; color T1c=TMA1clr;
   Buf+=1; SetIndexBuffer(Buf,TMA1);       SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA1per);
   Buf+=1; SetIndexBuffer(Buf,TMA1bandUp); SetIndexStyle(Buf,Type,0,T1w,T1c); SetIndexDrawBegin(Buf,TMA1per);
   Buf+=1; SetIndexBuffer(Buf,TMA1bandDn); SetIndexStyle(Buf,Type,0,T1w,T1c); SetIndexDrawBegin(Buf,TMA1per);

   if(showTMA2)           Type=DRAW_LINE; else Type=DRAW_NONE; int T2w=TMA2width; color T2c=TMA2clr;
   Buf+=1; SetIndexBuffer(Buf,TMA2);       SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2up);     SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2dn);     SetIndexStyle(Buf,DRAW_NONE);      SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2bandUp); SetIndexStyle(Buf,Type,0,T2w,T2c); SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2bandDn); SetIndexStyle(Buf,Type,0,T2w,T2c); SetIndexDrawBegin(Buf,TMA2per);
   Buf+=1; SetIndexBuffer(Buf,TMA2slope);  SetIndexStyle(Buf,DRAW_NONE);
   Buf+=1; SetIndexBuffer(Buf,trend1);     SetIndexStyle(Buf,DRAW_NONE);
   Buf+=1; SetIndexBuffer(Buf,trend2);     SetIndexStyle(Buf,DRAW_NONE);

   if(Buffers != Buf+1) Print("*******Buffer MisMatch!!!   ",Buffers," ",Buf);
   for(int Bufx=0;Bufx<indicator_buffers;Bufx++){SetIndexLabel(Bufx,NULL);}

   indicatorFileName = WindowExpertName();
   calculateValue    = (TimeFrame=="calculateValue"); if (calculateValue) return(0);
   returnBars        = (TimeFrame=="returnBars");     if (returnBars)     return(0);
   timeFrame         = stringToTimeFrame(TimeFrame);  return(INIT_SUCCEEDED);}//End OnInit

   void deinit2(){ int reason; switch(reason){
      case REASON_CHARTCHANGE :
      case REASON_RECOMPILE   :
      case REASON_CLOSE       : break;
                      default : {         
   CleanUpOnAisle1(ID); string lookFor = ID+":"; int lookForLength = StringLen(lookFor);
   for(int io=ObjectsTotal()-1; io>=0; io--){string objectName=ObjectName(io); 
   if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);}}}}

int start2()
                   {
                   fSetBuffers();

   int counted_bars=IndicatorCounted();  int i,j,k,limit; double TMA1range;
   if(counted_bars<0) return(-1);  if(counted_bars>0) counted_bars--; 
   limit=MathMin(Bars-counted_bars+TMA2per,Bars-1);  if(returnBars){TMA2[0] = limit+1; return(0);}

   for (i=limit; i>=0; i--){
          TMA1[i] = EMPTY_VALUE;
        TMA1up[i] = EMPTY_VALUE;
        TMA1dn[i] = EMPTY_VALUE;
          TMA1[i] = iMA(NULL,0,TMA1per,0,MODE_LWMA,PRICE_CLOSE,i);
        TMA1range = iATR(NULL,0,TMA1atr,i+10);
    TMA1bandUp[i] = TMA1[i+1] + (TMA1range * TMA1atrMulti);
    TMA1bandDn[i] = TMA1[i+1] - (TMA1range * TMA1atrMulti);}

   if(calculateValue || timeFrame==Period()){
   if(TMA2slope[limit]==-1) CleanPoint(limit,TMA2up,TMA2dn);
   for(i=limit;i>=0;i--){
   if(Extrapolate || (!Extrapolate && i>TMA2per)){
            double sum  = (TMA2per+1)*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i);
            double sumw = (TMA2per+1);
   for(j=1, k=TMA2per; j<=TMA2per; j++, k--){
             sum  += k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i+j);  sumw += k;
   if(j<=i){ sum  += k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i-j);  sumw += k;}}
   double TMA2range = iATR(NULL,0,TMA2atr,i+10)*TMA2atrMulti;
            TMA2[i] = sum/sumw;  
      TMA2bandUp[i] = TMA2[i]+TMA2range;
      TMA2bandDn[i] = TMA2[i]-TMA2range;} else {
            TMA2[i] = TMA2[i+1];  
      TMA2bandUp[i] = TMA2bandUp[i+1];  
      TMA2bandDn[i] = TMA2bandDn[i+1];}         
          TMA2up[i] = EMPTY_VALUE;
          TMA2dn[i] = EMPTY_VALUE;
       TMA2slope[i] = TMA2slope[i+1];
          trend1[i] = 0;
          trend2[i] = trend2[i+1];
   if(TMA2[i]> TMA2[i+1]) TMA2slope[i] = 1;
   if(TMA2[i]< TMA2[i+1]) TMA2slope[i] =-1;
   if(Close[i] > TMA2bandUp[i]) trend2[i] = 1;
   if(Close[i] < TMA2bandDn[i]) trend2[i] =-1;
   if(TMA2slope[i]==-1) PlotPoint(i,TMA2up,TMA2dn,TMA2);}

   for(i=0; i<limit; i++){
   if(TMA1bandUp[i]>TMA2bandUp[i]){MA2[i]=TMA1bandUp[i];MA1[i]=TMA2bandUp[i];MA4[i]=EMPTY_VALUE;MA3[i]=EMPTY_VALUE;}
   if(TMA1bandDn[i]<TMA2bandDn[i]){MA4[i]=TMA1bandDn[i];MA3[i]=TMA2bandDn[i];MA2[i]=EMPTY_VALUE;MA1[i]=EMPTY_VALUE;}}

   }  return(0);}

   void CleanPoint(int i,double& first[],double& second[]){
   if((second[i]!=EMPTY_VALUE) && (second[i+1]!=EMPTY_VALUE)) second[i+1]=EMPTY_VALUE;
   else if((first[i]!=EMPTY_VALUE) && (first[i+1]!=EMPTY_VALUE) && (first[i+2]==EMPTY_VALUE)) first[i+1]=EMPTY_VALUE;}

   void

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

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

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

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

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

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

Стоимость полного кода
1 257,20₽ ≈ $15.37