[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 270

 
Solree:
アハハ。まあ、そんなに新しくはないんですけどね...。

じゃあ、スタジオのコードかテレパスのどちらかだな。
 

コードを全部投げると、お客さんからクレームが来るので。しかし、失敗する部分はすでに投げてしまっているのです。残りのコードは、この問題とは関係ありません。なぜか、この特定のループは、以前に配置されたインデュークでMTを実行すると、正しくない値を生成します。コード全体を提供しないとアイデアが浮かばないのであれば、自分で考え続けるしかないですね :(

 
ただ、MTをもう一度再起動すると正常に動作することに気づきました...。
 
Solree:

コードを丸投げしたら、お客さんに叱られるから。しかし、失敗する部分はすでに投げてしまっているのです。残りのコードは問題とは関係ありません。フィードバックループがあるのですが、そのループは、先にインジケータをひっかけてMTを動かすと、なぜか不正確な値を出します。コード全体を提供しないとアイデアが浮かばないのであれば、自分で考え続けるしかないですね :(


もっと頻繁にプリントを行い、ログを解析してください。

ところで、そのコードでは、変数「count」がどのような値を持っているかは不明です。

 
count - 後で分析するバーの数.しかし、正確にはyはなぜか現在である最初のバーからではなく、MTをインデックスで閉じたときの最初のバーから始まっています。i = 位置でスタートし、yはその後も中間サイクルで使用されるため、特別にiを作成しました。zは、すべてをカウントする基準となるバーです。ここでは、MTが閉鎖される前の古いバーを出力し、他のすべてはそこからカウントを開始します。
 

こんにちは!どうしたらこのようなことが起こるのか、教えていただけませんか?

i = 2, Open[i-2] = 1.5715
14:21:15 2011.01.12 18:08 My Fr Chekulaeva1 GBPUSD,M1: Low[i] = 1.5713、Low[i-1] = 1.5714
14:21:15 2011.01.12 18:08 My Fr Chekulaev1 GBPUSD,M1: Low[i+1] = 1.5714、Low[i-2] = 1.5715
14:21:15 2011.01.12 18:08 My Fr Chekulaev1 GBPUSD,M1: Open[i-2]-(Low[i]-1*PointX) = 0.0004。
14:21:15 2011.01.12 18:08 My Fr Chekulaev1 GBPUSD,M1: 1*PointX = 0.0001

テスト時のログデータからの抜粋です。15-(13-1)は3であるべきである。しかし、テスターでは4になっています。何が悪いのでしょうか?

 

こんにちは、またMACDのことでご相談です。 MACDのヒストグラムの値(バーの大きさ)を特定するのに困っています。 現在のバー(例:=-0.001131)、前のバー(任意のバー)の値を計算したいのですが、どうすればよいでしょうか? で、 例えば現在のバーと前のバーの 差を求め ます。

 
Ivan1:

こんにちは、またMACDのことでご相談です。 MACDのヒストグラムの値(バーの大きさ)を特定するのに困っています。 現在のバー(例:=-0.001131)、前のバー(任意のバー)の値を計算したいのですが、どうすればよいでしょうか? で、 例えば現在のバーと前のバーの 差を求め ます。

https://www.mql5.com/ru/forum/134688/page256
 
Solree:
ただ、MTをもう一度再起動すると正常に動作することに気づきました...。

インジケーターは、適切な状態に微調整するのがかなり簡単です。そして、ほとんどの問題が解決されるでしょう。しかし、問題領域は小さい。問題は、もう少し広い範囲にある
 

それじゃ、これでおしまい。

#property indicator_chart_window

extern int count = 1500;

color colors[4];
bool check = true;
int tempCount;

int init()
{
    colors[0] = Blue;
    colors[1] = Purple;
    colors[2] = Orange;
    colors[3] = Red;

    tempCount = count;

    return;
}

int deinit()
{
    ObjectDelete("ResistLine0");
    ObjectDelete("ResistLine1");
    ObjectDelete("ResistLine2");
    ObjectDelete("ResistLine3");

    return;
}

int start()
{
    if (Period() != 60)
    {
        ObjectDelete("ResistLine0");
        ObjectDelete("ResistLine1");
        ObjectDelete("ResistLine2");
        ObjectDelete("ResistLine3");
        
        check = true;
    }
    
    if (TimeHour(Time[1]) == 8 && !check)
        check = true;
    
    if (count != tempCount)
    {
        tempCount = count;
        check = true;
    }

    if (check && Period() == 60)
    {
        ObjectDelete("ResistLine0");
        ObjectDelete("ResistLine1");
        ObjectDelete("ResistLine2");
        ObjectDelete("ResistLine3");
    
        int temp[20];
        int i, y, x, z;
        double price; //Она нужна для заполнения и выбора
        
        for (y = 1; y <= 24; y++)
            if (TimeHour(Time[y]) == 8)
            {//Тут y будет не корректным, когда запускаешь МТ с уже повешенным индюком
                i = y;
                z = y;
                x = i+count;
                
                break;
            }

        for (; i <= x; i++)
        {
            //Тут заполняется temp
        }
        
        double levels[4];
        i = z;
        
        //Тут выбираются нужные элементы из temp

        for (y = 0; y < 4; y++)
            createLine("ResistLine"+y, levels[y], colors[y], i);
        
        check = false;
    }

    return;
}

void createLine(string name, double price, color c, int i)
{
    ObjectCreate(name, OBJ_TREND, 0, Time[i], NormalizeDouble(price, Digits), Time[i]+(24*3600), NormalizeDouble(price, Digits));
    ObjectSet(name, OBJPROP_COLOR, c);
    ObjectSet(name, OBJPROP_WIDTH, 2);
    ObjectSet(name, OBJPROP_BACK, true);
    ObjectSet(name, OBJPROP_RAY, false);
}

まあ実際には、正しいアイテムを選択し、識別するためのアルゴリズムを削除しただけなのですが。