新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 383

 
konam1:
大家下午好。追踪每小时蜡烛图开盘时抛物线的数值。
当我通过历史运行时,零条的iSAR与图表上的点重合,除了抛物线从顶部到底部的位置变化,反之亦然。
如果(newbarall!=(iTime(Symbol(),60,0))
{
newbarall=iTime(Symbol(),60,0)。
打印(iTime(Symbol(),60,0))。
Print ("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits);
};
因此,有以下问题。
为什么零条抛物线正是在这些时刻被错误地计算出来?
而且,实际上,如何避免它,因为当条形图打开时,点会出现,并且在蜡烛形成过程中没有重新计算,是静态的。
请帮助)。谢谢你!

如果你观察零点蜡烛上的抛物线 点,它毕竟不是静止的--它改变了位置,而且不仅仅是当你上下改变位置时,而是在一般情况下--有时它在一个位置上略有移动(没有上下移动)。

 

你好。请你告诉我为什么横线 没有被删除?

   if(SellInvertedHammer == true)
   {
      //if ((Open1 < Close1 && delta_minus < 0) || (Open1 >= Close1 && delta_plus > 0))
      {
         if(!ObjectCreate(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJ_ARROW_DOWN,0,TimeCurrent(),High[1] + 70*Point))
               {
               Print("Не удалось создать метку вниз");
               }
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_COLOR,clrRed);//--- установка цвета
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_WIDTH,1);//--- установка толщины линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
               InvertedHammerCandle ++;
         Print ("Перевернутый молот");
         Print ("Дельта+ = " + IntegerToString (delta_plus));
         Print ("Дельта- = " + IntegerToString (delta_minus));
         Print ("Объем = " + IntegerToString (volume));
         Print ("Кумулитивная дельта = " + IntegerToString (cum_delta));
         
         if(!ObjectCreate(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),UpLine_InvertedHammer))
         {
         Print("Не удалось создать верхнюю линию");
         }
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrBlueViolet);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         
         if(!ObjectCreate(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),DownLine_InvertedHammer))
         {
         Print("Не удалось создать нижнюю линию");
         }
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrSlateBlue);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         lineInvertedHammerCandle ++;
                         
      }

   }
   if(ma2 > UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 > UpLine_InvertedHammer && ma1 > DownLine_InvertedHammer)
               {
                  UpLine_InvertedHammer = 0;
                  DownLine_InvertedHammer = 0;
               }
      
   if (ma2 < UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 < UpLine_InvertedHammer && ma1 < DownLine_InvertedHammer)
         {
            
             if(!ObjectCreate(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJ_ARROW_SELL,0,TimeCurrent(),Low[1] + 50*Point))
                {
                Print("Не удалось создать метку вниз");
                }
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_COLOR,clrRed);//--- установка цвета
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_WIDTH,1);//--- установка толщины линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
                InvertedHammerCandleSell ++;
                Print("Точка входа SELL по разворотной свече 'Перевернутый молот'");
                UpLine_InvertedHammer = 0;
                DownLine_InvertedHammer = 0;
                
                int upline;
                int downline;
                upline = ObjectFind(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                downline = ObjectFind(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                if(upline > -1 && downline > -1)
                  {
                   ObjectDelete("UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   ObjectDelete("DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   Print("Линии удалены");
                  }
                  Print("Не удалось удалить верхнюю и нижнюю линии");
                
          }

这是整个代码的一部分。如果有必要,我将公布整个代码


谢谢你

 

- 我想学习如何 在MT4或MT5中编写EA,我需要一个有经验的EA作者,他可以在实践中解释所有细微的差别,并帮助我写代码。 我不需要帮助写一个现成的EA,我有一些交易经验和想法,在测试中检查一切,了解如何在条件中使用,我需要学习如何编写不同条件。

 
Artyom Trishkin:

如果你观察零点蜡烛上的抛物线点,它毕竟不是静止的--它改变了位置,而且不仅仅是当你上下改变位置时,而是在一般情况下--有时它在一个位置上有一点移动(没有向上/向下过渡)。


尽管如此,除了 "过渡 "时刻,这段历史是完全吻合的。我甚至对1-2个点的误差感到满意。 在 "过渡期",它可能是20个点或更多。

问题是一样的,如何避免它。谢谢

 
konam1:

尽管如此,除了 "过渡 "时刻,这段历史是完全吻合的。我甚至对1-2个点的误差感到满意。 在 "过渡期",它可能是20个点或更多。

问题是一样的,如何避免它。谢谢你

这到底是什么建筑?

if(newbarall!=(iTime(Symbol(),60,0)))
  {
   newbarall=iTime(Symbol(),60,0);  
   Print(iTime(Symbol(),60,0));
   Print("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits));
  };

它能带来什么

为什么要以这种方式打印 时间?

那你为什么要用这种方式 来打印抛物线 的值呢?

 
Artyom Trishkin:

这到底是一种什么样的设计?

这样的设计有什么好处

为什么要以这种方式打印 时间?

为什么要以这种方式 打印抛物线的值?


-当新的小时蜡烛出现时,这个结构给出了条件的满足:如果小时蜡烛的时间与变量newbarall中的值不一致,那么我们就向该变量写入一个新的时间并满足条件。

打印一小时蜡烛的开启时间

- 抛物线的数值被四舍五入到小数点后4位,与图表上显示的内容一致。

 
konam1:

-这种设计在新的一小时蜡烛出现时给出一个条件:如果一小时蜡烛的时间与newbarall变量中的数值不一致,那么就向该变量写入新的时间,并填入条件。

打印一小时蜡烛的开启时间

- 抛物线值被四舍五入到小数点后4位,与图表上显示的内容一致

1.不,它没有

2.让它像这样

3.你确定你用这个函数打印的是一个实数吗?

4.为什么在结尾的小括号后需要 ;

 
Artyom Trishkin:

1.不,它没有

2.让它这样

3.你确定你用这个函数打印的是一个实数吗?

4.为什么在结尾的小括号后需要 ;


1.尽管如此,该算法只对蜡烛的开端起作用,这样的结构有什么错误?

3.例如,打印的数字是1.1820,所以我很确定。

4.给出了部分代码。

 
konam1:

1.尽管如此,该算法只对蜡烛的开盘起作用,这样的设计有什么错误?

3.数字1.1820是打印出来的,例如,那么肯定。

4.给出了一部分代码。

1.好吧,也许我错过了 - 现在是早上五点半...

3.DoubleToString()

4.但你有一个条件一个复合运算符

if(condition) { }

我没有看到任何其他的解释方式。为什么在运算符后面需要";"?

 
konam1:
因此,有以下问题。
为什么在这些确切的时刻,零条抛物线会被错误地计算出来?
而且,事实上,如何避免它,因为当条形图打开时,点出现了,并且在蜡烛的形成过程中没有重新计算,是静态的。
请帮助)。谢谢你!

"在蜡烛形成过程中,该点出现并静止,没有重新计算 " 的说法是不正确的,如果价格突破抛物线,该点会被重新绘制。
你需要重新计算每一个点的 抛物线,因为突破可能发生在任何时候,而不仅仅是在开盘时。

原因: