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

 
MakarFX:

这里 也可以使用mql4

我不认为是这样的。专家顾问以趋势线的形式创建一个图形对象。

   if(PriceDemUp2() != 0 && PriceDemUp1() != 0)
      CreateLine(trendUp, TimeDemUp2(), PriceDemUp2(), TimeDemUp1(), PriceDemUp1(), TrendUpColor);
   if(PriceDemDw2() != 0 && PriceDemDw1() != 0)
      CreateLine(trendDw, TimeDemDw2(), PriceDemDw2(), TimeDemDw1(), PriceDemDw1(), TrendDwColor);

但重新启动终端后,只有第一个点的参数可用。前一个点的参数只有在新点形成后才会出现。我想我开始明白了--我不仅需要找到指标计算的最后一个点,还需要找到前一个点。我怎样才能跳过最后一个(第一个)点,计算下一个?我发现第一点是这样的。

int BarPointDemUp()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
         return(i);
   }
   return(-1);   
}
//////////////////////////////////////
int BarPointDemDw()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 1, i) != 0)
         return(i);
   }
   return(-1);
 
Youri Lazurenko:

在我看来,情况并不是这样的。该EA以趋势线的形式创建了一个图形对象。

但重新启动终端后,只有第一个点的参数可用。前一个点的参数只有在形成新的点之后才会出现。我想我开始明白了--我不仅需要找到指标计算的最后一个点,还需要找到前一个点。我怎样才能跳过最后一个(第一个)点,计算下一个?我发现第一点是这样的。

放一个计数器。

int BarPointDemUp()
{
   int i;
   int c=0;
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
       c++;
        if(c==2)  return(i);
   }
   return(-1);   
}

一般来说,建立一个数组并填充它,然后从数组中取出所需的点

 
Vitaly Muzichenko:

设置一个计数器

而一般来说,做一个数组并填充它,然后从数组中取出所需的点。

谢谢你。在我看来,你提供的计数器正是我们需要的,最重要的是,它很简单。

在网站更新时,我尝试了你建议的变体。这一切都很有效。非常感谢你。如此简单,我就开始进入状态了。另外,上面的价格和时间功能也得到了简化。

 
MakarFX:

我强调了错误之处

黄色突出显示是不必要的,可以删除。

绿色强调的函数必须在OnStart()之外。

在你想定义一个新条 的地方,使用棕色的高光。

谢谢!)

 

请帮助我找到一个抛物线 上的跟踪止损的工作代码。我想问的是,应该如何将这个功能添加到我的专家顾问中,以便在价格上涨一定数量的时候,它可以跟踪?我将提前感谢,并请有经验和有知识的人不要通过 - 圣杯我必须以某种方式完成它;-)

 
DanilaMactep:

请帮助我找到一个抛物线 上的跟踪止损的工作代码。我想问如何将这个功能添加到我的专家顾问中,以便在价格上涨一定数量的时候,它可以跟踪?提前感谢,请不要与有经验和有知识的人擦肩而过--我应该以某种方式加入圣杯;-)

像这样

//+------------------------------------------------------------------+
   int    Tral = 50;
   double Sar  = iCustom(_Symbol,Period(),"Parabolic",0.02,0.2,0);
//+------------------------------------------------------------------+
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order SELL Modify")}
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order BUY Modify")}
           }
        }
 

你能告诉我如何更新月日以反映新的一年的日期吗?


   datetime time_current=TimeCurrent();
   MqlDateTime time_structure;
   TimeToStruct(time_current,time_structure);
   int curr_day_year=time_structure.day_of_year;
   int start_day=(curr_day_year-m_days_back)>0?curr_day_year-m_days_back:0;
   time_structure.day_of_year=start_day;
   time_structure.hour=0;
   time_structure.min=0;
   time_structure.sec=0;
   datetime start_time=StructToTime(time_structure);

因此,我认为start_time将与改变的年月日一起。但是有一个老的日期...

嗯......可能更容易取下几秒钟......

 
leonerd:

我现在想不出来,我给你举个例子,也许你会明白的

//получаем номер недели в году
int GetWeekNumber(datetime eTime)
   {
   MqlDateTime eDate;
   //получаем дату начала года
   TimeToStruct(eTime,eDate);
   eDate.mon=1;
   eDate.day=1;
   eDate.hour=0;
   eDate.min=0;
   eDate.sec=0;
   datetime StartTime=StructToTime(eDate);
   //возвращаем дату назад в структуру, чтобы определить день недели начала года
   TimeToStruct(StartTime,eDate);
   return(int((eTime-StartTime+86400*eDate.day_of_week)/604800));
   }

一个想法https://www.mql5.com/ru/users/integer

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
 
MakarFX:

像这样

Makar,非常感谢你的代码--我已经通过向icastom传递外部变量而不是僵硬的固定值重写了它。请澄清一下, IntTral = 50;这是保持拖网的距离,还是拖网后的距离(以点为单位 )?

 
DanilaMactep:

Makar,非常感谢你的代码--我已经重写了代码,将外部变量传递给icastom而不是固定值。请澄清, IntTral = 50是以点为单位的利润距离,在这之后,拖网 被打开?

它是以点为单位的利润距离之后,拖网被打开。