Мальчик buybuy
Мальчик buybuy личный блог
05 июня 2023, 17:58

Приношу свои глубочайшие извинения уважаемому 3Qu

Данный пост написан в обуздание моего гонора и обозначение технического гения уважаемого 3Qu.

А именно — выражаю всяческое согласие с тезисами:
1. Рынки устроены просто
2. Для формирования индикатора на минутках достаточно 15 баров

Теперь пару слов о причинах моего coming out.

Мне удалось построить стабильный (и весьма прибыльный) кубический индикатор (индикатор = знак кубического полинома от приращений цен).
Который сильно опережает по качеству прогноза будущего приращения цены и (самое главное) по доходности эквити и эквити/ДД линейные и квадратичные индикаторы.
Так вот, мало того, что по финрезультатам этот индикатор кроет линейные и линейно-квадратичные аналоги, как бык — овцу, так он еще и самодостаточен на прошлом 15-20 баров (суб-оптимальные квадратичные индикаторы имеют глубину до 300 баров, линейные — до 8000 баров....)

Результат подтвержден на FX и на крипте.
Будет свободная минутка — проверю результат на часовках Ri и вернусь к дискуссии с уважаемым А. Г.

Что вы думаете по этому поводу, коллеги?

С уважением

 
49 Комментариев
  • What Is Love
    05 июня 2023, 18:02
    ChatGPT4 за минуту выдает 


    #property description «RunningBB»
    //---
    #property indicator_chart_window
    #property indicator_buffers 4
    #property indicator_plots 4
    #property indicator_type1 DRAW_LINE
    #property indicator_type2 DRAW_LINE
    #property indicator_type3 DRAW_LINE
    #property indicator_label1 «RBB middle»
    #property indicator_label2 «RBB upper»
    #property indicator_label3 «RBB lower»
    #property indicator_label4 «RBB ATR»


    class RunningMovingAverage
    {
    private:
    int count;
    double sum;

    public:
    RunningMovingAverage(): count(0), sum(0) {}

    double AddData(const double& x)
    {
    if(count == 0)
    sum = x;
    else
    sum += x;
    count++;
    return GetMovingAverage();
    }

    double GetMovingAverage()
    {
    if(count == 0)
    return 0;
    return sum / count;
    }
    };
    class RunningVariance
    {
    private:
    int count;
    double mean;
    double M2;

    public:
    RunningVariance(): count(0), mean(0), M2(0) {}

    double AddData(const double& x)
    {
    count++;
    double delta = x — mean;
    mean += delta / count;
    double delta2 = x — mean;
    M2 += delta * delta2;
    return GetVariance();
    }

    double GetVariance()
    {
    if(count < 2)
    return 0;
    return M2 / (count — 1);
    }

    double GetStandardDeviation()
    {
    return sqrt(GetVariance());
    }
    };

     

    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
    {
    delete rv;
    delete rma;
    }


    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int OnInit()
    {
    //--- indicator buffers mapping
    SetIndexBuffer(0, buffer1);
    SetIndexBuffer(1, buffer2);
    SetIndexBuffer(2, buffer3);
    SetIndexBuffer(3, buffer4);
    PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
    PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
    PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_LINE);
    PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_LINE);

    //--- initialize running variance objects
    rv = new RunningVariance();
    rma = new RunningMovingAverage();

    return(INIT_SUCCEEDED);
    }

    //+------------------------------------------------------------------+
    //| Custom indicator iteration function |
    //+------------------------------------------------------------------+
    int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[])
    {
    //--- calculate running standard deviation and moving average of the close prices
    for(int i = prev_calculated; i < rates_total; i++)
    {
    rv.AddData(close[i]);
    double stdev = rv.GetStandardDeviation();
    rma.AddData(close[i]);
    double ma = rma.GetMovingAverage();

    buffer1[i] = ma + 2.0 * stdev;
    buffer2[i] = ma;
    buffer3[i] = ma — 2.0 * stdev;
    buffer4[i] = buffer1[i] — buffer3[i];
    }

    return(rates_total);
    }

    //+------------------------------------------------------------------+
    //| Indicator buffers |
    //+------------------------------------------------------------------+
    double buffer1[];
    double buffer2[];
    double buffer3[];
    double buffer4[];
    RunningVariance* rv;
    RunningMovingAverage* rma;

  • dim800
    05 июня 2023, 18:03
    не переживайте, скоро из бана выходит маэстро, он вас и рассудит.
  • wistopus
    05 июня 2023, 20:06
    Данный пост написан в обуздание моего гонора и обозначение технического гения уважаемого 3Qu.
    я всегда знал, что  3ку один из самых тута умных....

    а зачем цену предсказывать?.. достаточно иметь положительное математическое ожидание и эквити прет залюбуешься...
    п.с.
    Если Вы, Мальчишка, не ошиблися со своим кубическим конем… то поздравляю…
  • T-800
    05 июня 2023, 19:40
    Не забываем, что МальчикБуйБуй нашампурил овер 900 телочек. И на пенсии останавливаться на этой цифре не собирается)

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн