В каких случаях есть смысл держать часть кода робота в индикаторе? - страница 14

 
Integer:

Если по сути, то давайте, перенестите код расчета ЕМА в эксперта.


Порылся в архивах, вот один из древних моих вариантов. Выдрал из эксперта

int GetSignal (int nMax, int shift, double& prevVals[])
//  prevVals[3] - [0] требуется для быстрого расчета SMA.
//                [1] пред. порог перехода
//                [2] пред. пред. порог перехода
{
    int j, k, pos;
    double currMA, sum;

    ///////////////////////////////////////////////////////
    //  Restore 
    if (prevVals[0] < 0.1) {

        pos = nMax;
        sum = 0;
        for(k = 0; k < paramMAperiod; k++, pos--) {
            sum += vPrice(paramMAprice, pos);
        }
        prevVals[0] = sum/paramMAperiod;

        for ( ; shift < pos; pos--) {
            currMA = (vPrice(paramMAprice, pos) + (paramMAperiod-1)*prevVals[0])/paramMAperiod;
            prevVals[0] = currMA;

            j = 0.5+MathAbs(prevVals[1]-currMA)/Point;
            if (j >= paramMAporog) {
                prevVals[2] = prevVals[1];
                prevVals[1] = currMA;
            }
        }
    }
    ///////////////////////////////////////////////////////

    pos = shift;
    currMA = (vPrice(paramMAprice, pos) + (paramMAperiod-1)*prevVals[0])/paramMAperiod;
    prevVals[0] = currMA;

    ///////////////////////////////////////////////////////
    pos = 0;
    j = 0.5+MathAbs(prevVals[1]-currMA)/Point;
    if (j >= paramMAporog) {

        if (prevVals[2] > prevVals[1] && prevVals[1] < currMA)
            pos = -1;

        if (prevVals[2] < prevVals[1] && prevVals[1] > currMA)
            pos = 1;

        prevVals[2] = prevVals[1];
        prevVals[1] = currMA;
    }

    if (IsOptimization() == false) {
        string szName = "ArrTest_";
        szName = szName+gObject;
        ObjectCreate(szName, OBJ_ARROW, 0, Time[shift], prevVals[1]);
        ObjectSet   (szName, OBJPROP_ARROWCODE, 159);
        ObjectSet   (szName, OBJPROP_COLOR,     Gold);
        gObject++;
   }
   return(pos);
}

Я правильно Вас понял?

 
OneDepo:


Порылся в архивах, вот один из древних моих вариантов. Выдрал из эксперта

Я правильно Вас понял?


Будет ошибка после пербоя в связи, чем ниже таймфрейм, тем больше ошибка.
 
Vinin:
Кстати, Дмитрий, ты то же не совсем корректное решение предоставил. Речь шла о советнике


Не все окна еще домыл, прервался....

Нет-нет, нормальный пример приведен. Зачем что-то искусственно усложнять? Я только не понял, в чем "игрушечность" моего кода?

 
Дмитрий, мне вообще конкурс неинтересен. Мне интересно знать, что будет быстрее из двух вариантов в исполнении рядового программиста. Причем для более-менее стандартного пользовательского индикатора и при одинаковой схеме расчета. А ваше соревнование может закончиться тем, что кто-либо "выдумает порох непромокаемый", и это будет говорить только о том, что он хороший программист, а не о том, что расчет в советнике быстрее (или наоборот).
 
hrenfx:


Не все окна еще домыл, прервался....

Нет-нет, нормальный пример приведен. Зачем что-то искусственно усложнять? Я только не понял, в чем "игрушечность" моего кода?


Просто сравни значения своего расчета и стандартного ЕМА. Увидишь
 
granit77:
Дмитрий, мне вообще конкурс неинтересен. Мне интересно знать, что будет быстрее из двух вариантов в исполнении рядового программиста. Причем для более-менее стандартного пользовательского индикатора и при одинаковой схеме расчета. А ваше соревнование может закончиться тем, что кто-либо "выдумает порох непромокаемый", и это будет говорить только о том, что он хороший программист, а не о том, что расчет в советнике быстрее (или наоборот).

Как видим, пока никто не предоставил полностью корректного метода расчета ЕМА в эксперте, применимого на практике в реальности, не говоря уж о быстродействии.
 
Vinin:

Просто сравни значения своего расчета и стандартного ЕМА. Увидишь

Ну так это же придирки на самом деле не по существу, тут все зависит от места старта. У того же индикатора первый бар будет точно таким же. Но чтобы не начинать ненужный спор, сейчас внесу простейшие изменения.

 
Vinin:

Просто сравни значения своего расчета и стандартного ЕМА. Увидишь

Может ошибся с коэффициентов, сечас проверю, но принцип от этого не изменится.
 
Integer:

Будет ошибка после пербоя в связи, чем ниже таймфрейм, тем больше ошибка.

Нет, не будет. Вы же видите в коде, что управляется процесс расчета сигнала (только последний бар или заданные nMax баров) параметром prevVals[0]. Если он 0, то восстанавливаем по расчет по nMax баров. Управляет значением prevVals[0] другой код.

Но давайте не уклоняться, ближе к сути. Есть два варианта, указанные выше, что быстрее в тестере? Так

 

Красная - моя, голубая сверху - встроенный в терминал.