Código Morse - página 7

 
Además, si tienes alguna idea sobre qué estadísticas/indicadores podrían ser útiles en el comercio, publícala aquí.

Para que te hagas una idea:

1. número de inversiones de X pip en una zona seleccionada
2. el mismo número pero sin voltear en tamaño de N * X pips
3. Volúmenes, al menos en ticks
 

Sería interesante mirar la parte del código que hace los cálculos, sólo por diversión ....

En cuanto a las ideas, me fijaría en las velas formadas por el delta del volumen negociado ,

Karputov y Cybert tenían algunos buenos indicadores sobre el tema...

 
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;
}
el código es engorroso porque se puede establecer el tamaño de la serie en los parámetros, así como el conjunto de todos los pares, separados por comas
 

Una idea buena y fascinante.

Al menos demuestra que el mercado no se presta al análisis mediante velas.

El mercado es una respuesta a las acciones de los comerciantes reales.

Si hay 100 operadores en un momento dado, ¿cuántas combinaciones de ceros y unos puede haber?

 
Renat Akhtyamov: Si hay 100 operadores en un momento dado, ¿cuántas combinaciones de ceros y unos puede haber?
¿cómo se relaciona el número de comerciantes con el gráfico de tiempo-precio?
 
Andy Sanders:
¿cómo se relaciona el número de operaciones con el gráfico tiempo-precio?

El candelabro se formará dependiendo de - cuántos vendieron y cuántos compraron.

Es decir, la secuencia y la forma de las velas es aleatoria. Hay un gran número de combinaciones de secuencias de velas.

Intentar encontrar y analizar patrones es una utopía.

Aquí, por ejemplo.
 

Renat Akhtyamov:

.. Las combinaciones de secuencias de velas son enormes.
Los intentos de buscar y analizar patrones son una utopía.

El análisis de velas (que es, después de todo, una utopía) no debe confundirse con el cálculo de patrones.

El candelero en sí es una utopía, una burda representación de la naturaleza de los cambios dentro de un período de velas.

Y el patrón se construye no en las velas sino en la secuencia de cotizaciones. El patrón no está relacionado con la hora de apertura de la barra, puede ser de longitud aleatoria, o puede basarse en datos promediados, etc. Los patrones no aleatorios son casi la única posibilidad para los comerciantes "ordinarios", y la comprensión de su esencia es el nivel mínimo de entrada al "club de los ganadores".

 
User_mt5:

El análisis de velas (que, al fin y al cabo, es una utopía) no debe confundirse con el cálculo de patrones.

La vela en sí misma ya es una utopía: una representación aproximada de la naturaleza de los cambios dentro de un período de velas.

Y el patrón se construye no en las velas sino en la secuencia de cotizaciones. El patrón no está relacionado con la hora de apertura de la barra, puede ser de longitud aleatoria, puede estar construido sobre los datos promediados, etc. Los patrones no aleatorios son casi la única posibilidad para los comerciantes "ordinarios", y la comprensión de su esencia es el nivel mínimo de entrada al "club de los ganadores".

Vaya. Muy bien.

Buena suerte.

PS:

Como todo es tan genial, deberíamos definir además la relación proporcional de las velas, el máximo y el mínimo de sus tamaños para encontrar patrones.

Así que el código 0,1,1, se convertirá en algo así: 10,30,33

Cada patrón debe pasar por el historial para establecer los parámetros rentables.

A continuación, cree una base de datos de patrones

Se trata de un gran trabajo que probablemente dará un resultado positivo.

 
Renat Akhtyamov:

Vaya. Muy bien.

Buena suerte.

PS:

Ya que es tan genial, tenemos que definir más la relación proporcional de las velas, los máximos y los mínimos y sus tamaños para encontrar patrones.

Así que el código 0,1,1, se convertirá en algo así: 10,30,33

No. Ni siquiera los gatos pueden nacer en dos o tres vueltas.

Pero en principio... En principio, podrías hacer el código Morse, pero con una advertencia: si no te interesa el resultado final.

 
Renat Akhtyamov:

Cada patrón debe pasar por el historial para establecer los parámetros rentables.

A continuación, cree una base de datos de patrones

Se trata de un gran trabajo que probablemente dará un resultado positivo más adelante.

Es posible estar de acuerdo con esto. Sólo en esos términos: "posiblemente" y "posteriormente".

Incluso antes de eso, hay que definir este mismo "cada patrón". Y no es rentable. El método no tiene que ver con las ganancias y el comercio en general. Se trata de repetir patrones similares. Es decir, un patrón en el lado derecho con su lado izquierdo siendo similar. La longitud, la forma, la amplitud, la frecuencia cíclica y otros parámetros son objeto de estudio.

Sí. Y si haces lo mismo sobre la base de velas, tendrás el mismo resultado, pero será más débil y más torpe. Y hay menos patrones - simplemente por la definición de una vela.