AllAbsoluteQQE
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «allabsoluteqqe_v2.3.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
AllAbsoluteQQE_v2.3 — пользовательский индикатор для MetaTrader 4, отображаемый в отдельном окне. Он рассчитывает аналитическую линию разницы и связанные с ней уровни, используя выбранный математический метод, сглаживание и один из множества вариантов скользящих средних. Индикатор поддерживает несколько режимов построения уровней и может подавать звуковые и почтовые уведомления при появлении сигналов.
Настройки позволяют задать таймфрейм расчёта, метод математической обработки, цену, периоды оценки и сглаживания, метод средней, параметры усреднения диапазона и множитель. Дополнительно настраиваются режим сигналов, режим уровней, пороги перекупленности/перепроданности, параметры канала и уведомлений.
Индикатор выводит буферы разницы, восходящего и нисходящего тренда, сигнальные стрелки, а также линии перекупленности и перепроданности. При включённом режиме оповещений он формирует предупреждения, воспроизводит звуки и отправляет письма при появлении сигналов.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame in min (TimeFrame) | Таймфрейм — Таймфрейм в минутах, используемый для расчёта индикатора. |
| Math method: 0-RSI;1-Stoch;2-DMI (MathMode) | Математический метод — Метод математической обработки: 0 — RSI, 1 — Stoch, 2 — DMI. |
| Price = 0...10 (see List of Prices) (Price) | Цена — Цена, используемая в расчётах, от 0 до 10 согласно списку цен. |
| Period of evaluation (Length) | Период оценки — Период оценки, используемый в расчётах индикатора. |
| Period of PreSmoothing (PreSmooth) | Период предсглаживания — Период предварительного сглаживания. |
| Period of smoothing (Smooth) | Период сглаживания — Период сглаживания. |
| According to list above (MA_Method) | Метод средней — Метод скользящей средней, выбираемый из списка поддерживаемых вариантов. |
| Average Range Period (RangeAvgLength) | Период усреднения диапазона — Период усреднения диапазона. |
| Average Range Multiplier (Multiplier) | Множитель диапазона — Множитель среднего диапазона, влияющий на ширину полос. |
| 0-off,1-on (SignalMode) | Режим сигналов — Включает или отключает режим сигналов. |
| Levels Mode: 0-Standard OverBought/OverSold (LevelsMode) | Режим уровней — Режим построения уровней: 0 — стандартные уровни перекупленности/перепроданности, 1 — полосы стандартного отклонения, 2 — канал по максимумам и минимумам. |
| Overbougt Level (ex.70) (OverboughtLevel) | Уровень перекупленности — Уровень перекупленности, например 70. |
| Oversold Level (ex.30) (OversoldLevel) | Уровень перепроданности — Уровень перепроданности, например 30. |
| LookBack Period for LevelsMode=1,2 (LookBackPeriod) | Период обратного просмотра — Период обратного просмотра, используемый для режимов уровней 1 и 2. |
| Upper Band Multiplier for LevelsMode=1 (UpperMultiplier) | Множитель верхней границы — Множитель верхней границы для режима уровней 1. |
| Lower Band Multiplier for LevelsMode=1 (LowerMultiplier) | Множитель нижней границы — Множитель нижней границы для режима уровней 1. |
| alerts | Оповещения и Email — Разделитель группы настроек оповещений и почтовых уведомлений. |
| AlertMode | Режим оповещений — Включает или отключает режим звуковых и почтовых оповещений. |
| Number of sounds after Signal (SoundsNumber) | Количество звуков — Количество звуковых сигналов после появления сигнала. |
| Pause in sec between sounds (SoundsPause) | Пауза между звуками — Пауза в секундах между звуковыми сигналами. |
| UpSound | Звук для восходящего сигнала — Имя звукового файла, воспроизводимого при восходящем сигнале. |
| DnSound | Звук для нисходящего сигнала — Имя звукового файла, воспроизводимого при нисходящем сигнале. |
| 0-on,1-off (EmailMode) | Режим Email — Включает или отключает отправку почтовых уведомлений. |
| 0-on,1-off (EmailsNumber) | Количество Email — Количество отправляемых почтовых уведомлений. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 Silver
#property indicator_color2 RoyalBlue
#property indicator_color3 Tomato
#property indicator_color4 RoyalBlue
#property indicator_color5 Tomato
#property indicator_color6 Gray
#property indicator_color7 Gray
#property indicator_width1 2
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 2
#property indicator_width5 2
#property indicator_style6 4
#property indicator_style7 4
#property indicator_level1 0
#property indicator_levelcolor DimGray
extern int TimeFrame = 0; // TimeFrame in min
extern int MathMode = 0; // Math method: 0-RSI;1-Stoch;2-DMI
extern int Price = 0; // Price = 0...10 (see List of Prices)
extern int Length = 27; // Period of evaluation
extern int PreSmooth = 1; // Period of PreSmoothing
extern int Smooth = 5; // Period of smoothing
extern int MA_Method = 1; // According to list above
extern int RangeAvgLength = 27; // Average Range Period
extern double Multiplier = 4.236; // Average Range Multiplier
extern int SignalMode = 1; // 0-off,1-on
extern int LevelsMode = 2; // Levels Mode: 0-Standard OverBought/OverSold
extern double OverboughtLevel = 80; // Overbougt Level (ex.70)
extern double OversoldLevel = 20; // Oversold Level (ex.30)
extern int LookBackPeriod = 20; // LookBack Period for LevelsMode=1,2
extern double UpperMultiplier = 1; // Upper Band Multiplier for LevelsMode=1
extern double LowerMultiplier = 1; // Lower Band Multiplier for LevelsMode=1
extern string alerts = "--- Alerts & Emails ---";
extern int AlertMode = 0;
extern int SoundsNumber = 5; //Number of sounds after Signal
extern int SoundsPause = 5; //Pause in sec between sounds
extern string UpSound = "alert.wav";
extern string DnSound = "alert2.wav";
extern int EmailMode = *; //0-on,1-off
extern int EmailsNumber = *; //0-on,1-off
double Difference[];
double upTrend[];
double dnTrend[];
double upSignal[];
double dnSignal[];
double Overbought[];
double Oversold[];
double tmp[][7][2], ma[7][3], bulls[], bears[], lbulls[], lbears[], trend[3], mMA[2], mLo[2], smin[2], smax[2], HiArray[], LoArray[];
int draw_begin, masize, arraysize;
string TF, IndicatorName, short_name, math_name, price_name, ma_name, zone_name, prevmess, prevemail;
double hiDiff, loDiff, alpha, delta1[2], delta2[2], upband[2], loband[2], _point;
datetime prevtime[7], ptime, preTime;
int init()
{
// код доступен только после оплаты
}
int deinit() {Comment(""); return(0);}
int start()
{
// код доступен только после оплаты
}
void _AllAbsQQE(int limit)
{
double upPivot, dnPivot;
if(ArraySize(bulls) != Bars)
{
ArraySetAsSeries(bulls,false); ArraySetAsSeries(lbulls,false);
ArraySetAsSeries(bears,false); ArraySetAsSeries(lbears,false);
ArrayResize(bulls,Bars); ArrayResize(lbulls,Bars);
ArrayResize(bears,Bars); ArrayResize(lbears,Bars);
ArraySetAsSeries(bulls,true); ArraySetAsSeries(lbulls,true);
ArraySetAsSeries(bears,true); ArraySetAsSeries(lbears,true);
}
for(int shift=limit;shift>=0;shift--)
{
if(ptime != Time[shift])
{
mMA[1] = mMA[0];
mLo[1] = mLo[0];
trend[2] = trend[1]; trend[1] = trend[0];
upband[1] = upband[0];
loband[1] = loband[0];
delta1[1] = delta1[0];
delta2[1] = delta2[0];
ptime = Time[shift];
}
if(MathMode < 2) int price = Price; else price = 2;
mMA[0] = allAverages(0,price,PreSmooth,MA_Method,masize,shift);
if(shift < Bars-2)
{
if (MathMode == 0)
{
bulls[shift] = 0.5*(MathAbs(mMA[0] - mMA[1]) + (mMA[0] - mMA[1]));
bears[shift] = 0.5*(MathAbs(mMA[0] - mMA[1]) - (mMA[0] - mMA[1]));
}
else
if (MathMode == 1)
{
double up = 0;
double dn = 10000000000;
for(int i=0;i<Length;i++)
{
up = MathMax(up,High[shift+i]);
dn = MathMin(dn,Low [shift+i]);
}
bulls[shift] = mMA[0] - dn;
bears[shift] = up - mMA[0];
}
else
if (MathMode == 2)
{
mLo[0] = allAverages(1,3,PreSmooth,MA_Method,masize,shift);
bulls[shift] = MathMax(0,0.5*(MathAbs(mMA[0] - mMA[1]) + (mMA[0] - mMA[1])));
bears[shift] = MathMax(0,0.5*(MathAbs(mLo[1] - mLo[0]) + (mLo[1] - mLo[0])));
if (bulls[shift] > bears[shift]) bears[shift] = 0;
else
if (bulls[shift] < bears[shift]) bulls[shift] = 0;
else
if (bulls[shift] == bears[shift]) {bulls[shift] = 0; bears[shift] = 0;}
}
if(MathMode == 1) int len = 1; else len = Length;
lbulls[shift] = allAveragesOnArray(2,bulls,len,MA_Method,masize,shift);
lbears[shift] = allAveragesOnArray(3,bears,len,MA_Method,masize,shift);
double Bulls = allAveragesOnArray(4,lbulls,Smooth,MA_Method,masize,shift)/_point;
double Bears = allAveragesOnArray(5,lbears,Smooth,MA_Method,masize,shift)/_point;
Difference[shift] = Bulls - Bears;
if(Difference[shift] > Difference[shift+1]) {hiDiff = Difference[shift]; loDiff = Difference[shift+1];}
else
if(Difference[shift] < Difference[shift+1]) {hiDiff = Difference[shift+1]; loDiff = Difference[shift];}
else
{hiDiff = Difference[shift]; loDiff = Difference[shift];}
double range = hiDiff - loDiff;
delta1[0] = delta1[1] + alpha*(range - delta1[1]);
delta2[0] = delta2[1] + alpha*(delta1[0] - delta2[1]);
upband[0] = Difference[shift] + Multiplier*delta2[0];
loband[0] = Difference[shift] - Multiplier*delta2[0];
trend[0] = trend[1];
if(Difference[shift] > upband[1]) trend[0] = 1;
if(Difference[shift] < loband[1]) trend[0] =-1;
upTrend[shift] = EMPTY_VALUE;
dnTrend[shift] = EMPTY_VALUE;
upSignal[shift] = EMPTY_VALUE;
dnSignal[shift] = EMPTY_VALUE;
if(trend[0] > 0)
{
if(loband[0] < loband[1]) loband[0] = loband[1];
upTrend[shift] = loband[0];
if(SignalMode > 0 && trend[1] < 0) upSignal[shift] = loband[0];
}
else
if(trend[0] < 0)
{
if(upband[0] > upband[1]) upband[0] = upband[1];
dnTrend[shift] = upband[0];
if(SignalMode > 0 && trend[1] > 0) dnSignal[shift] = upband[0];
}
if(LevelsMode == 0)
{
if(OverboughtLevel > 0) Overbought[shift] = (0.02 * OverboughtLevel - 1)*(Bulls + Bears);
if(OversoldLevel > 0) Oversold[shift] = (0.02 * OversoldLevel - 1)*(Bulls + Bears);
}
else
if(LevelsMode == 1 && shift < Bars - (LookBackPeriod+Length))
{
for(int j = 0; j < LookBackPeriod; j++)
{
HiArray[j] = Difference[shift+j];
LoArray[j] = Difference[shift+j];
}
if(UpperMultiplier > 0) Overbought[shift] = SMAOnArray(HiArray,LookBackPeriod,0) + UpperMultiplier*stdDev(HiArray,LookBackPeriod);
if(LowerMultiplier > 0) Oversold[shift] = SMAOnArray(LoArray,LookBackPeriod,0) - LowerMultiplier*stdDev(LoArray,LookBackPeriod);
}
else
if(LevelsMode == 2 && shift < Bars -(LookBackPeriod + Length))
{
for(j = 0; j < LookBackPeriod; j++)
{
HiArray[j] = Difference[shift+j];
LoArray[j] = Difference[shift+j];
}
upPivot = getPivots(2,HiArray,LookBackPeriod,0);
dnPivot = getPivots(3,LoArray,LookBackPeriod,0);
Overbought[shift] = upPivot - (upPivot - dnPivot)*(1 - OverboughtLevel/100);
Oversold[shift] = dnPivot + (upPivot - dnPivot)*OversoldLevel/100;
}
}
if(AlertMode > 0)
{
bool upsignal = false, dnsignal = false;
string upmess, dnmess, upsubj, dnsubj, sprice = DoubleToStr(Close[1],Digits);
if(trend[1] > 0 && trend[2] <= 0) {upsignal = true; upmess = "BUY Signal" ; upsubj = "BUY" ;}
else
if(trend[1] < 0 && trend[2] >= 0) {dnsignal = true; dnmess = "SELL Signal"; dnsubj = "SELL";}
else
if(Difference[1] >= Overbought[1] && Difference[1] >= 0 && (Difference[2] < Overbought[2] || Difference[2] < 0)) {upsignal = true; upmess = "OverBought Signal"; upsubj = "OverBought";}
else
if(Difference[1] <= Oversold[1] && Difference[1] <= 0 && (Difference[2] > Oversold[2] || Difference[2] > 0)) {dnsignal = true; dnmess = "OverSold Signal" ; dnsubj = "OverSold" ;}
if(upsignal || dnsignal)
{
if(isNewBar(TimeFrame))
{
BoxAlert(upsignal," : "+upmess+" at "+sprice);
BoxAlert(dnsignal," : "+dnmess+" at "+sprice);
}
WarningSound(upsignal,SoundsNumber,SoundsPause,UpSound,Time[1]);
WarningSound(dnsignal,SoundsNumber,SoundsPause,DnSound,Time[1]);
if(EmailMode > 0)
{
EmailAlert(upsignal,upsubj," : "+upmess+" at "+sprice,EmailsNumber);
EmailAlert(dnsignal,dnsubj," : "+dnmess+" at "+sprice,EmailsNumber);
}
}
}
}
}
string averageName(int mode,int& _arraysize)
{
string _ma_name = "";
switch(mode)
{
case 1 : _ma_name="EMA" ; break;
case 2 : _ma_name="Wilder" ; break;
case 3 : _ma_name="LWMA" ; break;
case 4 : _ma_name="SineWMA" ; break;
case 5 : _ma_name="TriMA" ; break;
case 6 : _ma_name="LSMA" ; break;
case 7 : _ma_name="SMMA" ; break;
case 8 : _ma_name="HMA" ; break;
case 9 : _ma_name="ZeroLagEMA"; break;
case 10: _ma_name="DEMA" ; _arraysize = 2; break;
case 11: _ma_name="T3 basic" ; _arraysize = 6; break;
case 12: _ma_name="InstTrend" ; break;
case 13: _ma_name="Median" ; break;
case 14: _ma_name="GeoMean" ; break;
case 15: _ma_name="REMA" ; break;
case 16: _ma_name="ILRS" ; break;
case 17: _ma_name="IE/2" ; break;
case 18: _ma_name="TriMA_gen" ; break;
case 19: _ma_name="VWMA" ; break;
case 20: _ma_name="JSmooth" ; _arraysize = 5; break;
case 21: _ma_name="SMA_eq" ; break;
case 22: _ma_name="ALMA" ; break;
case 23: _ma_name="TEMA" ; _arraysize = 4; break;
case 24: _ma_name="T3" ; _arraysize = 6; break;
case 25: _ma_name="Laguerre" ; _arraysize = 4; break;
default: _ma_name="SMA";
}
return(_ma_name);
}
double allAverages(int index,int price,int period,int mode,int _arraysize,int bar)
{
double MA[3];
if(prevtime[index] != Time[bar])
{
ma[index][2] = ma[index][1];
ma[index][1] = ma[index][0];
for(int i=0;i<_arraysize;i++) tmp[i][index][1] = tmp[i][index][0];
prevtime[index] = Time[bar];
}
for(i=0;i<3;i++) MA[i] = ma[index][i];
switch(mode)
{
case 1 : ma[index][0] = EMA(price,ma[index][1],period,bar); break;
case 2 : ma[index][0] = Wilder(price,ma[index][1],period,bar); break;
case 3 : ma[index][0] = LWMA(price,period,bar); break;
case 4 : ma[index][0] = SineWMA(price,period,bar); break;
case 5 : ma[index][0] = TriMA(price,period,bar); break;
case 6 : ma[index][0] = LSMA(price,period,bar); break;
case 7 : ma[index][0] = SMMA(price,ma[index][1],period,bar); break;
case 8 : ma[index][0] = HMA(price,period,bar); break;
case 9 : ma[index][0] = ZeroLagEMA(price,ma[index][1],period,bar); break;
case 10: ma[index][0] = DEMA(index,0,price,period,1,bar); break;
case 11: ma[index][0] = T3_basic(index,0,price,period,0.7,bar); break;
case 12: ma[index][0] = ITrend(price,MA,period,bar); break;
case 13: ma[index][0] = Median(price,period,bar); break;
case 14: ma[index][0] = GeoMean(price,period,bar); break;
case 15: ma[index][0] = REMA(price,MA,period,0.5,bar); break;
case 16: ma[index][0] = ILRS(price,period,bar); break;
case 17: ma[index][0] = IE2(price,period,bar); break;
case 18: ma[index][0] = TriMA_gen(price,period,bar); break;
case 19: ma[index][0] = VWMA(price,period,bar); break;
case 20: ma[index][0] = JSmooth(index,0,price,period,1,bar); break;
case 21: ma[index][0] = SMA_eq(price,MA,period,bar); break;
case 22: ma[index][0] = ALMA(price,period,0.85,8,bar); break;
case 23: ma[index][0] = TEMA(index,price,period,1,bar); break;
case 24: ma[index][0] = T3(index,0,price,period,0.7,bar); break;
case 25: ma[index][0] = Laguerre(index,price,period,4,bar); break;
default: ma[index][0] = SMA(price,period,bar); break;
}
return(ma[index][0]);
}
double allAveragesOnArray(int index,double& price[],int period,int mode,int _arraysize,int bar)
{
double MA[3];
if(prevtime[index] != Time[bar])
{
ma[index][2] = ma[index][1];
ma[index][1] = ma[index][0];
for(int i=0;i<_arraysize;i++) tmp[i][index][1] = tmp[i][index][0];
prevtime[index] = Time[bar];
}
for(i=0;i<3;i++) MA[i] = ma[index][i];
switch(mode)
{
case 1 : ma[index][0] = EMAOnArray(price[bar],ma[index][1],period,bar); break;
case 2 : ma[index][0] = WilderOnArray(price[bar],ma[index][1],period,bar); break;
case 3 : ma[index][0] = LWMAOnArray(price,period,bar); break;
case 4 : ma[index][0] = SineWMAOnArray(price,period,bar); break;
case 5 : ma[index][0] = TriMAOnArray(price,period,bar); break;
case 6 : ma[index][0] = LSMAOnArray(price,period,bar); break;
case 7 : ma[index][0] = SMMAOnArray(price,ma[index][1],period,bar); break;
case 8 : ma[index][0] = HMAOnArray(price,period,bar); break;
case 9 : ma[index][0] = ZeroLagEMAOnArray(price,ma[index][1],period,bar); break;
case 10: ma[index][0] = DEMAOnArray(index,0,price[bar],period,1,bar); break;
case 11: ma[index][0] = T3_basicOnArray(index,0,price[bar],period,0.7,bar); break;
case 12: ma[index][0] = ITrendOnArray(price,MA,period,bar); break;
case 13: ma[index][0] = MedianOnArray(price,period,bar); break;
case 14: ma[index][0] = GeoMeanOnArray(price,period,bar); break;
case 15: ma[index][0] = REMAOnArray(price[bar],MA,period,0.5,bar); break;
case 16: ma[index][0] = ILRSOnArray(price,period,bar); break;
case 17: ma[index][0] = IE2OnArray(price,period,bar); break;
case 18: ma[index][0] = TriMA_genOnArray(price,period,bar); break;
case 19: ma[index][0] = VWMAOnArray(price,period,bar); break;
case 20: ma[index][0] = JSmoothOnArray(index,0,price[bar],period,1,bar); break;
case 21: ma[index][0] = SMA_eqOnArray(price,MA,period,bar); break;
case 22: ma[index][0] = ALMAOnArray(price,period,0.85,8,bar); break;
case 23: ma[index][0] = TEMAOnArray(index,price[bar],period,1,bar); break;
case 24: ma[index][0] = T3OnArray(index,0,price[bar],period,0.7,bar); break;
case 25: ma[index][0] = LaguerreOnArray(index,price[bar],period,4,bar); break;
default: ma[index][0] = SMAOnArray(price,period,bar); break;
}
return(ma[index][0]);
}
double SMA(int price,int per,int bar)
{
double Sum = 0;
for(int i = 0;i < per;i++) Sum += iMA(NULL,0,1,0,0,price,bar+i);
return(Sum/per);
}
double SMAOnArray(double& array[],int per,int bar)
{
double Sum = 0;
for(int i = 0;i < per;i++) Sum += array[bar+i];
return(Sum/per);
}
double EMA(int price,double prev,int per,int bar)
{
if(bar >= Bars - 2) double ema = iMA(NULL,0,1,0,0,price,bar);
else
ema = prev + 2.0/(1+per)*(iMA(NULL,0,1,0,0,price,bar) - prev);
return(ema);
}
double EMAOnArray(double price,double prev,int per,int bar)
{
if(bar >= Bars - 2) double ema = price;
else
ema = prev + 2.0/(1+per)*(price - prev);
return(ema);
}
double Wilder(int price,double prev,int per,int bar)
{
Показано первые 50% кода (символов: 32533)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.