Morse code - страница 7

 
Также, если идеи, какие стат/ показатели могут быть полезны в трейдинге - пишите сюда.

На вскидку :

1. количество переворотов размером Х пипс на выбранном участке
2. такое же количество, но безоткатных движений размером N * X пипс
3. обьемы, хотя бы тиковые
 

Было бы интересно посмотреть ту часть кода которая производит подсчеты , ради спортивного интереса ....

По поводу идей , я бы посмотрел на свечи сформированные дельтой проторгованного объема ,

у Карпутова и Сайбера на эту тему были хорошие индикаторы...

 
struct SPoint
{
    double mAsk;
    double mBid;
    double mLow;
    double mHigh;
    double mOpen;
    double mClose;
    double mPoint;
    double mSpread;
    double mVolume;
    datetime mTime;
};

struct SSymbol
{
    string mName;
    double mMean;
    double mUnit;
    double mOrder;
};

struct SSets
{
    SSymbol mSymbol;
    double mAsk[];
    double mBid[];
    double mLow[];
    double mHigh[];
    double mOpen[];
    double mClose[];
    double mPoint[];
    double mSpread[];
    double mVolume[];
    datetime mTime[];
};

struct SName
{
    string mData;
    SSets mSeries[];
};

int getCodes(int length)  // length - parameter that defines required sequence size
{
    SSets iSeries[];
    SName iCombinations[];

    int order = iSets.getPairs(iSeries, InpSymbols);  // split comma-separated string into array of structures iSeries
    int bars = iSets.getSourceSets(iSeries, PERIOD_CURRENT, order, InpDepth, InpShift);  // convert prices from array of structures MqlRates to iSeries

    if (bars < 1)
    {
        return 0;
    }

    int codes[];

    ArrayResize(codes, length);

    for (int k = 0; k < order; k++) // loop over all symbols in iSeries
    {
        ZeroMemory(codes);
        ArrayResize(iCombinations, k + 1);
        iCombinations[k].mData = iSeries[k].mSymbol.mName;
        
        double point = SymbolInfoDouble(iSeries[k].mSymbol.mName, SYMBOL_POINT);

        do
        {
            string comboChain = NULL;

            for (int i = length - 1; i >= 0; i--)
            {
                comboChain = IntegerToString(codes[i]) + comboChain;  // get combination from 000 to 111 on each iteration
            }

            for (int n = bars - 1; n >= length; n--)  // loop over prices for each symbol
            {
                double pips = 0;
                string comboSymbol = NULL;

                for (int i = 0; i < length; i++)  //  comparison of price sequence with generated sequence
                {
                    string symbolUnit = "X"; 
                    double range = iSeries[k].mClose[n - i] - iSeries[k].mOpen[n - i]; 

                    if (range > 0) 
                    {
                        symbolUnit = "1";
                        pips += range;
                    }

                    if (range < 0) 
                    {
                        symbolUnit = "0";
                        pips -= range;
                    }

                    comboSymbol = symbolUnit + comboSymbol;  // real prices define combination 
                }

                if (comboChain == comboSymbol) // compare generated sequence and real sequence
                {
                    int index = -1;
                    int count = ArraySize(iCombinations[k].mSeries);

                    for (int i = 0; i < count; i++)
                    {
                        if (iCombinations[k].mSeries[i].mSymbol.mName == comboChain)
                        {
                            index = i;
                            break;
                        }
                    }

                    if (index < 0)
                    {
                        ArrayResize(iCombinations[k].mSeries, count + 1);
                        ZeroMemory(iCombinations[k].mSeries[count]);
                        index = count;
                    }

                    // count matches, pips, etc

                    iCombinations[k].mSeries[index].mSymbol.mMean++;
                    iCombinations[k].mSeries[index].mSymbol.mOrder += iCombinations[k].mSeries[index].mSymbol.mMean + n;
                    iCombinations[k].mSeries[index].mSymbol.mUnit += MathAbs(pips / point);
                    iCombinations[k].mSeries[index].mSymbol.mName = comboChain;
                }
            }

        } while (iHelpers.getChain(codes, length)); // generate possible combinations from 000 to 111
    }

    string res = "\n";

    for (int k = 0; k < order; k++)
    {
        int count = ArraySize(iCombinations[k].mSeries);

        res += iCombinations[k].mData + "\n";

        for (int n = 0; n < count; n++)
        {
            res += 
                iCombinations[k].mSeries[n].mSymbol.mName + " : " + 
                DoubleToString(iCombinations[k].mSeries[n].mSymbol.mMean, 1) + " : " + 
                DoubleToString(iCombinations[k].mSeries[n].mSymbol.mOrder, 1) + " : " + 
                DoubleToString(iCombinations[k].mSeries[n].mSymbol.mUnit, 1) + "\n";
        }
    }

    iHelpers.debug(res); // print to a file

    return 1;
}
код получился громоздкий потому что размер серии можно задавать в параметрах, также как и набор всех пар через запятую
 

Хорошая и увлекательная идея.

По крайней мере докажет, что рынок не поддается анализу через анализ свечей.

Рынок - это ответ на действия реальных трейдеров.

Если трейдеров в данный момент 100 - сколько может быть комбинаций нулей и единичек?

 
Renat Akhtyamov: Если трейдеров в данный момент 100 - сколько может быть комбинаций нулей и единичек?
как количество трейдеров связано с временно-ценовым графиком?
 
Andy Sanders:
как количество трейдеров связано с временно-ценовым графиком?

Свечка сформируется в зависимости от того - сколько продали и сколько купили.

То есть последовательность и форма свечей случайна. Комбинаций последовательностей свечек огромное количество.

Попытки поиска и анализа паттернов - это утопия.

Вот, например.
 

Renat Akhtyamov:

.. Комбинаций последовательностей свечек огромное количество.
Попытки поиска и анализа паттернов - это утопия..

Не нужно путать свечной анализ (который, таки, утопия) с вычислением паттернов.

Свеча сама по себе уже утопия - грубое представление характера изменений внутри свечного периода.

А паттерн строится не на свечах, а на последовательности котировок. Паттерн на привязан ко времени открытия бара, может быть произвольной длины, может строиться на усреднённых данных и т.п. Неслучайные паттерны - чуть ли не единственная возможность для "простого" трейдера, и понимание их сущности - минимальный проходной бал в клуб "зарабатывателей".

 
User_mt5:

Не нужно путать свечной анализ (который, таки, утопия) с вычислением паттернов.

Свеча сама по себе уже утопия - грубое представление характера изменений внутри свечного периода.

А паттерн строится не на свечах, а на последовательности котировок. Паттерн на привязан ко времени открытия бара, может быть произвольной длины, может строиться на усреднённых данных и т.п. Неслучайные паттерны - чуть ли не единственная возможность для "простого" трейдера, и понимание их сущности - минимальный проходной бал в клуб "зарабатывателей".

Ух ты. Ладушки.

Удачи!

PS:

Раз уж так всё круто, нужно дополнительно определить пропорциональное соотношение свечей, максимум и минимум их размеров для того чтобы отыскать паттерны.

То есть код 0,1,1, превратится в что то подобное этому: 10,30,33

Каждый паттерн нужно прогнать по истории для задания профитных параметров.

Затем создать базу данных паттернов

Это огромный труд, который в последствии возможно принесет положительный результат.

 
Renat Akhtyamov:

Ух ты. Ладушки.

Удачи!

PS:

Раз уж так всё круто, нужно дополнительно определить пропорциональное соотношение свечей, максимум и минимум и их размеров для того чтобы отыскать паттерны.

То есть код 0,1,1, превратится в что то подобное этому: 10,30,33

Нет. В два прихлопа, три притопа даже кошки не родятся.

Но в принципе.. В принципе, можно и азбуку Морзе, но с оговоркой: если Вас не интересует конечный результат.

 
Renat Akhtyamov:

Каждый паттерн нужно прогнать по истории для задания профитных параметров.

Затем создать базу данных паттернов

Это огромный труд, который в последствии возможно принесет положительный результат.

С этим можно согласиться. Как раз в этих терминах - "возможно" и "в последствии".

Ещё до этого нужно определить этот самый "каждый паттерн". И он не профитный. Метод не имеет отношения к профиту и торговле вообще. Речь идёт о повторяющихся похожих фрагментах. Т.е. закономерном направлении в правой части при схожести их левых частей. Длина, форма, амплитуда, цикличность, другие параметры - всё это предмет исследований.

Да. И если делать всё то же самое на основе свечей, то и будет то же самое, но слабее и корявее. И паттернов меньше, - просто по определению свечи.

Причина обращения: