来自一个 "傻瓜 "的问题 - 页 235 1...228229230231232233234235236237238239240241242...277 新评论 --- 2013.01.31 15:18 #2341 lazarev-d-m:改成了这样 似乎是在工作。你的数组没有被序列化。这就是为什么它是这样的。Buffer[i+1]=Buffer[i]+delta;窥探未来它不会重新计算0巴--出于同样的原因--你的开始--它不会从0开始。 Denis Lazarev 2013.01.31 16:03 #2342 sergeev:你的数组没有被序列化。所以,这就是为什么它是这个。窥视未来。它不会重新计算0巴,原因与你不从0开始一样。我的0bar没有按照公式计算。Buffer[0]=price[0]; 然后根据价格走势,该指标将追上趋势例如,如果价格已经远离指标并且不会移动,那么在蜡烛的"期间"指标将赶上价格,这对我来说是一种替代MA的方法。 --- 2013.01.31 16:40 #2343 lazarev-d-m: 对我来说,这是对MA的一种替代。 展望未来,你可以安全地把这个替代方案扔进垃圾桶。 Konstantin Chernov 2013.01.31 17:19 #2344 我的第一个指标。我想把符号的比例从0调整到100。我做得对吗?如何使当前的条形图不被重新计算(在测试器中它会抽动,但在图表中不会。) #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Main" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- indicator buffers double MainBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); IndicatorSetString(INDICATOR_SHORTNAME,"NormSymbol"); IndicatorSetInteger(INDICATOR_DIGITS,2); ArrayInitialize(MainBuffer, EMPTY_VALUE); //--- return(0); } //+------------------------------------------------------------------+ //| 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[]) { int first,bar,nLowBar=0,nHighBar=0; int nVizCount = (int)ChartGetInteger(0, CHART_VISIBLE_BARS); if(prev_calculated==0) // проверка на первый старт расчёта индикатора { first=0; // стартовый номер для расчёта всех баров } else { first=prev_calculated-1; // стартовый номер для расчёта новых баров } //---- основной цикл расчёта индикатора for(bar=first; bar<rates_total; bar++) { nLowBar =ArrayMinimum(low, bar, nVizCount); nHighBar=ArrayMaximum(high, bar, nVizCount); if(nLowBar>0 && nHighBar>0 && high[nHighBar]-low[nLowBar]!=0) { MainBuffer[bar]=((close[bar] -low[nLowBar])/(high[nHighBar]-low[nLowBar]))*100; } else { MainBuffer[bar]=EMPTY_VALUE; } } //--- return value of prev_calculated for next call return(rates_total); } Yedelkin 2013.01.31 17:37 #2345 Konstantin83: 如何使当前栏不重新计算 记忆当前条形图的开盘时间,并将其与传入条形图的相同值进行比较。只有在数值不匹配时才会重新计算当前条形图的数值。我会把这个放在初始化块中。 nVizCount = (int)ChartGetInteger(0, CHART_VISIBLE_BARS); 而这些变量将在程序的全局层面上声明。int first,bar,nLowBar=0,nHighBar=0, nVizCount; Konstantin Chernov 2013.01.31 17:47 #2346 Yedelkin:记忆当前条形图的开盘时间,并将其与传入条形图的相同值进行比较。只有在数值不匹配时才会重新计算当前条形图的数值。我会把这个放在初始化块中。 谢谢你。这在一般情况下是正确的吗? Yedelkin 2013.01.31 18:08 #2347 Konstantin83: 一般来说,一切都很正确? 我没有注意到其他事情。这些文章建议采用类似的结构。有一个被零除的 检查。是的,为了避免重新计算,你也可以比较prev_calculated和rate_total,就我的记忆而言。 Konstantin Chernov 2013.01.31 18:48 #2348 Yedelkin:我没有注意到其他事情。这些文章建议采用类似的结构。有一个被零除的检查。是的,为了避免重新计算,你也可以比较prev_calculated和rate_total,就我的记忆而言。 你知道为什么关闭终端并重新启动终端 后,指标不画线吗?如果你切换到另一个时间框架,它就会被画出来。 Yedelkin 2013.02.01 07:18 #2349 Konstantin83: 你知道为什么关闭带有指标的终端并重新启动终端 后,指标没有画线吗?如果你切换到另一个时间框架,就会被画出来。 终端在启动时需要一些时间来 "起床",将其数据库与服务器同步,等等。如果指标同时启动,可能没有数据用于指标计算。尝试最简单的解决方案:在OnInit()中插入两到三秒的延迟。 好的解决方案是在搜索问题区域时打印所有重要信息。喜欢 if(nLowBar<0) Print("Ошибка, nLowBar=",nLowBar,", prev_calculated=",prev_calculated,", bar=",bar); Yedelkin 2013.02.02 08:38 #2350 Yedelkin: forward666 :需要一个可视化的东西我还没有找到任何关于真实交易的帮助--只需尝试在模拟账户中开仓和平仓。 这里是:https://www.mql5.com/ru/forum/6343/page96#comment_419028 1...228229230231232233234235236237238239240241242...277 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
改成了这样
似乎是在工作。你的数组没有被序列化。
这就是为什么它是这样的。
Buffer[i+1]=Buffer[i]+delta;
窥探未来
它不会重新计算0巴--出于同样的原因--你的开始--它不会从0开始。
你的数组没有被序列化。
所以,这就是为什么它是这个。
窥视未来。
它不会重新计算0巴,原因与你不从0开始一样。
我的0bar没有按照公式计算。
然后根据价格走势,该指标将追上趋势
例如,如果价格已经远离指标并且不会移动,那么在蜡烛的"期间"指标将赶上价格,这对我来说是一种替代MA的方法。
lazarev-d-m:
对我来说,这是对MA的一种替代。
我的第一个指标。我想把符号的比例从0调整到100。我做得对吗?如何使当前的条形图不被重新计算(在测试器中它会抽动,但在图表中不会。)
记忆当前条形图的开盘时间,并将其与传入条形图的相同值进行比较。只有在数值不匹配时才会重新计算当前条形图的数值。
我会把这个放在初始化块中。
而这些变量将在程序的全局层面上声明。
记忆当前条形图的开盘时间,并将其与传入条形图的相同值进行比较。只有在数值不匹配时才会重新计算当前条形图的数值。
我会把这个放在初始化块中。
我没有注意到其他事情。这些文章建议采用类似的结构。有一个被零除的 检查。
是的,为了避免重新计算,你也可以比较prev_calculated和rate_total,就我的记忆而言。
我没有注意到其他事情。这些文章建议采用类似的结构。有一个被零除的检查。
是的,为了避免重新计算,你也可以比较prev_calculated和rate_total,就我的记忆而言。
终端在启动时需要一些时间来 "起床",将其数据库与服务器同步,等等。如果指标同时启动,可能没有数据用于指标计算。尝试最简单的解决方案:在OnInit()中插入两到三秒的延迟。
好的解决方案是在搜索问题区域时打印所有重要信息。喜欢
Yedelkin:
我还没有找到任何关于真实交易的帮助--只需尝试在模拟账户中开仓和平仓。
这里是:https://www.mql5.com/ru/forum/6343/page96#comment_419028