Как-то так.
Индикатор, который Вы выложили, декомпилированый, поэтому я его в советник не включаю. В следующий раз вообще не буду браться за работу, если увижу выложенный программный продукт после декомпиляции.
Kalkin писал(а):Как-то так.
Индикатор, который Вы выложили, декомпилированый, поэтому я его в советник не включаю. В следующий раз вообще не буду браться за работу, если увижу выложенный программный продукт после декомпиляции.
//+------------------------------------------------------------------+
//| Relative Strength Index |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars=IndicatorCounted();
double rel,negative,positive;
//----
if(Bars<=RSIPeriod) return(0);
//---- initial zero
if(counted_bars<1)
for(i=1;i<=RSIPeriod;i++) RSIBuffer[Bars-i]=0.0;
//----
i=Bars-RSIPeriod-1;
if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
while(i>=0)
{
double sumn=0.0,sump=0.0;
if(i==Bars-RSIPeriod-1)
{
int k=Bars-2;
//---- initial accumulation
while(k>=i)
{
rel=Close[k]-Close[k+1];
if(rel>0) sump+=rel;
else sumn-=rel;
k--;
}
positive=sump/RSIPeriod;
negative=sumn/RSIPeriod;
}
else
{
//---- smoothed moving average
rel=Close[i]-Close[i+1];
if(rel>0) sump=rel;
else sumn=-rel;
positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
}
PosBuffer[i]=positive;
NegBuffer[i]=negative;
if(negative==0.0) RSIBuffer[i]=0.0;
else RSIBuffer[i]=100.0-100.0/(1+positive/negative);
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+
int start() {
double ld_8;
double ld_16;
double ld_24;
double ld_32;
double ld_40;
int l_ind_counted_4 = IndicatorCounted();
if (Bars <= RSIPeriod) return (0);
if (l_ind_counted_4 < 1) for (int li_0 = 1; li_0 <= RSIPeriod; li_0++) g_ibuf_80[Bars - li_0] = 0.0;
li_0 = Bars - RSIPeriod - 1;
if (l_ind_counted_4 >= RSIPeriod) li_0 = Bars - l_ind_counted_4 - 1;
while (li_0 >= 0) {
ld_32 = 0.0;
ld_40 = 0.0;
if (li_0 == Bars - RSIPeriod - 1) {
for (int li_48 = Bars - 2; li_48 >= li_0; li_48--) {
ld_8 = Close[li_48] - (Close[li_48 + 1]);
if (ld_8 > 0.0) ld_40 += ld_8;
else ld_32 -= ld_8;
}
ld_24 = ld_40 / RSIPeriod;
ld_16 = ld_32 / RSIPeriod;
} else {
ld_8 = Close[li_0] - (Close[li_0 + 1]);
if (ld_8 > 0.0) ld_40 = ld_8;
else ld_32 = -ld_8;
ld_24 = ((g_ibuf_84[li_0 + 1]) * (RSIPeriod - 1) + ld_40) / RSIPeriod;
ld_16 = ((g_ibuf_88[li_0 + 1]) * (RSIPeriod - 1) + ld_32) / RSIPeriod;
}
g_ibuf_84[li_0] = ld_24;
g_ibuf_88[li_0] = ld_16;
if (ld_16 == 0.0) g_ibuf_80[li_0] = 0.0;
else g_ibuf_80[li_0] = 100.0 - 100.0 / (ld_24 / ld_16 + 1.0);
li_0--;
}
return (0);
}
Kalkin писал(а):В декомпилировнном файле имена переменных обезличены и состоят из букв, соответствующих типу переменной и цифр, а также отсутствуют какие-либо поясняющие комментарии. Например, индикатор RSI из стандартной поставки Метатрейдера. Вот так выглядит текст, который сделал программист:
- Код: выделить все
//+------------------------------------------------------------------+
//| Relative Strength Index |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars=IndicatorCounted();
double rel,negative,positive;
//----
if(Bars<=RSIPeriod) return(0);
//---- initial zero
if(counted_bars<1)
for(i=1;i<=RSIPeriod;i++) RSIBuffer[Bars-i]=0.0;
//----
i=Bars-RSIPeriod-1;
if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
while(i>=0)
{
double sumn=0.0,sump=0.0;
if(i==Bars-RSIPeriod-1)
{
int k=Bars-2;
//---- initial accumulation
while(k>=i)
{
rel=Close[k]-Close[k+1];
if(rel>0) sump+=rel;
else sumn-=rel;
k--;
}
positive=sump/RSIPeriod;
negative=sumn/RSIPeriod;
}
else
{
//---- smoothed moving average
rel=Close[i]-Close[i+1];
if(rel>0) sump=rel;
else sumn=-rel;
positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
}
PosBuffer[i]=positive;
NegBuffer[i]=negative;
if(negative==0.0) RSIBuffer[i]=0.0;
else RSIBuffer[i]=100.0-100.0/(1+positive/negative);
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+
А вот тот же участок кода после декомпиляции исполняемого файла:
- Код: выделить все
int start() {
double ld_8;
double ld_16;
double ld_24;
double ld_32;
double ld_40;
int l_ind_counted_4 = IndicatorCounted();
if (Bars <= RSIPeriod) return (0);
if (l_ind_counted_4 < 1) for (int li_0 = 1; li_0 <= RSIPeriod; li_0++) g_ibuf_80[Bars - li_0] = 0.0;
li_0 = Bars - RSIPeriod - 1;
if (l_ind_counted_4 >= RSIPeriod) li_0 = Bars - l_ind_counted_4 - 1;
while (li_0 >= 0) {
ld_32 = 0.0;
ld_40 = 0.0;
if (li_0 == Bars - RSIPeriod - 1) {
for (int li_48 = Bars - 2; li_48 >= li_0; li_48--) {
ld_8 = Close[li_48] - (Close[li_48 + 1]);
if (ld_8 > 0.0) ld_40 += ld_8;
else ld_32 -= ld_8;
}
ld_24 = ld_40 / RSIPeriod;
ld_16 = ld_32 / RSIPeriod;
} else {
ld_8 = Close[li_0] - (Close[li_0 + 1]);
if (ld_8 > 0.0) ld_40 = ld_8;
else ld_32 = -ld_8;
ld_24 = ((g_ibuf_84[li_0 + 1]) * (RSIPeriod - 1) + ld_40) / RSIPeriod;
ld_16 = ((g_ibuf_88[li_0 + 1]) * (RSIPeriod - 1) + ld_32) / RSIPeriod;
}
g_ibuf_84[li_0] = ld_24;
g_ibuf_88[li_0] = ld_16;
if (ld_16 == 0.0) g_ibuf_80[li_0] = 0.0;
else g_ibuf_80[li_0] = 100.0 - 100.0 / (ld_24 / ld_16 + 1.0);
li_0--;
}
return (0);
}
Разница видна "невооруженным глазом", правда?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 627
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения