初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1377

 
Fast235 #:

正如一位参与者所说,是为了工厂。

由于不可能被感知

你必须给对象分配一个唯一的号码,这个号码必须从参数中收集。

- 对象的开放时间

- 物质时期

- 对象的时间框架

比如说。

int Num= TimeOpen+Period*0.0001

好吧,我不确定这个数字是否会被排斥,int下的数据类型也不适合,但最好是int

 
Mikhail Toptunov #:

必须为该对象分配一个独特的号码,这个号码必须从参数中收集。

- 对象开放时间

- 物质时期

- 对象的时间框架

比如说。

好吧,我不确定这个数字是否会被排斥,而且int下的数据类型也不适合,但最好是int

自动分配独特的号码 - tr_Deal73772984

不清楚问题是什么

 

看看这个简单的代码

   for(uint i=0; i<total; i++)
     {
      //--- try to get deals ticket
      if((ticket=HistoryDealGetTicket(i))>0)
        {
         symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
         if(symbol!=Symbol())
            continue;
         //--- get deals properties
         price =HistoryDealGetDouble(ticket,DEAL_PRICE);
         time  =(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
         type  =HistoryDealGetInteger(ticket,DEAL_TYPE);
         entry =HistoryDealGetInteger(ticket,DEAL_ENTRY);
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
         id    =HistoryDealGetInteger(ticket, DEAL_POSITION_ID);
         //---
         text  =DoubleToString(profit,2);
         //---
         //+------------------------------------------------------------------+
         //|                                                                  |
         //+------------------------------------------------------------------+
         if(price && time && symbol==Symbol())
           {
            //--- create price object
            name=prefix+"Deal"+string(ticket);
            name2=prefix+"Price"+string(ticket);
            if(entry==DEAL_ENTRY_IN)
              {
               ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price,0,0);
                 {
                  timeOpen=time;
                  priceOpen=price;
                 }
              }
            if(entry==DEAL_ENTRY_OUT)
              {
               // if(ShowRightTabTab)
               //---создадим метку на закрытии
               ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price,0,0);
               //--- нарисуем линию  сделки
               ObjectCreate(0,name+"_trend",OBJ_TREND,0,timeOpen,priceOpen,time,price);
               //--- добавим на график результат сделки
               ObjectCreate(0,name2,OBJ_TEXT,0,time,price+offset*_Point);
               if(profit>0.0)
                  clr=inpColorTP;
               else
                  clr=inpColorSL;
              }
 

你好。

我如何使斐波那契水平 可见/不可见?一般来说,我们需要删除一些级别。如果我使用OBJPROP_LEVELS属性,它只是使前N层可用。如何为每个级别设置可见性属性,或完全删除它?

 
leonerd #:

你好。

我如何使斐波那契水平 可见/不可见?一般来说,我们需要删除一些级别。如果我使用OBJPROP_LEVELS属性,它只是使前N层可用。我怎样才能为每个级别设置可见性属性,或完全删除它?

它是这样的。

double fiboLev[] = {0.0, 0.236, 0.382, 0.5, 0.618, 0.764, 0.882, 1.0, 1.236, 1.382, 1.618, 2.0, 2.236, 2.618, 3.236, 3.618, 4.236};
/************************fiboCreate function*************************/
void fiboCreate(datetime t0, double p0, datetime t1, double p1)
 {
  long chartID = ChartID();
  if(ObjectFind(chartID, fiboName) < 0)
   {
    ObjectCreate(chartID, fiboName, OBJ_FIBO, 0, t1, p1, t0, p0);
    ObjectSetInteger(chartID, fiboName, OBJPROP_WIDTH, 2);
    ObjectSetInteger(chartID, fiboName, OBJPROP_COLOR, clrFibo);
    ObjectSetInteger(chartID, fiboName, OBJPROP_LEVELS, 23);
    ObjectSetInteger(chartID, fiboName, OBJPROP_LEVELCOLOR, clrFibo);
    for(int i = 0; i < 17; i++)
     {
      ObjectSetDouble(chartID, fiboName, OBJPROP_LEVELVALUE, i, fiboLev[i]);
      ObjectSetString(chartID, fiboName, OBJPROP_LEVELTEXT, i, "%$ ("+DoubleToString(fiboLev[i]*100, 1)+")");
     }
   }
  else
    if(ObjectFind(chartID, fiboName) == 0)
     {
      ObjectSetInteger(chartID, fiboName, OBJPROP_TIME, 0, t0);
      ObjectSetDouble(chartID, fiboName, OBJPROP_PRICE, 0, p0);
      ObjectSetInteger(chartID, fiboName, OBJPROP_TIME, 1, t1);
      ObjectSetDouble(chartID, fiboName, OBJPROP_PRICE, 1, p1);
     }
  ChartRedraw();
 }/******************************************************************/

这是从EA中摘录的,有些变量在这里没有定义。这段代码将不会被编译。

 

你好,有没有办法用标准的方法从结构中删除带有偏移量的数组元素 呢?


struct OrderFib
  {
   double            id;
   double            Price[Umax];            
   int               type;
   int               PeriodUr50;  // № Периода
  } trade_buff[];

1) trade_buff[0]...
   trade_buff[1]... deleted
   trade_buff[2]...

2) trade_buff[0]...
   trade_buff[1]... 
 

像这样做,你可以做得更专业,不是吗?

//+----------Удаляем старый сигнал-----------------------------------+
void filterDeal_1(int tf)
  {
   for(int i= 0; i<CountTrade; i++)
      if(trade_buff[i].tf == tf)
        {
         ArrayRemove(trade_buff,i,1);
         CountTrade--;
         i= 0;
        }
  }
 
Mikhail Toptunov #:

做到了这一点,能不能以更专业的方式进行?

你好,要删除数组元素,要从数组的末端开始,那么你就不需要改变索引。它自己按顺序进行。

for(int i=CountTrade-1; i>=0; i--)
   {
   if(trade_buff[i].tf == tf)
      {
      ArrayRemove(trade_buff,i,1);
      }
   }
 
Aleksei Stepanenko #:

你好,要删除数组元素,要从数组的末端开始,那么就不需要改变索引。它自己按顺序进行。

对,很好,谢谢!

 
Mikhail Toptunov #:

必须为该对象分配一个独特的号码,这个号码必须从参数中收集。

- 对象开放时间

- 物质时期

- 对象的时间框架

比如说。

我不确定这个数字是否具有排他性,而且int下的数据类型也不适合,但最好是int

如果我们想以后解密,最好是加密对象的名称而不是数字。也就是说,我们从数字组装名称,数字组装成字符串,然后将字符串数字组装成int。唯一要做的就是用分隔符划分字段,或者考虑到每个字段的字符数。