新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 669

 
psyman:

我读了你因我的主题而产生的信件,这很有趣:-)但引起所有这些讨论的问题是什么?

通过SetIndexBuffer(1, tmp1) 声明一个数组,我没有得到任何 结果。当然,我可以在同一个循环中增加数组大小,但我想知道一个更简单、更有效的方法。

给我看完整的代码--你在那里做了什么,你想要什么,你已经得到什么。

 

我想观察波动情况。至少要从开盘-收盘开始,用均线做一个时期的平均数。


//+------------------------------------------------------------------+
//|                                                        _null.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot OC
#property indicator_label1  "O-C"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrSteelBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         ip1Buf[];

input int ip1=100;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  
string s_name1;

s_name1="O-C (" + IntegerToString(ip1) + ")";

IndicatorShortName(s_name1);
SetIndexLabel(0, s_name1);


//--- indicator buffers mapping
   SetIndexBuffer(0,ip1Buf);
   
//---
   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[])
  {


int i;
double tmp1[];

SetIndexBuffer(1, tmp1);


      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total-1; i++)
      {
      tmp1[i]=close[i];      
      ip1Buf[i]=iMA(NULL,0,100,0,0,tmp1[i],0);
      
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
psyman:

我想观察波动情况。至少要从开盘-收盘开始,用SMA做一个时期的平均数。


SetIndexBuffer(1, tmp1) 为什么不在OnInit()中?

为什么没有 IndicatorBuffers(2) ?

你为什么不以最佳方式计算呢?每一次打勾 都有一个完整的循环。

为什么是iMA()而不是iMAOnArray()?

 

=为什么没有 IndicatorBuffers(2) ?


#property strict并没有抱怨,这可能是我没有写进去的原因。


=为什么是iMA()而不是iMAOnArray()?


我没有足够的知识,课本上也没说什么。

缺少系统知识是一个严重的限制。


=在每一个刻度上进行全循环


我不明白这一点,请解释一下原因,或者给我一个链接,说明在哪里做的。

我有一个至少一小时的TF。

 
=На 每个刻度是一个完整的周期


我不明白这些,请解释一下,或者给我一个链接,让我知道哪里有这样的做法。

我有一个最小的TF,一个小时。

在每次调用OnCalculate的时候,你都有一个for循环,正在搜索从1到rate_total的数据,也就是做同样的工作。当然,这是件坏事。

 
psyman:

=为什么没有 IndicatorBuffers(2) ?


#property strict并没有抱怨,这可能是我没有写进去的原因。


=为什么是iMA()而不是iMAOnArray()?


我没有足够的知识,课本上也没说什么。

缺少系统知识是一个严重的限制。


=在每一个刻度上进行全循环


我不明白这一点,请解释一下原因,或者给我一个链接,说明在哪里做的。

我有一个至少一小时的TF。

你知道吗,我在这个主题中附上了一个指标模板--在它的中间某处--你可以找到它,然后用它做你想做的事。查一查吧。我还写道,很多时候人们对正在发生的事情感兴趣,所以我决定做一个指标模板,并把它放在这个主题中。

 

关于交易、自动交易系统和策略测试的论坛

新手对MQL4的任何问题,对算法和代码的帮助和讨论

Andrei Novichkov, 2018.10.17 22:06

在每次调用OnCalculate时,你都有一个for循环,用于搜索从1到rate_total的数据,也就是说,做同样的工作。这当然是一件坏事。


如果你说它不好,请告诉我如何做好它。你想把计算转移到OnInit吗?

 

关于交易、自动交易系统和策略测试的论坛

对MQL4新手的任何问题,对算法和代码的帮助和讨论

Artyom Trishkin, 2018.10.17 22:10

你知道,我直接在这个分支中--在它中间的某个地方,附加了一个指标模板--你可以找到它,并直接从它做你想做的事。查一查吧。我写道,很多人对它的工作方式感兴趣,我决定做一个指标模板,并把它放在这个主题里。


搜索 "指标模板 "和你的名字并没有找到任何东西,在这里已经写了《战争与和平》一卷。

我想到了帖子中的任何词语组合。

 
如何创建一个类实例的数组?
使得ClassName* className[],然后对其进行ArrayResize,但不给无效的指针 访问的方法
 
Roman Sharanov:
如何创建一个类实例的数组?
使得ClassName* className[],然后对其进行ArrayResize,但不给无效的指针 访问的方法

CArrayObj 中有一个例子

原因: