[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 753

 
Morzh09:

请告知有什么收获。

1)我用ZigZag极值的形成时间和极值本身填充一个二维数组。

2)根据给定元素对应的极值是局部最大还是最小,用1或2填充第二个数组。

3) 我通过Alert输出结果。

但在应该打印1或2的地方却总是打印出零。

有什么好处呢!?

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+


string TimeSave1[100][2], TimeSave2[100][2];

double A[], B[];

double Number_of_extremum[];

extern string Currency = "EURUSD";


+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//----

int k;

k=0;

double date;

int status;

for(int shift = 0; shift <= Bars-1; shift++)

{

date = iCustom(NULL, 0, "ZigZag", 12, 5, 3, 0, shift);

//----------------------------------------------------

if(date > 0)

{

TimeSave1[k][0]=TimeToStr(Time[shift]);

TimeSave1[k][1]=date;

k++;

}

}

//====================================================

for (int u=1;u<=k;u++)

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}

//====================================================

for (int j=1;j<10;j++)

{

Alert("время== ",TimeSave1[j][0], " значение== ", TimeSave1[j][1], " max/min== ", Number_of_extremum[j]);

}

//----

return(0);

}

//+------------------------------------------------------------------+

还有一点要澄清。

如何在mql中比较日期和时间(例如,我需要确定ZZ的哪个顶点更早形成--要做到这一点,我需要比较它们形成的时间......)

datetime 本质上是一个int,它包含了秒数,从1970年开始,以酒吧时间结束。我检查更多/更少 - 它的工作...
没有看其他的--刚到这里......。
 

朋友们,一个问题。


面临这个问题。

该指标通过Alert输出一些信息。

但是,渐渐地,警报输出 领域积累了太多的 "垃圾"......

当我再次启动指标时,是否有可能清除警报中的所有旧记录?


提前感谢。

P.S.

请对我之前的帖子进行评论(为什么显示空值而不是1和2)。

 

我在论坛上没有找到...

问题 - 是否有可能改变订单的注释? 好吧,当OrderSend() 操作时,我在注释中加入一些 "OrderNotModify "的值,并对这个订单做进一步的操作,例如部分关闭,我把OrderComment改为 "OrderIsModify"...还是没有?

 
Morzh09:

你能告诉我有什么收获吗。

数组是从0开始填充的,但是这里跳过了第0个索引,我们从第1个索引开始填充,并且

for (int u=1;u<=k;u++) // k при старте =0, u <= k не будет, считать счетчику незачем

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // выражение при старте всегда [1][1]<=[0][1]

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1])) // значит, всегда срабатывает [1][1]>=[0][1]

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}
 
Abzasc:

数组从0开始填充,但这里跳过第0个索引,从第1个索引开始填充,并且

我不太理解你的评论。

1) k--在开始时--不是零!k = 我们在一定的历史深度上检测到的ZigZag顶点的数量!

2)"所以,它总是工作[1][1]>=[0][1]" - 为什么它总是工作? 如果TimeSave1数组的 前一个元素>下一个元素,它将不会工作。

请重复一下,你的意思是说什么。

 
Morzh09:

我不太理解你的评论。

1) k--在开始时--不等于零!k = 我们在一定的历史深度上检测到的ZigZag顶点的数量!

2)"所以,它总是工作[1][1]>=[0][1]" - 为什么它总是工作? 如果TimeSave1数组的前一个元素>下一个元素,它将不会工作。

请再告诉我你想说什么。

我理解K。这就是我不明白的地方。

for (int u=1;u<=k;u++) // на первом шаге счетчик присваивает u = 1

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // здесь, значит[u=1][1]<=[(u=1)-1][1]
// т. е. 1<=0, вы же от 1 еще 1 отнимаете

{

在右边的部分

 
Michelangelo:

是否有可能改变顺序评论?

仅在订单修改中 门票 价格 止损 获利 到期 箭头_颜色

看起来没有。

 

所以...看起来是热的问题... 而且它也影响了我的编译器 :)

看,我需要运行一个数组,记录ZigZ的最大/最小值的形成日期和该最大/最小值。

我需要了解,事实上,ZZ的哪个顶点是最小值,哪个是最大值。

为了做到这一点,我将ZZ的下一个最高点与前一个最高点进行比较。

如果连续的顶部较大,那么它就是一个顶部。

如果它更小,那就是一个谷底。

根据它是一个顶点还是一个谷底,我们分别向另一个数组的一个元素添加1或2。

我对这个问题很好奇,既然错误可能是!!!!

附加的文件:
 
我将在这里用弓箭 - 我打破了我的计算器都一样...:)
我希望能够根据两个已知的数值来计算fiba的水平。
斐波那契零水平对应于1.2807,23.6水平对应于1.2838。

我们需要找到其他的38.2、50.0、61.5、100.0水平以及它们对应的价格。

我甚至找不到1.2807和1.2838之间的任何联系,无法理解其原理。
找到所有其他的值。

请告诉我,有人...:)

 
IgorM:
有没有人遇到过这样的指标:在低位TF中看到条形图打开的时间,而不是多少时间是有趣的,并在图表上画出条形图开始和结束的标记。
#property indicator_chart_window
#property link      "IgorM"

extern int num    = 10;
extern color line = White;
int init()
{return(0);
}
  
void clear(){
   for(int i=ObjectsTotal()-1; i>=0;i--) {
      string name = ObjectName(i);
      if (StringFind(name,"timeH1_") !=-1) ObjectDelete(name);
    }
}

int deinit(){
clear();
return(0);
}

int start()
{   
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0)   return(-1);
   clear();
   for (int i=0;i<=num;i++){ 
      string name = "timeH1_"+TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
      ObjectCreate(name,OBJ_VLINE,0,iTime(NULL,PERIOD_H1,i),0);
      ObjectSet(name,OBJPROP_COLOR,line);
      ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
    }
return(0);
}

我想是的,代码没有被优化,但它确实画出了我想看到的东西。