Codice Morse - pagina 7

 
Inoltre, se hai qualche idea su quali statistiche/indicatori potrebbero essere utili nel trading, postali qui.

Solo per darvi un'idea:

1. numero di inversioni di X pip in un'area selezionata
2. lo stesso numero ma senza lanci nella dimensione di N * X pips
3. Volumi, almeno in zecche
 

Sarebbe interessante guardare la parte del codice che fa i calcoli, solo per divertimento ....

Per quanto riguarda le idee, guarderei le candele formate dal delta del volume scambiato,

Karputov e Cybert avevano alcuni buoni indicatori sull'argomento...

 
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;
}
il codice è macchinoso perché la dimensione della serie può essere impostata nei parametri, così come l'insieme di tutte le coppie, separate da virgole
 

Un'idea buona e affascinante.

Almeno dimostra che il mercato non si presta all'analisi tramite l'analisi delle candele.

Il mercato è una risposta alle azioni dei commercianti reali.

Se ci sono 100 commercianti in un dato momento, quante combinazioni di zeri e di uno ci possono essere?

 
Renat Akhtyamov: Se ci sono 100 commercianti in un dato momento, quante combinazioni di zeri e uno possono esserci?
come è collegato il numero di commercianti al grafico tempo-prezzo?
 
Andy Sanders:
come è collegato il numero di scambi al grafico tempo-prezzo?

La candela si formerà a seconda di - quanti venduti e quanti comprati.

Cioè, la sequenza e la forma delle candele è casuale. Esiste un numero enorme di combinazioni di sequenze di candele.

Cercare di trovare e analizzare i modelli è un'utopia.

Qui, per esempio.
 

Renat Akhtyamov:

.. Le combinazioni di sequenze di candele sono enormi.
I tentativi di cercare e analizzare i modelli sono un'utopia.

L'analisi delle candele (che è, dopo tutto, un'utopia) non deve essere confusa con il calcolo dei pattern.

La candela stessa è un'utopia - una rappresentazione grezza della natura dei cambiamenti all'interno di un periodo di candela.

E il modello non è costruito sulle candele ma sulla sequenza delle quotazioni. Il modello non è collegato al tempo di apertura della barra, può essere di lunghezza casuale, o può essere basato su dati mediati ecc. I modelli non casuali sono quasi l'unica possibilità per i commercianti "ordinari", e la comprensione della loro essenza è il livello minimo per entrare nel "club dei guadagnatori".

 
User_mt5:

L'analisi delle candele (che è, dopo tutto, un'utopia) non deve essere confusa con il calcolo dei pattern.

La candela stessa è già un'utopia - una rappresentazione approssimativa della natura dei cambiamenti all'interno di un periodo della candela.

E il modello non è costruito sulle candele ma sulla sequenza delle quotazioni. Il modello non è collegato al tempo di apertura della barra, può essere di lunghezza casuale, può essere costruito sui dati mediati ecc. I modelli non casuali sono quasi l'unica possibilità per i commercianti "ordinari", e la comprensione della loro essenza è il livello minimo per entrare nel "club dei guadagnatori".

Wow. Va bene.

Buona fortuna!

PS:

Dato che tutto è così figo, dovremmo definire anche il rapporto proporzionale dei candelieri, il massimo e il minimo delle loro dimensioni per trovare i modelli.

Quindi il codice 0,1,1, si trasformerà in qualcosa come questo: 10,30,33

Ogni modello deve essere eseguito attraverso la storia per impostare i parametri redditizi.

Poi creare un database di modelli

Questo è un grande lavoro che probabilmente porterà un risultato positivo.

 
Renat Akhtyamov:

Oh, wow. Va bene.

Buona fortuna!

PS:

Dato che è così figo, dobbiamo definire ulteriormente il rapporto proporzionale delle candele, i massimi e i minimi e le loro dimensioni per trovare i modelli.

Quindi il codice 0,1,1, si trasformerà in qualcosa come questo: 10,30,33

No. Nemmeno i gatti possono nascere in due giri, tre giri.

Ma in linea di principio... In linea di principio, si potrebbe fare il codice Morse, ma con un avvertimento: se non si è interessati al risultato finale.

 
Renat Akhtyamov:

Ogni modello deve essere eseguito attraverso la storia per impostare i parametri redditizi.

Poi creare un database di modelli

Questo è un lavoro enorme che probabilmente porterà un risultato positivo in seguito.

È possibile essere d'accordo con questo. Proprio in questi termini - 'possibilmente' e 'successivamente'.

Prima ancora, bisogna definire proprio questo 'ogni schema'. E non è redditizio. Il metodo non riguarda il profitto e il trading in generale. Si tratta di ripetere schemi simili. Cioè un modello nel lato destro con il lato sinistro che è simile. La lunghezza, la forma, l'ampiezza, la frequenza ciclica e altri parametri sono tutti soggetti alla ricerca.

Sì. E se facciamo lo stesso sulla base dei candelieri, avremo lo stesso risultato, ma sarà più debole e scomodo. E ci sono meno modelli - semplicemente per la definizione di una candela.

Motivazione: