cpp to mql5

 

Подскажите (не знаком с ++)

что тут происходит и как перевести в mql

unsigned int BinaryFeatureCount = 149;
/* Binarise features */
    std::vector<unsigned char> binaryFeatures(model.BinaryFeatureCount);
    unsigned int binFeatureIndex = 0;
    for (unsigned int i = 0; i < model.FloatFeatureCount; ++i) {
        for(unsigned int j = 0; j < model.BorderCounts[i]; ++j) {
            binaryFeatures[binFeatureIndex] = (unsigned char)(features[i] > model.Borders[binFeatureIndex]);
            ++binFeatureIndex;
        }
    }

так понял, что создается массив длиной 149 в первой желтой строке (битовый?)

а во второй элементам присваиваются ноли и единицы? Какой аналог на mql моет быть?

и дальше в цикле выполняются побитовые операции, как здесь переделать?

/* Extract and sum values from trees */
    double result = 0.0;
    const unsigned int* treeSplitsPtr = model.TreeSplits;
    const double* leafValuesForCurrentTreePtr = model.LeafValues;
    for (unsigned int treeId = 0; treeId < model.TreeCount; ++treeId) {
        const unsigned int currentTreeDepth = model.TreeDepth[treeId];
        unsigned int index = 0;
        for (unsigned int depth = 0; depth < currentTreeDepth; ++depth) {
            index |= (binaryFeatures[treeSplitsPtr[depth]] << depth);
        }
        result += leafValuesForCurrentTreePtr[index];
        treeSplitsPtr += currentTreeDepth;
        leafValuesForCurrentTreePtr += (1 << currentTreeDepth);
    }
    return model.Scale * result + model.Bias;
}

полный код

 
Подождите немного, это уже есть :)
 
Aliaksandr Hryshyn:
Подождите немного, это уже есть :)

жду ) пока сам разбираюсь

 
uchar binaryFeatures[];
ArrayResize(binaryFeatures, BinaryFeatureCount);

дальше просто приведение bool к 0 и 1 типа uchar

во втором куске первая выделенная строчка простая битовая арифметика, в mql все так же

вторая выделенная строчка - арифметика указателей. указатель leafValuesForCurrentTreePtr сдвигается на (1 << currentTreeDepth) позиций. можно хранить и двигать индекс

 
Maxim Dmitrievsky:

жду ) пока сам разбираюсь

Держите, там потребуются дополнительные файлы

Там всё с описанием, думаю, что разберётесь

Файлы:
Catboost.mqh  163 kb
CSV_fast.mqh  491 kb
Lex.mqh  20 kb
 
TheXpert:

дальше просто приведение bool к 0 и 1 типа uchar

во втором куске первая выделенная строчка простая битовая арифметика, в mql все так же

вторая выделенная строчка - арифметика указателей. указатель leafValuesForCurrentTreePtr сдвигается на (1 << currentTreeDepth) позиций. можно хранить и двигать индекс

типа выпенрились в коде.. операций с массивами нет обычных что ли

понял, спасибо )

 
Aliaksandr Hryshyn:

Держите, там потребуются дополнительные файлы

Там всё с описанием, думаю, что разберётесь

спасибо! разберусь )

конечно, рассчитываю на парсер строк на 50 в питоне.. у вас уж слишком заморочено

в теме МО потом напишу че получилось в итоге