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

TMA+CG

tma+cg mladen nrp.mq5
Вы автор или правообладатель?

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

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

О программе

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

Верхняя и нижняя полосы отрисовываются отдельными линиями, а при пробое ценой этих уровней на графике появляются стрелки-метки. Индикатор поддерживает настраиваемые цвета и стили отображения линий TMA и полос.

Встроенная система уведомлений позволяет отправлять алерты в виде popup-сообщений, электронной почты или звуковых сигналов при достижении ценой заданных условий. Доступен выбор различных временных периодов и параметр чувствительности полос.

Индикатор работает в режиме без перерисовки и может функционировать как самостоятельно, так и вызывать собственные внутренние расчётные режимы через механизм iCustom.

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

НастройкаОписание
TimeFrame TimeFrame — Таймфрейм для расчёта индикатора (строковое значение)
HalfLength HalfLength — Половина длины расчётного периода TMA
Price Price — Тип цены для расчётов индикатора
BandsDeviations BandsDeviations — Множитель отклонения для расчёта верхней и нижней полос
Interpolate Interpolate — Переключатель интерполяции значений между таймфреймами
A1 A1 — Текстовая метка для группы настроек стиля отображения
UpperBandColor UpperBandColor — Цвет верхней полосы
BottomBandColor BottomBandColor — Цвет нижней полосы
BandsLineWidth BandsLineWidth — Толщина линий верхней и нижней полос
BandsLineStyle BandsLineStyle — Стиль линий верхней и нижней полос
TMALineColor TMALineColor — Цвет линии TMA
TMALineWidth TMALineWidth — Толщина линии TMA
TMALineStyle TMALineStyle — Стиль линии TMA
A2 A2 — Текстовая метка для группы настроек уведомлений
alertsOn alertsOn — Общий переключатель включения уведомлений
alertsOnCurrent alertsOnCurrent — Переключатель уведомлений для текущей свечи
alertsOnHighLow alertsOnHighLow — Переключатель: проверка пробоя по максимуму/минимуму вместо закрытия
Получить полный код

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

#property description "edited by eevviill"
#property description "no repaint"

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color4 clrWhite
#property indicator_color5 clrWhite

extern string TimeFrame       = "current time frame";
extern int    HalfLength      = 55;
extern int    Price           = PRICE_WEIGHTED;
extern double BandsDeviations = 2.618;
extern bool   Interpolate     = true;

extern string A1              = "******** Style ********";
extern color  UpperBandColor  = clrRed;
extern color  BottomBandColor = clrLime;
extern int    BandsLineWidth  = 15;
extern int    BandsLineStyle  = 0;
extern color  TMALineColor    = clrWhite;
extern int    TMALineWidth    = 1;
extern int    TMALineStyle    = 2;

extern string A2              = "******** Alerts ********";
extern bool   alertsOn        = false;
extern bool   alertsOnCurrent = false;
extern bool   alertsOnHighLow = false;
bool   alertsMessage   = false;
bool   alertsSound     = false;
bool   alertsEmail     = false;

double tmBuffer[];
double upBuffer[];
double dnBuffer[];
double wuBuffer[];
double wdBuffer[];
double upArrow[];
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()));

   if(limit<Bars-20) limit=1;
 	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];
               up

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

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

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

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

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

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

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