Extreme TMA System
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «!mth_fasttmaline_edit3.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 4, рассчитывающий полосы на основе тригонометрического скользящего среднего (TMA). Отображает верхнюю и нижнюю границы полос, рассчитанных с использованием ATR, а также центральную линию, цвет которой меняется в зависимости от направления тренда. Поддерживает анализ на разных таймфреймах.
Включает динамические трендовые линии и ценовые метки, которые обновляются в реальном времени. Индикатор позволяет включить режим замены расчёта TMA на встроенный LWMA-расчёт. Доступны настройки отображения центральной линии, толщины и цвета полос.
Поддерживает систему уведомлений: всплывающие сообщения, звуковые сигналы и email-оповещения при пробое цены верхней или нижней границы полос. Возможен выбор частоты обновления и глубины исторических данных для отрисовки.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм для расчёта индикатора (например, Current, M15, H1, D1) |
| TMAPeriod | Период тригонометрического скользящего среднего (TMA) |
| Price | Тип цены для расчёта TMA (0 — Close, 1 — Open, 2 — High, 3 — Low и другие варианты) |
| ATRMultiplier | Множитель ATR для расчёта ширины верхней и нижней полос |
| ATRPeriod | Период индикатора ATR, используемого для расчёта ширины полос |
| TrendThreshold | Порог наклона для определения направления тренда центральной линии (бычий, медвежий или нейтральный) |
| ShowCenterLine | Переключатель отображения центральной линии, цвет которой определяется направлением тренда |
| nrpMode | Переключатель режима замены расчёта TMA на встроенный LWMA-расчёт |
| alertsOn | Главный переключатель системы уведомлений о пробое верхней или нижней полосы |
| alertsMessage | Переключатель всплывающих текстовых уведомлений при пробое полосы |
| alertsSound | Переключатель воспроизведения звукового сигнала при пробое полосы |
| alertsEmail | Переключатель отправки email-уведомлений при пробое полосы |
| 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 = 2;
extern bool ShowPriceLabel = true; // 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, TimeFraПоказано первые 50% кода (символов: 13356)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.