Morseschrift - Seite 7

 
Wenn Sie außerdem Ideen haben, welche Statistiken/Indikatoren für den Handel nützlich sein könnten, posten Sie sie hier.

Nur um Ihnen eine Vorstellung zu geben:

1. Anzahl der Umkehrungen von X Pip in einem ausgewählten Bereich
2. die gleiche Anzahl, aber keine Flips in der Größe von N * X Pips
3. die Volumina, zumindest in Ticks
 

Es wäre interessant, sich den Teil des Codes anzusehen, der die Berechnungen durchführt, nur so zum Spaß ....

Was die Ideen anbelangt, so würde ich mir die Kerzen ansehen, die durch das Delta des gehandelten Volumens gebildet werden,

Karputov und Cybert hatten einige gute Indikatoren zu diesem Thema...

 
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;
}
der Code ist umständlich, weil die Größe der Reihe in den Parametern festgelegt werden kann, ebenso wie die Menge aller Paare, die durch Kommas getrennt sind
 

Eine gute und faszinierende Idee.

Zumindest beweist es, dass sich der Markt nicht für eine Analyse mittels Candlestick-Analyse eignet.

Der Markt ist eine Reaktion auf die Handlungen von echten Händlern.

Wenn es zu einem bestimmten Zeitpunkt 100 Händler gibt - wie viele Kombinationen von Nullen und Einsen kann es dann geben?

 
Renat Akhtyamov: Wenn es zu einem bestimmten Zeitpunkt 100 Händler gibt - wie viele Kombinationen von Nullen und Einsen kann es dann geben?
Wie hängt die Anzahl der Händler mit dem Zeit-Kurs-Diagramm zusammen?
 
Andy Sanders:
Wie hängt die Anzahl der Abschlüsse mit dem Zeit-Kurs-Diagramm zusammen?

Die Form der Kerze hängt davon ab, wie viel verkauft und wie viel gekauft wurde.

Das heißt, die Reihenfolge und die Form der Kerzenständer ist zufällig. Es gibt eine große Anzahl von Kombinationen von Candlestick-Sequenzen.

Der Versuch, Muster zu finden und zu analysieren, ist eine Utopie.

Hier zum Beispiel.
 

Renat Akhtyamov:

.. Die Kombinationsmöglichkeiten von Candlestick-Sequenzen sind enorm.
Der Versuch, nach Mustern zu suchen und diese zu analysieren, ist eine Utopie.

Die Candlestick-Analyse (die ja eine Utopie ist) sollte nicht mit der Musterberechnung verwechselt werden.

Der Kerzenständer selbst ist eine Utopie - eine grobe Darstellung der Art der Veränderungen innerhalb einer Kerzenständerperiode.

Und das Muster basiert nicht auf den Candlesticks, sondern auf der Abfolge der Notierungen. Das Muster ist nicht mit der Öffnungszeit des Balkens verbunden, es kann von zufälliger Länge sein oder auf gemittelten Daten basieren usw. Nicht-zufällige Muster sind fast die einzige Möglichkeit für "normale" Händler, und das Verständnis ihres Wesens ist die Mindestvoraussetzung für den Eintritt in den "Club der Verdiener".

 
User_mt5:

Die Candlestick-Analyse (die ja eine Utopie ist) sollte nicht mit der Berechnung von Mustern verwechselt werden.

Der Kerzenständer selbst ist bereits eine Utopie - eine grobe Darstellung der Art der Veränderungen innerhalb einer Kerzenständerperiode.

Und das Muster basiert nicht auf den Candlesticks, sondern auf der Abfolge der Notierungen. Das Muster ist nicht mit der Öffnungszeit des Balkens verbunden, es kann von zufälliger Länge sein, es kann auf den gemittelten Daten aufgebaut sein, usw. Nicht-zufällige Muster sind fast die einzige Möglichkeit für "normale" Händler, und das Verständnis ihres Wesens ist die Mindestvoraussetzung für den Eintritt in den "Club der Verdiener".

Wow. Also gut.

Viel Glück!

PS:

Da alles so cool ist, sollten wir zusätzlich das proportionale Verhältnis von Kerzenständern, Maximum und Minimum ihrer Größen definieren, um Muster zu finden.

Der Code 0,1,1 wird also etwa so aussehen: 10,30,33

Jedes Muster muss in der Historie durchlaufen werden, um die profitablen Parameter festzulegen.

Erstellen Sie dann eine Musterdatenbank

Dies ist eine großartige Arbeit, die wahrscheinlich zu einem positiven Ergebnis führen wird.

 
Renat Akhtyamov:

Wow. Okay, okay.

Viel Glück!

PS:

Da es so cool ist, müssen wir das proportionale Verhältnis von Kerzen, Hochs und Tiefs und deren Größe weiter definieren, um Muster zu finden.

Der Code 0,1,1 wird also etwa so aussehen: 10,30,33

Nein. Nicht einmal Katzen können in zwei oder drei Runden geboren werden.

Aber im Prinzip... Im Prinzip könnte man Morsezeichen machen, aber mit einem Vorbehalt: Wenn man nicht am Endergebnis interessiert ist.

 
Renat Akhtyamov:

Jedes Muster muss in der Historie durchlaufen werden, um die profitablen Parameter festzulegen.

Erstellen Sie dann eine Datenbank mit Mustern

Dies ist eine enorme Arbeit, die später wahrscheinlich ein positives Ergebnis bringen wird.

Dem kann man zustimmen. Nur in diesen Begriffen - 'vielleicht' und 'später'.

Zuvor müssen Sie jedoch genau dieses "jedes Muster" definieren. Und es ist nicht profitabel. Bei der Methode geht es nicht um Gewinn und Handel im Allgemeinen. Es geht darum, ähnliche Muster zu wiederholen. D.h. ein Muster auf der rechten Seite, wobei die linke Seite ähnlich ist. Länge, Form, Amplitude, zyklische Frequenz und andere Parameter sind Gegenstand von Untersuchungen.

Ja. Und wenn Sie das Gleiche auf der Grundlage von Kerzenständern tun, werden Sie das gleiche Ergebnis haben, aber es wird schwächer und unbeholfener sein. Und es gibt weniger Muster - einfach durch die Definition eines Kerzenständers.