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
}
elseif (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1])) // значит, всегда срабатывает [1][1]>=[0][1]
{
Number_of_extremum[u]=2;// значит под номером u - нашли max
}
}
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 отнимаете
{
请告知有什么收获。
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的哪个顶点更早形成--要做到这一点,我需要比较它们形成的时间......)
没有看其他的--刚到这里......。
朋友们,一个问题。
面临这个问题。
该指标通过Alert输出一些信息。
但是,渐渐地,警报输出 领域积累了太多的 "垃圾"......
当我再次启动指标时,是否有可能清除警报中的所有旧记录?
提前感谢。
P.S.
请对我之前的帖子进行评论(为什么显示空值而不是1和2)。
我在论坛上没有找到...
问题 - 是否有可能改变订单的注释? 好吧,当OrderSend() 操作时,我在注释中加入一些 "OrderNotModify "的值,并对这个订单做进一步的操作,例如部分关闭,我把OrderComment改为 "OrderIsModify"...还是没有?
你能告诉我有什么收获吗。
数组是从0开始填充的,但是这里跳过了第0个索引,我们从第1个索引开始填充,并且
数组从0开始填充,但这里跳过第0个索引,从第1个索引开始填充,并且
我不太理解你的评论。
1) k--在开始时--不是零!k = 我们在一定的历史深度上检测到的ZigZag顶点的数量!
2)"所以,它总是工作[1][1]>=[0][1]" - 为什么它总是工作? 如果TimeSave1数组的 前一个元素>下一个元素,它将不会工作。
请重复一下,你的意思是说什么。
我不太理解你的评论。
1) k--在开始时--不等于零!k = 我们在一定的历史深度上检测到的ZigZag顶点的数量!
2)"所以,它总是工作[1][1]>=[0][1]" - 为什么它总是工作? 如果TimeSave1数组的前一个元素>下一个元素,它将不会工作。
请再告诉我你想说什么。
我理解K。这就是我不明白的地方。
在右边的部分
是否有可能改变顺序评论?
看起来没有。
所以...看起来是热的问题... 而且它也影响了我的编译器 :)
看,我需要运行一个数组,记录ZigZ的最大/最小值的形成日期和该最大/最小值。
我需要了解,事实上,ZZ的哪个顶点是最小值,哪个是最大值。
为了做到这一点,我将ZZ的下一个最高点与前一个最高点进行比较。
如果连续的顶部较大,那么它就是一个顶部。
如果它更小,那就是一个谷底。
根据它是一个顶点还是一个谷底,我们分别向另一个数组的一个元素添加1或2。
我对这个问题很好奇,既然错误可能是!!!!
我希望能够根据两个已知的数值来计算fiba的水平。
斐波那契零水平对应于1.2807,23.6水平对应于1.2838。
我们需要找到其他的38.2、50.0、61.5、100.0水平以及它们对应的价格。
我甚至找不到1.2807和1.2838之间的任何联系,无法理解其原理。
找到所有其他的值。
请告诉我,有人...:)
有没有人遇到过这样的指标:在低位TF中看到条形图打开的时间,而不是多少时间是有趣的,并在图表上画出条形图开始和结束的标记。
我想是的,代码没有被优化,但它确实画出了我想看到的东西。