最低和最高函数返回什么 - 页 5 1234567 新评论 Forex Trader 2006.10.20 07:16 #41 Candid 我现在很好。 Klot,有趣的选择。 如果你的人字形变体显示出有趣的结果,我可以在我的开发中应用它们吗? 当然可以,我正饶有兴趣地关注着这一发展,我非常喜欢你的工作。 Forex Trader 2006.10.20 07:19 #42 谢谢你。 Forex Trader 2006.10.20 13:03 #43 2个念头。 更多关于 "选项"。现在,极值切换的条件之一是:电流低点比电流低点高出ExtDeviation点以上(对高点也类似)。如果有必要,该代码可以很容易地实现其他选项。 好吧,继klot 之后,我想补充一点,我现在对人字形的兴趣完全是由我对你的设计的兴趣引起的。 Forex Trader 2006.10.21 07:50 #44 再次纠正了源代码--昨天我发现,在分钟上,第一个重要的条形规则有时不被尊重。为了检查它,我只有一个半小时的在线时间,但似乎是双倍与零的比较。 Forex Trader 2006.10.23 20:43 #45 另一个错误:极值只能在一个柱子的末尾切换,否则实时和历史之间会有差异。这并不难解决。我还没有修正分支中的源代码--让新版本在几分钟内运行。 Forex Trader 2006.10.24 09:52 #46 候选人,做了一个45版本的ZUP指标:http://onix-trade.net/forum/index.php?s=&showtopic=118&view=findpost&p=117997 包括你的人字形作为一个外部人字形。一旦有了稳定的工作版本,我就会修改它。 Forex Trader 2006.10.24 19:52 #47 到目前为止,我没有看到任何问题,这里是更正后的代码版本。 //+------------------------------------------------------------------+ //| CZigZag.mq4 | //| Copyright © 2006, Candid | //| likh@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Candid" #property link "likh@yandex.ru" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Navy //---- indicator parameters extern int ExtDepth=12; extern int ExtDeviation=5; //extern int ExtBackstep=3; int shift; double res=0; int i; double CurMax,CurMin; int CurMaxPos,CurMinPos; int CurMaxBar,CurMinBar; double hPoint; double mhPoint; double EDev; int MaxDist,MinDist; bool FirstRun; bool AfterMax,AfterMin; int BarTime; //---- indicator buffers double ZigZag[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_SECTION); //---- indicator buffers mapping SetIndexBuffer(0,ZigZag); SetIndexEmptyValue(0,0.0); //---- indicator short name IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+")"); FirstRun = true; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int fBar; if (FirstRun) { hPoint = 0.5*Point; mhPoint = -hPoint; EDev = (ExtDeviation+0.5)*Point; AfterMax = true; AfterMin = true; fBar = Bars-1; CurMax = High[fBar]; CurMaxBar = 1; CurMin = Low[fBar]; CurMinBar = 1; MaxDist = 0; MinDist = 0; BarTime = 0; FirstRun = false; } //---- fBar = Bars-counted_bars-1; if (fBar > Bars-2) fBar = Bars-2; for(shift=fBar; shift>=0; shift--) { if (BarTime!=Time[shift]) { BarTime=Time[shift]; if (res > hPoint ) { MaxDist = Bars-CurMaxBar-shift+1; MinDist = Bars-CurMinBar-shift+1; if ((MaxDist>ExtDepth && MinDist>ExtDepth) || res > EDev) { if (AfterMax) { AfterMax = false; AfterMin = true; CurMaxBar = CurMinBar+1; CurMaxPos = Bars-CurMaxBar; CurMax = High[CurMaxPos]; for (i=CurMaxPos-1;i>=shift;i--) { if (High[i] > CurMax+hPoint) { CurMaxBar = Bars-i; CurMax = High[i]; } } // for (i=CurMaxPos-1;i>=shift;i--) ZigZag[Bars-CurMaxBar] = CurMax; } else { // if (AfterMax) AfterMin = false; AfterMax = true; CurMinBar = CurMaxBar+1; CurMinPos = Bars-CurMinBar; CurMin = Low[CurMinPos]; for (i=CurMinPos-1;i>=shift;i--) { if (Low[i] < CurMin-hPoint) { CurMinBar = Bars-i; CurMin = Low[i]; } } // for (i=CurMinPos-1;i>=shift;i--) ZigZag[Bars-CurMinBar] = CurMin; } // else if (AfterMax) } // if ((MaxDist>ExtDepth && MinDist>ExtDepth) || res > EDev) } // if (res > hPoint ) } // if (BarTime!=Time[0]) if (AfterMax) { res = Low[shift]-CurMin; if (res < mhPoint) { ZigZag[Bars-CurMinBar] = 0; CurMin = Low[shift]; CurMinBar = Bars-shift; ZigZag[Bars-CurMinBar] = CurMin; } // if (res < mhPoint) } // if (AfterMax) if (AfterMin) { res = CurMax-High[shift]; if (res < mhPoint) { ZigZag[Bars-CurMaxBar] = 0; CurMax = High[shift]; CurMaxBar = Bars-shift; ZigZag[Bars-CurMaxBar] = CurMax; } // if (res < mhPoint) } // if (AfterMin) } // for(shift=fBar; shift>=0; shift--) //---- return(0); } //+------------------------------------------------------------------+ 关于不同人字形的特殊性问题。这种 "之 "字形的主要特点是,所有的事情都是一次性完成的,只有当极值被固定后,才会对历史数据进行重新审视,而且只针对该极值之后的数据。也就是说,它必须是相当快的。绘制的具体内容当然取决于极值固定的标准,但在这里可以很容易地实现各种选择。例如,我已经通过前一次移动的百分比,通过高点与最低点(分别是低点与最高点)的偏离进行了变体切换,并将切换与平均条形大小绑定。 Forex Trader 2006.10.31 23:28 #48 这里是指标的另一个问题:我发现我的 "之 "字形(图片中光标交叉)有一个扭结。磕碰的时间对应于终端被关闭的时间,价格对应于终端被重新打开的时间。 为了澄清我的怀疑,我在代码中插入了Print。 if (shift<5) Print ("shift=",shift,", Bars=",Bars,", Time[shift]=",TimeToStr(Time[shift],TIME_DATE|TIME_MINUTES),", High[shift]=",High[shift],", Low[shift]=", Low[shift]) 。 然后关闭终端,并在几分钟后重新启动。这里是日志的一个片段: 2006.10.31 23:58:26 CZZ2 EURUSD,M1: shift=0, Bars=38233, Time[shift]=2006.10.31 22:51, High[shift]=1.2763, Low[shift]=1.2763 2006.10.31 23:58:26 CZZ2 EURUSD,M1: shift=0, Bars=38233, Time[shift]=2006。10.31 22:51, High[shift]=1.2763, Low[shift]=1.2763 2006.10.31 23:58:26 CZZ2 EURUSD,M1: shift=0, Bars=38233, Time[shift] =2006.10.31 22:51, High[shift]=1.2763, Low[shift]=1.2763 2006.10.31 23:58:26 CZZ2 EURUSD,M1: shift=1, Bars=38233, Time[shift]=2006.10.31 22:50, high[shift]=1.2763, low[shift]=1.2762 2006.10.3131 23:58:26 CZZ2 EURUSD,M1: shift=2, Bars=38233, Time[shift]=2006.10.31 22:49, High[shift]=1.2763, Low[shift]=1.2763 2006.10.31 23:58:26 CZZ2 EURUSD,M1: shift=3, Bars=38233, Time[shift]=2006。10.31 22:47, High[shift]=1.2763, Low[shift]=1.2762 2006.10.31 23:58:26 CZZ2 EURUSD,M1: shift=4, Bars=38233, Time[shift] =2006.10.31 22:45, High[shift]=1.2763, Low[shift]=1.2762 2006.10.31 23:58:25 CZZ2 EURUSD,M1: shift=0, Bars=38230, Time[shift]=2006.10.31 22:51, High[shift]=1.2763, Low[shift]=1.2763 2006.10.31 23:58:25 CZZ2 EURUSD,M1: shift=1, Bars=38230, Time[shift]=2006.10.31 22:45, High[shift] =1.2762, Low[shift]=1.2762 2006.10.31 23:58:23 CZZ2 EURUSD,M1: shift=0, Bars=38229, Time[shift] =2006.10.31 22:45, High[shift]=1.2762, Low[shift]=1.2762 2006.10.31 23:58:22 CZZ2 EURUSD,M1: shift=0, Bars=38229, Time[shift]=2006.10.31 22:45, High[shift]=1.2762, Low[shift]=1.2762 你可以看到,在23:58:23时,历史数据还没有被抽出,而到23:58:25时,最后的 1巴被抽出。而到了2006.10.31 23:58:26,所有的中间杆都被抽走了。向开发者提问:这是正常的分页顺序吗?如果是这样的话,它的意义何在?很明显,最好是能提前掌握当前的价格值。但历史上有计划地存在一个洞,基本上意味着这段时间的指标肯定会失败。对用户来说,将 指标的计算 推迟到历史记录完全调换之后不是更安全吗?或者至少在完全互换后重新初始化它们? Forex Trader 2006.10.31 23:38 #49 "重新初始化 "的事情是一个错误,它基本上会成为一个开拓者:) Forex Trader 2006.11.01 07:01 #50 我很熟悉这种历史的分页。我对前五个 "之 "字形突破进行了检查,并对ZUP指标进行了重新计算。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Klot,有趣的选择。
如果你的人字形变体显示出有趣的结果,我可以在我的开发中应用它们吗?
当然可以,我正饶有兴趣地关注着这一发展,我非常喜欢你的工作。
更多关于 "选项"。现在,极值切换的条件之一是:电流低点比电流低点高出ExtDeviation点以上(对高点也类似)。如果有必要,该代码可以很容易地实现其他选项。
好吧,继klot 之后,我想补充一点,我现在对人字形的兴趣完全是由我对你的设计的兴趣引起的。
包括你的人字形作为一个外部人字形。一旦有了稳定的工作版本,我就会修改它。
关于不同人字形的特殊性问题。这种 "之 "字形的主要特点是,所有的事情都是一次性完成的,只有当极值被固定后,才会对历史数据进行重新审视,而且只针对该极值之后的数据。也就是说,它必须是相当快的。绘制的具体内容当然取决于极值固定的标准,但在这里可以很容易地实现各种选择。例如,我已经通过前一次移动的百分比,通过高点与最低点(分别是低点与最高点)的偏离进行了变体切换,并将切换与平均条形大小绑定。
为了澄清我的怀疑,我在代码中插入了Print。
然后关闭终端,并在几分钟后重新启动。这里是日志的一个片段:
你可以看到,在23:58:23时,历史数据还没有被抽出,而到23:58:25时,最后的 1巴被抽出。而到了2006.10.31 23:58:26,所有的中间杆都被抽走了。向开发者提问:这是正常的分页顺序吗?如果是这样的话,它的意义何在?很明显,最好是能提前掌握当前的价格值。但历史上有计划地存在一个洞,基本上意味着这段时间的指标肯定会失败。对用户来说,将
指标的计算 推迟到历史记录完全调换之后不是更安全吗?或者至少在完全互换后重新初始化它们?