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

FastTMA

!mth_fasttmaline_edit.mq4

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

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 общих теговsmcj, fix.mq5MQL5 / MetaTrader 5 · 1 общих теговbabon slope .mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

FastTMA — индикатор для MetaTrader 4, построенный на основе скользящей средней TMA (Triangular Moving Average). Индикатор рассчитывает верхнюю и нижнюю полосы на основе волатильности рынка и отображает центральную линию, цвет которой изменяется в зависимости от направления тренда: зелёный для бычьего, красный для медвежьего и нейтральный для бокового движения.

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

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

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

НастройкаОписание
TimeFrame Таймфрейм, на котором выполняется расчёт индикатора
TMAPeriod Период расчёта TMA-индикатора
Price Тип цены, используемый для расчёта (0 — Close, 1 — Open, 2 — High, 3 — Low, 4 — (H+L)/2, 5 — (H+L+C)/3, 6 — (H+L+C+C)/4)
ATRMultiplier Множитель ATR для определения ширины полос индикатора
ATRPeriod Период ATR для расчёта волатильности
TrendThreshold Пороговое значение для определения направления тренда
ShowCenterLine Отображение центральной линии, цвет которой меняется в зависимости от направления тренда
nrpMode Режим использования сглаженной скользящей средней LWMA вместо чистого TMA-расчёта
alertsOn Включение или выключение всей системы уведомлений
alertsMessage Отображение всплывающего сообщения при срабатывании уведомления
alertsSound Воспроизведение звукового сигнала при срабатывании уведомления
alertsEmail Отправка электронного письма при срабатывании уведомления
MoveEndpointEveryTick Обновление конечной точки индикатора при каждом новом тике
MaxBarsBack Максимальное количество баров, используемых для расчёта индикатора
ShowTrendLine Отображение динамических трендовых линий на графике
BarToTheRight Количество баров вправо для продления трендовой линии на графике
ShowPriceLabel Отображение ценовых меток на трендовых линиях
cUpperCol Цвет верхней трендовой линии
cLowerCol Цвет нижней трендовой линии
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers    6
#property indicator_color1     CLR_NONE
#property indicator_color2     HotPink
#property indicator_color3     SpringGreen
#property indicator_color4     Lime
#property indicator_color5     Red
#property indicator_color6     Gold
#property indicator_style2     STYLE_DOT
#property indicator_style3     STYLE_DOT
#property  indicator_width1 1
#property  indicator_width2 1
#property  indicator_width3 1
#property  indicator_width4 3
#property  indicator_width5 3
#property  indicator_width6 3

#define PIPSTOFORCERECALC 10

extern string TimeFrame       = "Current";
extern int    TMAPeriod      = 17;
extern int    Price           = PRICE_CLOSE;
extern double ATRMultiplier   = 1.7;
extern int    ATRPeriod       = 100;
extern double TrendThreshold = 0.25;
extern bool   ShowCenterLine = true;
extern bool   nrpMode        = false;

extern bool   alertsOn        = false;
extern bool   alertsMessage   = false;
extern bool   alertsSound     = false;
extern bool   alertsEmail     = false;
extern bool   MoveEndpointEveryTick = false;
extern int    MaxBarsBack     = 1000;

extern bool   ShowTrendLine  = true;          // Show TrendLine
extern int    BarToTheRight  = 5;
extern bool   ShowPriceLabel = false;          // Show Price Label
extern color  cUpperCol = clrBlue;
extern color  cLowerCol = clrPink;
string sUpperTL = "upperTL";
string sLowerTL = "lowerTL";
string sUpperLabel = "upperLabel";
string sLowerLabel = "lowerLabel";

double tma[];
double upperBand[];
double lowerBand[];
double bull[];
double bear[];
double neutral[];

int    TimeFrameValue,
       FirstAvailableBar;
bool AlertHappened;
datetime AlertTime;
double TICK;
bool AdditionalDigit;
double  SumTMAPeriod,
        TickScaleFactor,
        Threshold,
        PriorTick,
        FullSumW;

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

int deinit()
{
   ObjectsDeleteAll();
   return(0);
}

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

void DrawCenterLine(int shift, double slope)
{

   bull[shift] = EMPTY_VALUE;
   bear[shift] = EMPTY_VALUE;
   neutral[shift] = EMPTY_VALUE;
   if (ShowCenterLine) {
      if(slope > TrendThreshold) {
         bull[shift] = tma[shift];
      }
      else if(slope < -1 * TrendThreshold) {
         bear[shift] = tma[shift];
      }
      else {
         neutral[shift] = tma[shift];
      }
   }
}

double calcTma( int intHalfLength, int intShift )
{
   double dblSum, dblSumW, dblRange;
   int inx, jnx, knx;

   dblSumW = intHalfLength + 1;
   dblSum = dblSumW * Close[intShift];
   jnx = intHalfLength;

   for ( inx = 1, jnx = intHalfLength; inx <= intHalfLength; inx++, jnx-- ) {
      dblSumW += jnx;
      dblSum += ( jnx * Close[intShift+inx] );

   }
   return( dblSum / dblSumW );
}

double calcTmaMtf( int intTF, int intHalfLength, int intUpperTfShift, double dblClose )
{
   double dblSum, dblSumW, dblRange;
   int inx, jnx, knx;

   dblSumW = intHalfLength + 1;
   dblSum = dblSumW * dblClose;
   jnx = intHalfLength;

   for ( inx = 1, jnx = intHalfLength; inx <= intHalfLength; inx++, jnx-- ) {
      dblSumW += jnx;
      dblSum += ( jnx * iClose( Symbol(), intTF, intUpperTfShift+inx ) );
   }

   return( dblSum / dblSumW );
}

double CalcTma( int inx )
{
   double tma;
   if(inx >= TMAPeriod)
      if (nrpMode) tma = iMA(NULL, 0, TMAPeriod, 0, MODE_LWMA, Price, inx); // tma = calcTma( TMAPeriod, inx );
      else       tma = CalcPureTma(inx);
   else if (nrpMode) tma = iMA(NULL, TimeFrame, TMAPeriod, 0, MODE_LWMA, Price, inx); // calcTmaMtf( TimeFrame, TMAPeriod, TMAPeriod, inx );
   else       tma = CalcTmaEstimate(inx);
   return( tma );
}

double CalcPureTma( int i )
{
   int j = TMAPeriod + 1;
   int k;
   double sum=0;
   switch (Price) {
   case     0:
      sum=j * iClose(NULL, TimeFrameValue, i);
      break;
   case     1:
      sum=j * iOpen(NULL, TimeFrameValue, i);
      break;
   case     2:
      sum=j * iHigh(NULL, TimeFrameValue, i);
      break;
   case     3:
      sum=j * iLow(NULL, TimeFrameValue, i);
      break;
   case     4:
      sum=j * (iHigh(NULL, TimeFrameValue, i)+iLow(NULL, TimeFrameValue, i))/2;
      break;
   case     5:
      sum=j * (iHigh(NULL, TimeFrameValue, i)+iLow(NULL, TimeFrameValue, i)+iClose(NULL, TimeFrameValue, i))/3;
      break;
   case     6:
      sum=j * (iHigh(NULL, TimeFrameValue, i)+iLow(NULL, TimeFrameValue, i)+iClose(NULL, TimeFrameValue, i)+iClose(NULL, TimeFrameValue, i))/4;
      break;
   default   :
      sum=j * iClose(NULL, TimeFrameValue, i);
      break;
   }

   for    (k = 1; k <= TMAPeriod; k++) {
      switch(Price) {
      case     0:
         sum = sum + (j - k) * (iClose(NULL, TimeFrameValue, i+k) + iClose(NULL, TimeFrameValue, i-k));
         break;
      case     1:
         sum = sum + (j - k) * (iOpen(NULL, TimeFrameValue, i+k) + iOpen(NULL, TimeFrameValue, i-k));
         break;
      case     2:
         sum = sum + (j - k) * (iHigh(NULL, TimeFrameValue, i+k) + iHigh(NULL, TimeFrameValue, i-k));
         break;
      case     3:
         sum = sum + (j - k) * (iLow(NULL, TimeFrameValue, i+k) + iLow(NULL, TimeFrameValue, i-k));
         break;

      case     4:
         sum = sum + (j - k) * (
                  (iHigh(NULL, TimeFrameValue, i+k) + iLow(NULL, TimeFrameValue, i+k))/2 +
                  (iHigh(NULL, TimeFrameValue, i-k) + iLow(NULL, TimeFrameValue, i-k))/2
               );
         break;

      case     5:
         sum = sum + (j - k) * (
                  (iHigh(NULL, TimeFrameValue, i+k) + iLow(NULL, TimeFrameValue, i+k) + iClose(NULL, TimeFrameValue, i+k))/3 +
                  (iHigh(NULL, TimeFram

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

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

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

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

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

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

Стоимость полного кода
1 313₽ ≈ $16.05