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

tmadcg mladen-arrowsmod.mq5

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

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

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

О программе

Индикатор TMA+CG для MetaTrader 4 рассчитывает треугольную скользящую среднюю (TMA) с полосами отклонений и отображает стрелки сигналов на графике. Использует центральную линию, верхнюю и нижнюю полосы, а также стрелки вверх и вниз для обозначения пробоев ценой границ полос. Поддерживает работу на различных таймфреймах с интерполяцией значений между барами.

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

НастройкаОписание
TimeFrame Таймфрейм — Строковый параметр для выбора таймфрейма расчёта индикатора; принимает текстовые обозначения, например M1, H1, D1, или значение current time frame
HalfLength Полу-длина — Целочисленный параметр, задающий половину длины треугольной скользящей средней; минимально допустимое значение — 1
Price Цена — Целочисленный параметр, определяющий тип цены для расчёта (например, взвешенная цена)
BandsDeviations Отклонения полос — Числовой параметр, задающий количество стандартных отклонений для построения верхней и нижней полос
does what exactly? (Interpolate) Интерполяция — Переключатель, включающий плавное заполнение значений индикатора между барами при использовании более высокого таймфрейма
alertsOn Оповещения включены — Главный переключатель для включения или отключения всех уведомлений
alertsOnCurrent Оповещения на текущем баре — Переключатель, определяющий, проверять ли условия оповещения на текущем баре вместо предыдущего
alertsOnHighLow Оповещения по High/Low — Переключатель: при включении оповещения срабатывают на пробой полос по максимуму или минимуму бара, при выключении — по цене закрытия
alertsMessage Сообщение — Переключатель для включения всплывающих оповещений в виде сообщений на графике
alertsSound Звук — Переключатель для включения звукового оповещения при срабатывании условия
alertsEmail Email — Переключатель для включения отправки email-уведомлений при срабатывании условия
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1  clrLimeGreen	//middle line color
#property indicator_color2  clrLimeGreen	//upper band color
#property indicator_color3  clrLimeGreen	//lower band color
#property indicator_color4  clrSkyBlue	//up arrow
#property indicator_color5  clrCrimson	//down arrow
#property indicator_style1  STYLE_DASH	//centerline style
#property indicator_width1  1 //middle band line width
#property indicator_width2  2 //upper band line width
#property indicator_width3  2 //lower band line width

extern string TimeFrame       = "current time frame";
extern int    HalfLength      = 33;
extern int    Price           = PRICE_WEIGHTED;
extern double BandsDeviations = 2.5;
extern bool   Interpolate     = true;  //does what exactly?
extern bool   alertsOn        = true;
extern bool   alertsOnCurrent = false;
extern bool   alertsOnHighLow = true;
extern bool   alertsMessage   = true;
extern bool   alertsSound     = true;
extern bool   alertsEmail     = false;

double tmBuffer[];   //timeframe buffer?
double upBuffer[];
double dnBuffer[];
double wuBuffer[];   //what starts with w?
double wdBuffer[];
double upArrow[];    //buffers for the signal arrows presumably
double dnArrow[];

string IndicatorFileName;
bool   calculatingTma = false;
bool   returningBars  = false;
int    timeFrame;

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

int deinit() { return(0); }

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

int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
           limit=MathMin(Bars-1,Bars-counted_bars+HalfLength);

           if (returningBars)  { tmBuffer[0] = limit; return(0); }
           if (calculatingTma) { calculateTma(limit); return(0); }
           if (timeFrame > Period()) limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,IndicatorFileName,"returnBars",0,0)*timeFrame/Period()));

 	for(i = limit; i >= 0; i--)
   {
      int      shift1 = iBarShift(NULL,timeFrame,Time[i]);
      datetime time1  = iTime    (NULL,timeFrame,shift1);

         tmBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,BandsDeviations,0,shift1);
         upBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,BandsDeviations,1,shift1);
         dnBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,BandsDeviations,2,shift1);

         upArrow[i] = EMPTY_VALUE;
         dnArrow[i] = EMPTY_VALUE;            
            if (High[i+1]>upBuffer[i+1] && Close[i+1]>Open[i+1] && Close[i]<Open[i]) upArrow[i] = High[i]+iATR(NULL,0,20,i);
            if ( Low[i+1]<dnBuffer[i+1] && Close[i+1]<Open[i+1] && Close[i]>Open[i]) dnArrow[i] = High[i]-iATR(NULL,0,20,i);

         if (timeFrame <= Period() || shift1==iBarShift(NULL,timeFrame,Time[i-1])) continue;
         if (!Interpolate) continue;

         for(int n = 1; i+n < Bars && Time[i+n] >= time1; n++) continue;
         double factor = 1.0 / n;
         for(int k = 1; k < n; k++)
            {
               tmBuffer[i+k] = k*factor*tmBuffer[i+n] + (1.0-k*factor)*tmBuffer[i];
               upBuffer[i+k] = k*factor*upBuffer[i+n] + (1.0-k*factor)*upBuffer[i];
               dnBuffer[i+k]

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

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

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

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

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

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

Стоимость полного кода
597,40₽ ≈ $7.30