digital candleabsolutestrengthtrend.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «digital candleabsolutestrengthtrend.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 4, рассчитывающий и отображающий аналитические данные на основе выбранной математической модели и цены. Поддерживает несколько режимов расчёта, различные типы скользящих средних и источники ценовых данных. Формирует сигналы и трендовые линии, отрисовываемые в отдельном окне графика. Имеет систему уведомлений через звуковые сигналы, pop-up окна и электронную почту.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame in min (TimeFrame) | Таймфрейм — Таймфрейм в минутах для расчёта и отображения индикатора. |
| Math method: 0-RSI;1-Stoch;2-DMI;3-MACD (MathMode) | Математический режим — Выбор базовой математической модели: RSI, Stochastic, DMI или MACD. |
| Price = 0...10 (see List of Prices) (Price) | Цена — Источник ценовых данных для расчёта (Close, Open, High, Low и другие). |
| Period of evaluation (Length) | Длина периода — Основной период оценки для расчёта индикатора. |
| Period of PreSmoothing (PreSmooth) | Предварительное сглаживание — Период предварительного сглаживания исходных данных. |
| Period of smoothing (Smooth) | Финальное сглаживание — Период финального сглаживания рассчитанных значений. |
| See list above (MA_Method) | Метод скользящей средней — Тип скользящей средней, используемой в расчётах. |
| Levels Mode: 0-Standard OverBought/OverSold (LevelsMode) | Режим уровней — Режим определения уровней перекупленности и перепроданности. |
| Strength Level (ex.70) (StrengthLevel) | Уровень силы — Пороговое значение для определения сильного направления. |
| Weakness Level (ex.30) (WeaknessLevel) | Уровень слабости — Пороговое значение для определения слабого направления. |
| LookBack Period for LevelsMode=1,2 (LookBackPeriod) | Период просмотра — Количество баров для анализа при расчёте уровней в режимах 1 и 2. |
| Upper Band Multiplier for LevelsMode=1 (UpperMultiplier) | Множитель верхней полосы — Множитель для расчёта верхней границы уровня. |
| Lower Band Multiplier for LevelsMode=1 (LowerMultiplier) | Множитель нижней полосы — Множитель для расчёта нижней границы уровня. |
| alerts | Блок уведомлений — Разделитель группы настроек уведомлений. |
| AlertMode | Режим оповещений — Включение или отключение системы оповещений. |
| Number of sounds after Signal (SoundsNumber) | Количество звуков — Число звуковых сигналов при появлении сигнала. |
| Pause in sec between sounds (SoundsPause) | Пауза между звуками — Пауза в секундах между повторными звуковыми сигналами. |
| UpSound | Звук роста — Файл звука для сигнала на покупку. |
| DnSound | Звук падения — Файл звука для сигнала на продажу. |
| 0-on,1-off (EmailMode) | Режим email — Включение или отключение отправки email-уведомлений. |
| 0-on,1-off (EmailsNumber) | Количество email — Число email-сообщений при отправке сигнала. |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 RoyalBlue
#property indicator_color2 Coral
#property indicator_width1 1
#property indicator_width2 1
#property indicator_color3 RoyalBlue
#property indicator_color4 Coral
#property indicator_width3 3
#property indicator_width4 3
extern int TimeFrame = 0; // TimeFrame in min
extern int MathMode = 1; // Math method: 0-RSI;1-Stoch;2-DMI;3-MACD
extern int Price = 0; // Price = 0...10 (see List of Prices)
extern int Length = 9; // Period of evaluation
extern int PreSmooth = 1; // Period of PreSmoothing
extern int Smooth = 1; // Period of smoothing
extern int MA_Method = 0; // See list above
extern int LevelsMode = 0; // Levels Mode: 0-Standard OverBought/OverSold
extern double StrengthLevel = 70; // Strength Level (ex.70)
extern double WeaknessLevel = 30; // Weakness 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 upSignal[];
double dnSignal[];
double upTrend[];
double dnTrend[];
double Bulls[];
double Bears[];
double lbulls[];
double lbears[];
double tmp[][8][2], ma[8][3], bulls[], bears[], mMA[2], mLo[2], smin[2], smax[2], HiArray[], LoArray[];
int draw_begin, masize, trend[3];
string TF, IndicatorName, short_name, math_name, price_name, maname, zone_name, prevmess, prevemail;
double upsum, dnsum, _point;
datetime prevtime[8], ptime, preTime;
int init()
{
// код доступен только после оплаты
}
int deinit() {Comment(""); return(0);}
int start()
{
// код доступен только после оплаты
}
void _AllAbsStrength(int limit)
{
double upPivot, dnPivot;
if(ArraySize(bulls) != Bars)
{
ArraySetAsSeries(bulls,false); ArraySetAsSeries(bears,false);
ArrayResize(bulls,Bars); ArrayResize(bears,Bars);
ArraySetAsSeries(bulls,true); ArraySetAsSeries(bears,true);
}
for(int shift=limit;shift>=0;shift--)
{
if(ptime != Time[shift])
{
mMA[1] = mMA[0];
mLo[1] = mLo[0];
smin[1] = smin[0];
smax[1] = smax[0];
trend[2] = trend[1];
trend[1] = trend[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);
Bulls[shift] = allAveragesOnArray(4,lbulls,Smooth,MA_Method,masize,shift)/_point;
Bears[shift] = allAveragesOnArray(5,lbears,Smooth,MA_Method,masize,shift)/_point;
if(LevelsMode == 0)
{
if(StrengthLevel > 0) double strength = StrengthLevel/100*(Bulls[shift] + Bears[shift]);
if(WeaknessLevel > 0) double weakness = WeaknessLevel/100*(Bulls[shift] + Bears[shift]);
}
else
if(LevelsMode == 1 && shift < Bars - (LookBackPeriod+Length))
{
for(int j = 0; j < LookBackPeriod; j++)
{
HiArray[j] = MathMax(Bulls[shift+j],Bears[shift+j]);
LoArray[j] = MathMin(Bulls[shift+j],Bears[shift+j]);
}
if(UpperMultiplier > 0) strength = SMAOnArray(HiArray,LookBackPeriod,0) + UpperMultiplier*stdDev(HiArray,LookBackPeriod);
if(LowerMultiplier > 0) weakness = SMAOnArray(LoArray,LookBackPeriod,0) - LowerMultiplier*stdDev(LoArray,LookBackPeriod);
}
else
if(LevelsMode == 2 && shift < Bars -(LookBackPeriod + Length))
{
for(j = 0; j < LookBackPeriod; j++)
{
HiArray[j] = MathMax(Bulls[shift+j],Bears[shift+j]);
LoArray[j] = MathMin(Bulls[shift+j],Bears[shift+j]);
}
upPivot = getPivots(2,HiArray,LookBackPeriod,0);
dnPivot = getPivots(3,LoArray,LookBackPeriod,0);
smax[0] = upPivot;
smin[0] = dnPivot;
strength = smax[0] - (smax[0] - smin[0])*(1 - StrengthLevel/100);
weakness = smin[0] + (smax[0] - smin[0])*WeaknessLevel/100;
}
trend[0] = trend[1];
if(Bulls[shift] > strength && Bulls[shift] > Bears[shift]) trend[0] = 1;
if(Bears[shift] > strength && Bulls[shift] < Bears[shift]) trend[0] =-1;
upSignal[shift] = EMPTY_VALUE;
dnSignal[shift] = EMPTY_VALUE;
upTrend[shift] = EMPTY_VALUE;
dnTrend[shift] = EMPTY_VALUE;
double delta = 0.5*iATR(NULL,0,10,shift);
if(trend[0] > 0)
{
if(trend[1] < 0) upSignal[shift] = Low[shift] - delta;
if(Bulls[shift] > Bears[shift])
{
upTrend[shift] = MathMax(Open[shift],Close[shift]);
dnTrend[shift] = MathMin(Open[shift],Close[shift]);
}
}
else
if(trend[0] < 0)
{
if(trend[1] > 0) dnSignal[shift] = High[shift] + delta;
if(Bears[shift] > Bulls[shift])
{
upTrend[shift] = MathMin(Open[shift],Close[shift]);
dnTrend[shift] = MathMax(Open[shift],Close[shift]);
}
}
}
}
if(AlertMode > 0)
{
bool uptrend = trend[1] > 0 && trend[2] <= 0;
bool dntrend = trend[1] < 0 && trend[2] >= 0;
if(uptrend || dntrend)
{
if(isNewBar(TimeFrame))
{
BoxAlert(uptrend," : BUY Signal at " +DoubleToStr(Close[1],Digits)+", StopLoss at "+DoubleToStr(upSignal[1],Digits));
BoxAlert(dntrend," : SELL Signal at "+DoubleToStr(Close[1],Digits)+", StopLoss at "+DoubleToStr(dnSignal[1],Digits));
}
WarningSound(uptrend,SoundsNumber,SoundsPause,UpSound,Time[1]);
WarningSound(dntrend,SoundsNumber,SoundsPause,DnSound,Time[1]);
if(EmailMode > 0)
{
EmailAlert(uptrend,"BUY" ," : BUY Signal at " +DoubleToStr(Close[1],Digits)+", StopLoss at "+DoubleToStr(upSignal[1],Digits),EmailsNumber);
EmailAlert(dntrend,"SELL"," : SELL Signal at "+DoubleToStr(Close[1],Digits)+", StopLoss at "+DoubleToStr(dnSignal[1],Digits),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)
{
if(bar >= Bars - 2) double wilder = iMA(NULL,0,1,0,0,price,bar); //SMA(array1,per,bar);
else
wilder = prev + (iMA(NULL,0,1,0,0,price,bar) - prev)/per;
return(wilder);
}
double WilderOnArray(double price,double prev,int per,int bar)
{
if(bar >= Bars - 2) double wilder = price; //SMA(array1,per,bar);
else
wilder = prev + (price - prev)/per;
return(wilder);
}
double LWMA(int price,int per,int bar)
{
double Sum = 0;
double Weight = 0;
for(int i = 0;i < per;i++)
{
Weight+= (per - i);
Sum += iMA(NULL,0,1,0,0,price,bar+i)*(per - i);
}
if(Weight>0) double lwma = Sum/Weight;
else lwma = 0;
return(lwma);
}
double LWMAOnArray(double& array[],int per,int bar)
{
double Sum = 0;
double Weight = 0;
for(int i = 0;i < per;i++)
{
Weight+= (per - i);
Sum += array[bar+i]*(per - i);
}
if(Weight>0) double lwma = Sum/Weight;
else lwma = 0;
return(lwma);
}
double SineWMA(int price,int per,int bar)
{
double pi = 3.1415926535;
double Sum = 0;
double Weight = 0;
for(int i = 0;i < per;i++)
{
Weight+= MathSin(pi*(i+1)/(per+1));
Sum += iMA(NULL,0,1,0,0,price,bar+i)*MathSin(pi*(i+1)/(per+1));
}
Показано первые 50% кода (символов: 30316)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.