prev_calculated - 页 2 123456789...14 新评论 Alexander Puzanov 2016.10.17 06:57 #11 Alexey Kozitsyn: 如果只是在0时重新计算整个指标呢?对我来说,这似乎是最好的解决方案。 对于一个有大量图形的重型指标来说--不是最好的。不,解决方案很简单--使用你自己的变量来代替prev_calculated、静态或全局变量。但这是一个拐杖,我们想要别的东西。 Vladimir Karputov 2016.10.17 06:57 #12 Alexey Kozitsyn::)这就是我的工作... 这就是我的理解,我只是引用了你的问题,但实际上我是在回答Alexander Puzanov。:) Vladimir Karputov 2016.10.17 07:00 #13 Alexander Puzanov: 对于一个有大量图形的重型指标来说,这不是最好的解决方案。解决办法很简单--使用你自己的变量来代替prev_calculated、静态或全局变量。但这是一个拐杖,我们想要别的东西。一个使用 "拐杖 "一词的人。要么是太懒了,不看文件或者还不知道应该如何正确。唯一正确的解决方案:在prev_calculate==0时重新计算指标。 fxsaber 2016.10.17 07:19 #14 Alexander Puzanov: 对于一个有大量图形的重型指标来说--不是最好的。不,解决方案很简单--使用自己的变量来代替prev_calculated、静态 或全局变量。但这是一个拐杖,我们想要别的东西。 根本就不是一个拐杖。我就是这样做的。 Alexander Puzanov 2016.10.17 07:20 #15 Karputov Vladimir: 而如果历史记录被调换了,就意味着可能会有新的条形图 被遗漏或者之前没有计算出来--也就是说,指标读数已经错了。斯拉瓦。如果prev_calculated=0,这意味着必须进行全面的重新计算。在这种情况下,所有的标准指标都要重新计算。这一切都很清楚,但可惜的是,这一切并没有取消这个。 亚历山大-普扎诺夫。这一切都很有用,但不能按照它的直接目的来使用--显示在前一次调用中处理了多少个 "条"--prev_calculated指标是不同的;有些根本不需要条形计算,有些只需要实时刻度,有些对转换深度有限制--它们不关心历史上下一个变化是什么,有些需要跟踪图形对象,等等。他们不需要额外的函数来跟踪附在prev_calculated上的历史变化,他们只需要这个--"在前一次调用中处理过的条形图"。他们不需要它。总之,程序员先生,请不要让加入者分心去'捕捉事件'。 Alexey Viktorov 2016.10.17 07:41 #16 Alexey Kozitsyn: 如果我简单地将整个指标重新计算为0呢?在我看来,这是最好的解决方案。我不会说这是最好的解决方案。至少现在还没有。我决定写一个指标,记录账户上当前的缩减量,这样我就不必在历史上重新计算什么了。第一行起初看起来是这样的。 if(prev_calculated == 0) return(rates_total); 但启动后,我发现缓冲区不是空的,也没有归零。缓冲区里有一些价格,来历不明。我不得不将缓冲区强制为零...接下来,又发现了一个问题。prev_calculate被清零,指标被重新计算,分别将所有的缓冲区清零,直到最后一个棒。无论如何,我现在已经放弃了这个想法。 Vladimir Karputov 2016.10.17 07:47 #17 Alexey Viktorov:我不会说这是最好的解决方案。至少现在还没有。我决定写一个指标,记录账户上当前的缩减量,这样我就不必在历史上重新计算什么了。起初,第一行看起来是这样的。 if(prev_calculated == 0) return(rates_total); 但在启动后,我发现缓冲区并不是空的,也没有归零。缓冲区里有一些价格,我不知道它是从哪里来的。不得不将缓冲区强制为零...接下来,又发现了一个问题。prev_calculate被清零,指标被重新计算,分别将所有的缓冲区清零,直到最后一个棒。总之,我现在已经放弃了这个想法。"......一些来历不明的价格......"--这是指标缓冲区数组中未被初始化的元素的垃圾。应该做什么。在prev_calculate==0时,在循环中浏览指标缓冲区的所有元素,并给它们赋值。在这种情况下,你需要监测新条形图出现时的情况(rate_total减去prev_calculate将大于0)--指标缓冲区相应增加,这个新元素也应被初始化。 Vladimir Karputov 2016.10.17 07:59 #18 关于交易、自动交易系统和交易策略测试的论坛 虫子,虫子,问题 Alexey Viktorov, 2016.10.17 09:58 你明白你写的是什么吗?最好解释一下如何摆脱垃圾的问题,FIRST 运行的指标。这些垃圾是从哪里来的?在将缓冲区链接到数组时不是应该有初始化吗? 还是在初始化过程中,空间垃圾进入了数组?为什么mql4中没有这些垃圾?给我一个例子,如何在不使用不相干的额外静态或全局变量 的情况下从正常值中筛选出垃圾。每个人都能很好地引用文件。 Vladimir Karputov 2016.10.17 08:01 #19 Alexey Viktorov:没有人欠别人什么。因此,在绑定之后,在你自己初始化数组的所有元素之前,指标缓冲区中会有一些垃圾。已添加。我现在要创造一个例子...//+------------------------------------------------------------------+//| prev_calculated.mq5 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2016, MetaQuotes Software Corp."#property link "https://www.mql5.com"#property version "1.00"#property indicator_separate_window#property indicator_buffers 1#property indicator_plots 1#property indicator_type1 DRAW_LINE#property indicator_color1 clrGray#property indicator_label1 "prev_calculated"//---- buffersdouble ExtBuffer[];//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit() {//--- indicator buffers mapping SetIndexBuffer(0,ExtBuffer,INDICATOR_DATA);//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| 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[]) {//--- if(prev_calculated==0) { //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории for(int i=0;i<rates_total;i++) ExtBuffer[i]=1.01; return(rates_total); }//--- пересчитываем самый правый бар или самый правый бар и один предыдущий при появлении нового бара int limit=rates_total-prev_calculated+1; for(int i=rates_total-limit;i<rates_total;i++) { //--- визуализация пересчёта самого правого бара static bool drive=false; if(!drive) ExtBuffer[i]=1.03; else ExtBuffer[i]=1.02; drive=!drive; }//--- return value of prev_calculated for next call return(rates_total); }//+------------------------------------------------------------------+ 在M1上运行它。你会看到,只有最右边的柱子被重新计算。 附加的文件: prev_calculated.mq5 5 kb 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 萌新求助,最简单的5日移动均线如何编写?mql4 prev_calculated Alexey Viktorov 2016.10.17 09:01 #20 Karputov Vladimir:没有人欠别人什么。因此,在绑定之后,在你自己初始化数组的所有元素之前,指标缓冲区中会有一些垃圾。已添加。我现在要创造一个例子...//+------------------------------------------------------------------+//| prev_calculated.mq5 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2016, MetaQuotes Software Corp."#property link "https://www.mql5.com"#property version "1.00"#property indicator_separate_window#property indicator_buffers 1#property indicator_plots 1#property indicator_type1 DRAW_LINE#property indicator_color1 clrGray#property indicator_label1 "prev_calculated"//---- buffersdouble ExtBuffer[];//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit() {//--- indicator buffers mapping SetIndexBuffer(0,ExtBuffer,INDICATOR_DATA);//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| 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[]) {//--- if(prev_calculated==0) { //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории for(int i=0;i<rates_total;i++) ExtBuffer[i]=1.01; return(rates_total); }//--- пересчитываем самый правый бар или самый правый бар и один предыдущий при появлении нового бара int limit=rates_total-prev_calculated+1; for(int i=rates_total-limit;i<rates_total;i++) { //--- визуализация пересчёта самого правого бара static bool drive=false; if(!drive) ExtBuffer[i]=1.03; else ExtBuffer[i]=1.02; drive=!drive; }//--- return value of prev_calculated for next call return(rates_total); }//+------------------------------------------------------------------+ 在M1上运行它。你会看到,只有最右边的柱子被重新计算。回答错误问题的惊人能力...现在向我解释一下,如果发生了什么。1.计算了100个条形图,输入到从0到99的缓冲区(让我们把方向视为时间序列),值为1.03。2.突然间,历史记录被加载,prev_calculated变成了0从哪一栏开始,它将是1.03? 123456789...14 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果只是在0时重新计算整个指标呢?对我来说,这似乎是最好的解决方案。
:)这就是我的工作...
对于一个有大量图形的重型指标来说,这不是最好的解决方案。解决办法很简单--使用你自己的变量来代替prev_calculated、静态或全局变量。但这是一个拐杖,我们想要别的东西。
一个使用 "拐杖 "一词的人。
对于一个有大量图形的重型指标来说--不是最好的。不,解决方案很简单--使用自己的变量来代替prev_calculated、静态 或全局变量。但这是一个拐杖,我们想要别的东西。
而如果历史记录被调换了,就意味着可能会有新的条形图 被遗漏或者之前没有计算出来--也就是说,指标读数已经错了。
如果prev_calculated=0,这意味着必须进行全面的重新计算。在这种情况下,所有的标准指标都要重新计算。
这一切都很清楚,但可惜的是,这一切并没有取消这个。
这一切都很有用,但不能按照它的直接目的来使用--显示在前一次调用中处理了多少个 "条"--prev_calculated
指标是不同的;有些根本不需要条形计算,有些只需要实时刻度,有些对转换深度有限制--它们不关心历史上下一个变化是什么,有些需要跟踪图形对象,等等。他们不需要额外的函数来跟踪附在prev_calculated上的历史变化,他们只需要这个--"在前一次调用中处理过的条形图"。他们不需要它。
总之,程序员先生,请不要让加入者分心去'捕捉事件'。
如果我简单地将整个指标重新计算为0呢?在我看来,这是最好的解决方案。
我不会说这是最好的解决方案。至少现在还没有。
我决定写一个指标,记录账户上当前的缩减量,这样我就不必在历史上重新计算什么了。第一行起初看起来是这样的。
我不会说这是最好的解决方案。至少现在还没有。
我决定写一个指标,记录账户上当前的缩减量,这样我就不必在历史上重新计算什么了。起初,第一行看起来是这样的。
"......一些来历不明的价格......"--这是指标缓冲区数组中未被初始化的元素的垃圾。应该做什么。
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
Alexey Viktorov, 2016.10.17 09:58
你明白你写的是什么吗?
最好解释一下如何摆脱垃圾的问题,FIRST 运行的指标。这些垃圾是从哪里来的?在将缓冲区链接到数组时不是应该有初始化吗? 还是在初始化过程中,空间垃圾进入了数组?为什么mql4中没有这些垃圾?
给我一个例子,如何在不使用不相干的额外静态或全局变量 的情况下从正常值中筛选出垃圾。
每个人都能很好地引用文件。
没有人欠别人什么。因此,在绑定之后,在你自己初始化数组的所有元素之前,指标缓冲区中会有一些垃圾。
已添加。
我现在要创造一个例子...
//| prev_calculated.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrGray
#property indicator_label1 "prev_calculated"
//---- buffers
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,ExtBuffer,INDICATOR_DATA);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
if(prev_calculated==0)
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
//--- пересчитываем самый правый бар или самый правый бар и один предыдущий при появлении нового бара
int limit=rates_total-prev_calculated+1;
for(int i=rates_total-limit;i<rates_total;i++)
{
//--- визуализация пересчёта самого правого бара
static bool drive=false;
if(!drive)
ExtBuffer[i]=1.03;
else
ExtBuffer[i]=1.02;
drive=!drive;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
没有人欠别人什么。因此,在绑定之后,在你自己初始化数组的所有元素之前,指标缓冲区中会有一些垃圾。
已添加。
我现在要创造一个例子...
//| prev_calculated.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrGray
#property indicator_label1 "prev_calculated"
//---- buffers
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,ExtBuffer,INDICATOR_DATA);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
if(prev_calculated==0)
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
//--- пересчитываем самый правый бар или самый правый бар и один предыдущий при появлении нового бара
int limit=rates_total-prev_calculated+1;
for(int i=rates_total-limit;i<rates_total;i++)
{
//--- визуализация пересчёта самого правого бара
static bool drive=false;
if(!drive)
ExtBuffer[i]=1.03;
else
ExtBuffer[i]=1.02;
drive=!drive;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
回答错误问题的惊人能力...
现在向我解释一下,如果发生了什么。
1.计算了100个条形图,输入到从0到99的缓冲区(让我们把方向视为时间序列),值为1.03。
2.突然间,历史记录被加载,prev_calculated变成了0
从哪一栏开始,它将是1.03?