阵列超出范围?帮帮我?
1 页面的第 522 页 12 上一个上一个
Results 1 to 10 of 11

Thread: 阵列超出范围?帮帮我?

  1. #1
    编辑:这是修复感谢Johnvanwijk!
    https://www.histoforex.com/general-f...-analysis.html


    大家好,
    所以我一直在试图绘制一些东西,但它给我的错误数组超出范围。
    它完美地绘制了绿色箭头,然而红色箭头却无法工作。

    如果有人能告诉我我做错了什么,那会很好。

    这并不是因为我试图访问那些根本不存在或根本不存在的蜡烛。
    我知道有些人可能会说它已经过了可用的酒吧,但我已经测试了即使有1000的限制,我相信我的图表已经超出了范围。

    这是代码:

    插入的代码// --------------------------------------------- --------------------- /|分形练习.mq4 |/| |/| https://www.mql5.com |/ ----------------------------------------------- ------------------- #property copyright #property link https://www.mql5.com #property version 1.00 #property strict #property indior_chart_window double Highs#91; #93 ;;双低#91;#93 ;;/ ----------------------------------------------- ------------------- /|自定义指标初始化函数|/ ----------------------------------------------- ------------------- int OnInit(){//---绘图样式SetIndexStyle(0,DRAW_ARROW,EMPTY,1,clrGreen); SetIndexArrow(0,234); SetIndexStyle(1,DRAW_ARROW,EMPTY,1,clrRed); SetIndexArrow(1,233);/---指标缓冲区SetIndexBuffer(0,Highs); SetIndexBuffer(1,Lows);/--- return(INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /|自定义指标迭代函数|/ ----------------------------------------------- ------------------- int OnCalculate(const int rates_total,const int prev_calculated,const datetime time#91;#93 ;, const double open#91;#93; ,const double high#91;#93;; const double low#91;#93;; const double close#91;#93; const long tick_volume#91;#93; const long volume#91;#93; ,const int spread#91;#93;){//--- int i = 1; int ii = 1; int Limit = Bars - 1; (高#91; i#93;高#91; i 1#93;)如果(高于#91; i#93;高#91; i - 1#93;){Highs#91; i#93; =高#91;我#93 ;; }} i ; }如果(ii lt; Limit){if(Low#91; ii#93; lt; Low#91; ii 1#93;){if(Low#91; ii#93; lt; Low#91; ii - 1#93;){低#91; ii#93; =低#91; ii#93 ;; }} ii ; }/--- prev_calculated返回下一次调用返回值(rates_total); }/ ---------------------------------------------- --------------------

    谢谢!

  2. #2
    如果我将while循环分成两个指标,它可以完美地工作,没有一个错误,但当它们在一起时不会发生。它没有访问任何不存在的东西。所以我不确定它为什么说它超出范围。

  3. #3

    Quote Originally Posted by ;
    嘿家伙,所以我一直在试图绘制一些东西,但它给我的错误数组超出范围。它完美地绘制了绿色箭头,然而红色箭头却无法工作。如果有人能告诉我我做错了什么,那会很好。这并不是因为我试图访问那些根本不存在或根本不存在的蜡烛。我知道有些人可能会说它已经过了可用的酒吧,但我已经测试了即使有1000的限制,我相信我的图表已经超出了范围。这是代码:// ------------------------------------------ ------------------------ ...
    在每个循环中,尝试用下面的例子来分解它,以避免超过可用的条:插入的代码if(i> = Bars-1)break;如果(ii>; = Bars-1)中断,则插入代码;

  4. #4
    1附件(S)
    Quote Originally Posted by ;
    {quote}在每一个循环中,尝试用下面的例子来分解它,以避免经过可用的酒吧:if(i gt; = Bars-1)break; if(ii> = Bars-1)break;
    从我可以看到的是,我的限制已经做到了,但是我仍然将其插入代码中以便测试,甚至在几个位置尝试过,但错误仍然存​​在。我真的很困惑,为什么它给了我错误。这是迄今为止的结果图片。它应该对红色箭头指向的低点也一样。你也可以看到这个错误只是为了给人一个想法。

  5. #5

    Quote Originally Posted by ;
    {quote}从我所看到的是我的Limit已经做到了,但是我仍然将它插入到代码中,只是为了测试,甚至在几个位置尝试了它,但是错误仍然存​​在。我真的很困惑,为什么它给了我错误。这是迄今为止的结果图片。它应该对红色箭头指向的低点也一样。你也可以看到这个错误只是为了给人一个想法。 {图片}
    哪一行是71?

  6. #6

    Quote Originally Posted by ;
    {quote}哪一行是71?
    那将是低[ii] =低[ii];在第二个while循环中。

  7. #7
    您好AntiVi,你应该指出需要多少缓冲区....在你的代码开始下面的变化(在#property indior_chart_window后)使它工作很好..... #property indior_buffers 2欢呼享受!约翰插入代码// -------------------------------------------- ---------------------- /|分形练习.mq4 |/| AntiVi |/| https://www.mql5.com |/ ----------------------------------------------- ------------------- #property copyright AntiVi #property link https://www.mql5.com #property version 1.00 #property strict #property indior_chart_window/START ADDED JvW #property indior_buffers 2/END ADDED JvW double Highs#91;#93 ;;双低#91;#93 ;;/ ----------------------------------------------- ------------------- /|自定义指标初始化函数|/ ----------------------------------------------- ------------------- int OnInit(){//---绘图样式SetIndexStyle(0,DRAW_ARROW,EMPTY,1,clrGreen); SetIndexArrow(0,234); SetIndexStyle(1,DRAW_ARROW,EMPTY,1,clrRed); SetIndexArrow(1,233);/---指标缓冲区SetIndexBuffer(0,Highs); SetIndexBuffer(1,Lows);/--- return(INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /|自定义指标迭代函数|/ ----------------------------------------------- ------------------- int OnCalculate(const int rates_total,const int prev_calculated,const datetime time#91;#93 ;, const double open#91;#93; ,const double high#91;#93;; const double low#91;#93;; const double close#91;#93; const long tick_volume#91;#93; const long volume#91;#93; ,const int spread#91;#93;){//--- int i = 1; int ii = 1; int Limit = Bars - 1; (高#91; i#93;高#91; i 1#93;)如果(高于#91; i#93;高#91; i - 1#93;){Highs#91; i#93; =高#91;我#93 ;; }} i ; }如果(ii lt; Limit){if(Low#91; ii#93; lt; Low#91; ii 1#93;){if(Low#91; ii#93; lt; Low#91; ii - 1#93;){低#91; ii#93; =低#91; ii#93 ;; }} ii ; }/--- prev_calculated返回下一次调用返回值(rates_total); }/ ---------------------------------------------- --------------------

  8. #8

    Quote Originally Posted by ;
    嗨,你应该指出需要多少缓冲区....在你的代码开始处的以下变化(在#property indior_chart_window之后)使它工作得很好..... #property indior_buffers 2欢呼享受! John/ ---------------------------------------------- -------------------- /|分形练习.mq4 |/| |/|
    https://www.mql5.com|/ ----------------------------------------------- ------------------- #property版权#property链接https://www.mql5.com #property版本1.00 #property严格#property ...
    你先生是个天才。我无法相信这个解决方法如此简单。我会把这个归咎于我的经验不足,并且自己去学习。我花了好几个小时试图弄清楚,我发现的所有解决方法都没有解决任何问题。我将编辑第一篇文章以包含修正,以便人们可以在困扰的时候得到简单的答案!非常感谢!

  9. #9

    Quote Originally Posted by ;
    {你}先生是个天才。我无法相信这个解决方法如此简单。我会把这个归咎于我的经验不足,并且自己去学习。我花了好几个小时试图弄清楚,我发现的所有解决方法都没有解决任何问题。我将编辑第一篇文章以包含修正,以便人们可以在困扰的时候得到简单的答案!非常感谢!
    嗨AntiVi,除了john共享的内容之外,您还希望习惯使用作为参数传递给OnCalculate函数的数据,而不是依赖内置变量中的数据。此外,你想确保你正确地做你的回望。您不需要在每个记号上处理整个循环(所有图表数据)。您只需处理需要更新的部分指标数据。这里是一个如何更好地使用OnCalculate函数的例子。插入代码#property strict #property indior_chart_window/START ADDED JvW #property indior_buffers 2/END ADDED JvW double Highs#91;#93 ;;双低#91;#93 ;;/ ----------------------------------------------- ------------------- /|自定义指标初始化函数|/ ----------------------------------------------- ------------------- int OnInit(){//---绘图样式SetIndexStyle(0,DRAW_ARROW,EMPTY,1,clrGreen); SetIndexArrow(0234); SetIndexStyle(1,DRAW_ARROW,EMPTY,1,clrRed); SetIndexArrow(1233);/---指标缓冲区SetIndexBuffer(0,Highs); SetIndexBuffer(1,低点);返回(INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /|自定义指标迭代函数|/ ----------------------------------------------- ------------------- int OnCalculate(const int rates_total,const int prev_calculated,const datetime time#91;#93 ;, const double open#91;#93; ,const double high#91;#93;,const double low#91;#93;; const double close#91;#93;#const; long long tick_volume#91;#93; const long volume#91;#93; ,const int spread#91;#93;){//--- int limit = rates_total - prev_calculated - 2; limit = limit < 1? 1:限制; for(int i = limit; i gt; 0; i--){if(high#91; i#93; gt; high#91; i 1#93; high#91; i#93; gt; high #91; i-1#93;)高#91;#93; =高#91;我#93 ;; (低#91; i#93; lt;低#91; i 1#93;低#91; i#93; lt;低#91; i-1#93;)低#91; i#93 ; =低#91;我#93 ;; }/--- prev_calculated返回下一次调用返回值(rates_total); }

  10. #10
    天才 ???谢谢,但我不这么认为。更多的是有经验的失败者:-)我敢打赌,你可以在这里展示每一个错误,遗漏或代码错字:我在过去做过同样的事情......可能是两次! Cheerio

发布权限

  • 您不可发布新主题
  • 您不可回复
  • 您不可发布附件
  • 您不可编辑您的帖子
  •  
  • BB代码是打开的
  • 表情符号是打开的
  • [IMG]代码是打开的
  • [视频]代码是打开的
  • HTML代码是关闭的
histoforex网站使用cookie 文字跟踪
histoforex网站使用cookie 文字跟踪,某些设定已经固定。您可以点击此处阅读我们的Cookie使用说明。 请点击右键接受我们的cookies。如果您选择继续使用histoforex网站,我们将认为您接受我们的cookies。