Le code morse - page 7

 
De plus, si vous avez des idées sur les statistiques/indicateurs qui pourraient être utiles dans le commerce, postez-les ici.

Pour vous donner une idée :

1. nombre de retournements de X pip dans une zone sélectionnée
2. le même nombre mais sans flips en taille de N * X pips
3. les volumes, au moins en ticks
 

Il serait intéressant de regarder la partie du code qui effectue les calculs, juste pour le plaisir .....

Pour ce qui est des idées, je regarderais les bougies formées par le delta du volume négocié ,

Karputov et Cybert avaient quelques bons indicateurs sur le sujet...

 
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;
}
le code est lourd car la taille de la série peut être définie dans les paramètres, ainsi que l'ensemble de toutes les paires, séparées par des virgules
 

Une bonne et fascinante idée.

Cela prouve au moins que le marché ne se prête pas à une analyse par chandeliers.

Le marché est une réponse aux actions des vrais traders.

S'il y a 100 traders à un moment donné, combien de combinaisons de zéros et de uns peut-il y avoir ?

 
Renat Akhtyamov: S'il y a 100 traders à un moment donné, combien de combinaisons de zéros et de uns peut-il y avoir ?
comment le nombre d'opérateurs est-il lié au graphique temps-prix ?
 
Andy Sanders:
comment le nombre de transactions est-il lié au graphique temps/prix ?

Le chandelier se formera en fonction - du nombre de ventes et du nombre d'achats.

C'est-à-dire que la séquence et la forme des chandeliers sont aléatoires. Il existe un très grand nombre de combinaisons de séquences de chandeliers.

Essayer de trouver et d'analyser des modèles est une utopie.

Ici, par exemple.
 

Renat Akhtyamov:

.. Les combinaisons de séquences de chandeliers sont énormes.
Les tentatives de recherche et d'analyse de modèles relèvent de l'utopie.

L'analyse des chandeliers (qui est, après tout, une utopie) ne doit pas être confondue avec le calcul des schémas.

Le chandelier lui-même est une utopie - une représentation grossière de la nature des changements au sein d'une période de chandelier.

Et le modèle est construit non pas sur les chandeliers, mais sur la séquence de citations. Le modèle n'est pas lié à l'heure d'ouverture de la barre, il peut être d'une longueur aléatoire, ou il peut être basé sur des données moyennes, etc. Les modèles non aléatoires sont presque la seule possibilité pour les traders "ordinaires", et la compréhension de leur essence est le niveau minimum d'entrée dans le "club des gagnants".

 
User_mt5:

L'analyse des chandeliers (qui est, après tout, une utopie) ne doit pas être confondue avec le calcul des schémas.

Le chandelier lui-même est déjà une utopie - une représentation approximative de la nature des changements au sein d'une période de chandelier.

Et le modèle est construit non pas sur les chandeliers, mais sur la séquence de citations. Le modèle n'est pas lié à l'heure d'ouverture de la barre, il peut être de longueur aléatoire, il peut être construit sur des données moyennes, etc. Les modèles non aléatoires sont presque la seule possibilité pour les traders "ordinaires", et la compréhension de leur essence est le niveau minimum d'entrée dans le "club des gagnants".

Wow. D'accord.

Bonne chance !

PS :

Puisque tout est si cool, nous devrions en plus définir le rapport proportionnel des chandeliers, le maximum et le minimum de leurs tailles afin de trouver des modèles.

Donc le code 0,1,1, se transformera en quelque chose comme ça : 10,30,33

Chaque modèle doit faire l'objet d'un historique pour définir les paramètres de rentabilité.

Créez ensuite une base de données de modèles

C'est un grand travail qui apportera probablement un résultat positif.

 
Renat Akhtyamov:

Oh, wow. Okey-dokey.

Bonne chance !

PS :

Puisque c'est si cool, nous devons définir plus précisément le rapport proportionnel des bougies, des hauts et des bas et leurs tailles afin de trouver des modèles.

Donc le code 0,1,1, se transformera en quelque chose comme ça : 10,30,33

Non. Même les chats ne peuvent pas naître en deux ou trois tours.

Mais en principe... En principe, vous pourriez faire du morse, mais avec une réserve : si vous n'êtes pas intéressé par le résultat final.

 
Renat Akhtyamov:

Chaque motif doit être passé en revue dans l'historique pour définir les paramètres de rentabilité.

Créez ensuite une base de données de modèles

C'est un travail énorme qui apportera probablement un résultat positif plus tard.

Il est possible d'être d'accord avec cela. Juste en ces termes - "éventuellement" et "ultérieurement".

Avant même cela, vous devez définir ce "chaque modèle". Et ce n'est pas rentable. La méthode ne concerne pas le profit et le trading en général. Il s'agit de répéter des schémas similaires. C'est-à-dire un motif dans le côté droit, le côté gauche étant similaire. La longueur, la forme, l'amplitude, la fréquence cyclique et d'autres paramètres sont tous sujets à étude.

Oui. Et si vous faites la même chose sur la base des chandeliers, vous aurez le même résultat, mais il sera plus faible et plus maladroit. Et il y a moins de modèles - simplement par la définition d'un chandelier.