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

 
我怎么知道N条上没有OBJ_RECTANGLE
 
neverness:

在MT5中真的有什么变化吗?

在MT4或MT5中都没有这样的东西。

在mt5中,甚至有一个错误,就是在当前时段显示分隔符,在H2的时间上显示分隔符。

 
Ghabo:
我怎么知道N条上没有OBJ_RECTANGLE
也许可以这样试一试?
  int n = Bars(Symbol(), PERIOD_CURRENT, ObjectGetInteger(0,"Rectangle",OBJPROP_TIME,1), TimeCurrent());
  Print(n);
 
Vitaly Muzichenko:

在MT4或MT5中都没有这样的东西。

在mt5中,甚至出现了一个错误,即在当前时间段内显示分离器,在H2的时间段内显示分离器。

最后我看到了在整个 "讨论 "中对我的问题的唯一 "建设性的回答"。

至于错误,它们存在于MT4和MT5的当前(最后)框架的所有分离器周上。

上周分离器MT4/MT5在任何地方都画出了分离器7天而不是5天。

但这并不是重点。错误一直存在,也将一直存在。如果有一个绘制分隔符的程序代码,所有这些都可能被纠正。

让我吃惊的不是错误,完全是别的东西。

在MT4/MT5存在的所有时间里,难道没有人想过写一个程序 来在预测区域画出分隔线吗?

毕竟,这个方案是最简单的。

你只需要知道最后一个分割线的位置和沿X轴的时间 "解决方案"(即什么时间间隔需要1个像素)。

而到目前为止,还没有人曾?

现在这真的让我感到惊讶。

我又得自己做所有的事情了。

 
Igor Makanu:

这并不复杂,但你似乎不明白指标在MT中是如何工作的,它们的优势是什么。

你可能是对的。

有一个数学上的轶事。

有人问一位数学家:"你如何在水壶中烧水?

数学家回答:--取一个空的水壶,把水倒进去,放在灶台上,把灶台打开,等水烧开。

- 好的。但如果水壶已经满了怎么办?- 这位数学家问道。

- 把水从水壶里倒出来,用上面的方法解决问题。- 数学家回答说。

所以,你去那里。

这个笑话是关于你的。

 
neverness:

这个笑话是关于你的。

嗯,不知道是笑还是....。如果你知道有一个交易终端 可以满足你所有的奇思妙想,那还有什么意义呢?我对MT4/5百分之百满意,我可以用它做任何事情,保留在图表上画D1周期的指标,如果你对编程感兴趣,可以修改它以满足你的需要...我不认为你能做到 ....

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot line1
#property indicator_label1  "Period"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label2  "Period"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- input parameters
input int      Days=3;
//--- indicator buffers
double         Pmax[],Pmin[];
bool run=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pmax);
   SetIndexBuffer(1,Pmin);
   run=true;
   switch(_Period)
     {
      case PERIOD_M1:   SetIndexShift(0,1440*Days);SetIndexShift(1,1440*Days);   break;
      case PERIOD_M5:   SetIndexShift(0,288*Days); SetIndexShift(1,288*Days);    break;
      case PERIOD_M15:  SetIndexShift(0,96*Days);  SetIndexShift(1,96*Days);     break;
      case PERIOD_M30:  SetIndexShift(0,48*Days);  SetIndexShift(1,48*Days);     break;
      case PERIOD_H1:   SetIndexShift(0,24*Days);  SetIndexShift(1,24*Days);     break;
      case PERIOD_H4:   SetIndexShift(0,6*Days);   SetIndexShift(1,6*Days);      break;
      default: run=false; SetIndexShift(0,0); SetIndexShift(1,0);ArrayInitialize(Pmax,EMPTY_VALUE);ArrayInitialize(Pmin,EMPTY_VALUE); break;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(prev_calculated==0)
     {
      run=true;
      ArrayInitialize(Pmax,EMPTY_VALUE);
      ArrayInitialize(Pmin,EMPTY_VALUE);
     }
   if(run)
     {
      int i=0,lastperiod=TimeDay(time[0]);
      double maxvalue;
      if(!ChartGetDouble(ChartID(),CHART_PRICE_MAX,0,maxvalue)) maxvalue=1000.0;
      maxvalue*=10.0;
      while(i<rates_total)
        {
         if(TimeDay(time[i])!=lastperiod)
           {
            lastperiod=TimeDay(time[i]);
            Pmax[i-1]=maxvalue;
            Pmin[i-1]=0.0;
           }
         else
           {
            Pmax[i]=EMPTY_VALUE;
            Pmin[i]=EMPTY_VALUE;
           }
         i++;
        }
      run=false;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
Chart EURUSD.e, H1, 2018.11.09 13:11 UTC, RoboForex (CY) Ltd, MetaTrader 4, Demo


我已经试过了,我不知道为什么,我不知道为什么,这是我第一次看到这样的情况,似乎我在切换时间段时初始化了缓冲器

 
neverness:

最后我看到了在整个 "讨论 "中对我的问题的唯一 "建设性的回答"。

至于错误,它们存在于MT4和MT5的当前(最后)框架的所有分离器周上。

上周分离器MT4/MT5在任何地方都画出了分离器7天而不是5天。

但这并不是重点。错误一直存在,也将一直存在。如果有一个绘制分隔符的程序代码,所有这些都可能被纠正。

让我吃惊的不是错误,完全是别的东西。

在MT4/MT5存在的所有时间里,难道没有人想过写一个程序 来在预测区域画出分隔线吗?

毕竟,这个方案是最简单的。

你只需要知道最后一个分割线的位置和沿X轴的时间 "解决方案"(即什么时间间隔需要1个像素)。

而到目前为止,还没有人曾?

现在这真的让我感到惊讶。

再一次,你必须自己做所有事情。

我告诉你--我已经做了不止一次。(以及在市场上,并在一个以上的指标中)

而你说你已经写了代码,你会再写吗?)

 
Igor Makanu:

嗯,我不知道是要笑还是要....。如果你知道一个交易终端 可以满足你所有的奇思妙想,那还有什么意义呢? 我对MT4/5百分之百满意,我可以用它做任何事情,保留在图表上画D1周期的指标,对编程感兴趣,修改它以满足你的需要......我不认为你能做到 ....


我不知道为什么,这是我第一次看到这样的错误

当然了,谢谢。

正如我所怀疑的,在不完整的日子里,你的月经分隔符与标准分隔符不一致。

但这并不十分重要,因为我认为你不应该尝试重新绘制标准分隔符,而是将预测区域分隔符与历史分隔符对接。

那么,不完整的历史日定界符的位置将不会影响预测定界符。

你的指标和标准定界符之间的另一个重要区别是,标准定界符是在图表本身的每个事件中更新,但你的指标是在每个OnCalculate()事件中更新。我以为这一点会很明显--但事实上,它几乎不明显。

当然,这个指标应该重新设计,但还是要感谢。看到这一点很有意思。

 
Ghabo:

这原来是具有指定名称的对象的条形索引。有一个以上的对象,其名称是 "QUADRO "+Time[i+1] 我怎么知道十条上没有这样的对象?

缓冲区很清楚,如果值是空的,图表上就不会显示任何东西,但对象呢?

if (ObjectFind(0,"QUADRO"+Time[10])<0)
        {
        //объекта нет на 10 баре
        }
 
Vitaly Muzichenko:
我可以用这种方式试试吗?
  int n = Bars(Symbol(), PERIOD_CURRENT, ObjectGetInteger(0,"Rectangle",OBJPROP_TIME,1), TimeCurrent());

谢谢你。结果是具有指定名称的对象的条形索引(120983)。有一个以上的对象,其名称是 "QUADRO "+Time[i+1] 我怎么知道十条上没有这样的对象?

缓冲区我明白了,如果值是空的,图表上就不会显示任何东西,但对象呢?

原因: