モールス符号 - ページ 7

 
また、トレーディングに役立ちそうな統計や指標があれば、ここに投稿してください。

ご参考までに.

1. 選択した領域でXピップの反転数
2. 同じ数字だが、N * X pipsの大きさのフリップはない。
3.ボリューム、少なくともティック単位で。
 

計算をする部分のコードを見てみるのも面白いかもしれませんね、ちょっと楽しみです.

アイデアとしては、取引量のデルタで形成されるローソク足を見てみることです。

カルプトフとサイバートは、このテーマについて良い指標をいくつか持っていた...。

 
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;
}
シリーズの大きさをパラメータで設定できるため、コードが煩雑になるのと同時に、すべてのペアの集合をカンマで区切った
 

魅力的で良いアイデアです。

少なくとも、ローソク足による分析には向かない相場であることは証明されました。

市場は、実際のトレーダーの行動に反応するものです。

ある瞬間に100人のトレーダーがいるとしたら、0と1の組み合わせはいくつになるでしょうか?

 
Renat Akhtyamov: ある時点で100人のトレーダーがいるとしたら、0と1の組み合わせはいくつになるのでしょう?
トレーダー数と時間-価格チャートの関係は?
 
Andy Sanders:
取引回数と時間-価格チャートの関係は?

ローソク足は、何本が売られ、何本が買われたかによって形成されます。

つまり、ローソク足の並びや形はランダムなのです。ローソク足の配列の組み合わせは、膨大な数にのぼります。

パターンを見つけて分析しようとするのはユートピアです。

たとえば、ここ。
 

Renat Akhtyamov:

..ローソク足配列の組み合わせは膨大である。
パターンを探し、分析する試みはユートピアである。

ローソク足分析(これは結局のところ、ユートピアである)をパターン計算と混同してはならない。

ローソク足そのものがユートピアであり、ローソク足期間内の変化の本質を粗く表現しているのである。

そして、そのパターンはローソク足ではなく、気配値の並びで構築されています。このパターンは、バーの開始時間とは 関係なく、ランダムな長さであったり、平均化されたデータに基づいているなど、様々なパターンがあります。非ランダムなパターンは、「普通の」トレーダーにとってほとんど唯一の可能性であり、その本質を理解することが「稼ぐ人クラブ」に入るための最低条件なのだ。

 
User_mt5:

ローソク足分析(これは結局のところ、ユートピアである)をパターン計算と混同してはならない。

ローソク足そのものがすでにユートピアであり、ローソク足期間内の変化の性質を大まかに表現している。

そして、そのパターンはローソク足ではなく、気配値の並びで構築されています。このパターンは、バーの開始 時間と関係がない、ランダムな長さである、平均化されたデータに基づいて構築されている、などの可能性があります。非ランダムなパターンは、「普通の」トレーダーにとってほとんど唯一の可能性であり、その本質を理解することが「稼ぐ人クラブ」に入るための最低 条件なのだ。

すごい。よしっ。

がんばってください。

PS:

このようにすべてがクールなので、パターンを見つけるために、ローソク足の比率、大きさの最大値と最小値を追加で定義する必要があります。

つまり、0,1,1というコードは、次のようなものに変わります。10,30,33

各パターンは、収益性の高いパラメータを設定するために、ヒストリーを実行する必要があります。

次に、パターン・データベースを作成します

これは、おそらく良い結果をもたらす素晴らしい作品だと思います。

 
Renat Akhtyamov:

すごい。オッケイです。

がんばってください。

PS:

せっかくなので、パターンを見つけるために、ローソク足と高値・安値の比率とその大きさをさらに定義する必要があります。

つまり、0,1,1というコードは、次のようなものに変化します。10,30,33

いや、猫でも2周、3周して生まれることはない。

しかし、原則的には...原理的にはモールス信号ができるのですが、注意点があります。

 
Renat Akhtyamov:

各パターンをヒストリーで実行し、収益性の高いパラメータを設定する必要があります。

次に、パターンのデータベースを作成します

これは、きっと後々良い結果をもたらす大仕事です。

これに同意することは可能です。ただ、「もしかしたら」「後で」と、その言葉だけで。

それ以前に、まさにこの「あらゆるパターン」を定義する必要があるのです。しかも、採算が合わない。このメソッドは、一般的な利益や取引に関するものではありません。似たようなパターンを繰り返すことです。つまり、右側のパターンと左側のパターンが似ていることです。長さ、形状、振幅、周期周波数など、すべて検討の対象である。

そして、ローソク足で同じことをしても、同じ結果になりますが、より弱く、よりぎこちないものになります。そして、ローソク足の定義からして、パターンが少ないのです。