Código morse - página 7

 
Além disso, se você tiver alguma idéia de quais estatutos/indicadores podem ser úteis no comércio, coloque-os aqui.

Só para lhe dar uma idéia :

1. número de reversões de X pip em uma área selecionada
2. O mesmo número, mas sem virar em tamanho de N * X pips
3. volumes, pelo menos em carrapatos
 

Seria interessante ver a parte do código que faz cálculos, só por diversão ....

Quanto às idéias, eu olharia para as velas formadas pelo delta do volume comercializado ,

Karputov e Cybert tinham alguns bons indicadores sobre o assunto.

 
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;
}
o código é pesado porque o tamanho da série pode ser definido nos parâmetros, assim como o conjunto de todos os pares, separados por vírgulas
 

Uma idéia boa e fascinante.

Pelo menos prova que o mercado não se presta à análise através da análise com castiçal.

O mercado é uma resposta às ações de comerciantes reais.

Se houver 100 comerciantes em um dado momento - quantas combinações de zeros e uns podem existir?

 
Renat Akhtyamov: Se houver 100 comerciantes em um dado momento - quantas combinações de zeros e uns podem existir?
como está relacionado o número de comerciantes com a tabela de preços de tempo?
 
Andy Sanders:
como está relacionado o número de negócios com a tabela de tempo-preço?

O castiçal se formará dependendo de - quantos foram vendidos e quantos foram comprados.

Ou seja, a seqüência e a forma dos castiçais é aleatória. Há um grande número de combinações de seqüências de castiçais.

Tentar encontrar e analisar padrões é utopia.

Aqui, por exemplo.
 

Renat Akhtyamov:

.. As combinações de seqüências de candelabros são enormes.
As tentativas de busca e análise de padrões são utopia.

A análise do candelabro (que é, afinal, utopia) não deve ser confundida com o cálculo de padrões.

O próprio castiçal é uma utopia - uma representação grosseira da natureza das mudanças dentro de um período de candelabro.

E o padrão não é construído sobre os castiçais, mas sobre a seqüência de citações. O padrão não está ligado ao tempo de abertura da barra, pode ser de comprimento aleatório, ou pode ser baseado em dados médios, etc. Padrões não aleatórios são quase a única possibilidade para comerciantes "comuns", e a compreensão de sua essência é o nível mínimo de entrada no "clube dos ganhadores".

 
User_mt5:

A análise do candelabro (que é, afinal, utopia) não deve ser confundida com o cálculo de padrões.

O castiçal em si já é utopia - uma representação aproximada da natureza das mudanças dentro de um período de candelabro.

E o padrão não é construído sobre os castiçais, mas sobre a seqüência de citações. O padrão não está ligado ao tempo de abertura da barra, pode ser de comprimento aleatório, pode ser construído sobre os dados médios, etc. Padrões não aleatórios são quase a única possibilidade para comerciantes "comuns", e a compreensão de sua essência é o nível mínimo de entrada no "clube dos ganhadores".

Uau. Muito bem.

Boa sorte!

PS:

Como tudo é tão legal, devemos definir adicionalmente a relação proporcional de castiçais, máximo e mínimo de seus tamanhos, a fim de encontrar padrões.

Portanto, o código 0,1,1, se transformará em algo assim: 10,30,33

Cada padrão deve passar pela história para definir os parâmetros lucrativos.

Em seguida, criar um banco de dados de padrões

Este é um grande trabalho que provavelmente trará um resultado positivo.

 
Renat Akhtyamov:

Uau. Está bem feito.

Boa sorte!

PS:

Como é tão legal, precisamos definir melhor a relação proporcional de velas, máximas e mínimas e seus tamanhos para encontrar padrões.

Portanto, o código 0,1,1, se transformará em algo assim: 10,30,33

Não. Nem mesmo os gatos podem nascer em duas voltas, três voltas.

Mas, em princípio... Em princípio, você poderia fazer código Morse, mas com um aviso: se você não estiver interessado no resultado final.

 
Renat Akhtyamov:

Cada padrão deve ser percorrido ao longo da história para definir os parâmetros lucrativos.

Em seguida, criar um banco de dados de padrões

Este é um trabalho enorme que provavelmente trará um resultado positivo mais tarde.

É possível concordar com isto. Apenas nesses termos - "possivelmente" e "posteriormente".

Mesmo antes disso, você tem que definir este mesmo "todos os padrões". E não é lucrativo. O método não se trata de lucro e comércio em geral. Trata-se de repetir padrões semelhantes. Ou seja, um padrão no lado direito, com seu lado esquerdo sendo semelhante. O comprimento, forma, amplitude, freqüência cíclica e outros parâmetros são todos sujeitos a pesquisa.

Sim. E se fizermos o mesmo com base em castiçais, teremos o mesmo resultado, mas será mais fraco e mais incômodo. E há menos padrões - simplesmente pela definição de um candelabro.

Razão: