[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 270

 
Solree:
Ahahaha。嗯,我不是那么新...

那么,不是工作室里的代码,就是心灵感应者。
 

我不能扔掉所有的代码,客户会抱怨的。但我已经抛出了它失败的部分。其余的代码与这个问题没有关系。出于某种原因,当我用以前放置的诱导剂运行MT时,这个特殊的循环产生了不正确的值。如果不提供整个代码,我就得不到任何想法,我就只能自己继续思考 :(

 
刚刚注意到,如果你再次重启MT,它可以正常工作...
 
Solree:

我不能扔掉整个代码,客户会生气的。但我已经抛出了它失败的部分。其余的代码与该问题没有关系。我有一个反馈回路,当我在之前运行挂有指标的MT时,该回路出于某种原因产生了不正确的数值。如果我不提供整个代码就得不到任何想法,我就得继续自己思考 :(


请多做打印并分析日志。

顺便说一下,在那段代码中并不清楚 "count "变量有什么值。

 
count - 稍后要分析的小节数量。但是,由于某些原因,Y并不是从第一个条形图开始,也就是现在,而是从第一个条形图开始,也就是MT与索引关闭时。i=开始的位置,然后y仍将用于中间循环,所以专门创建了i。z是一切都要计算的标准。这里是y产出的旧酒吧,这是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);
}

嗯,实际上只是删除了选择和识别正确项目的算法。