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

 
Vitaly Muzichenko:

limit -图表上的条数,这样当你滚动浏览历史时,指标将显示到历史的尽头。


非常感谢您!:)

 

你好,你能告诉我如何在指标中写参数--适用于--中位数价格,在这种情况下,Moveng

我将描述这个问题,该指标有一个数组[][],它记录了计算MA的数据--数据是在HL/2价格下记录的,而不是默认的。

 

你好,我想把CDecisionForest类对象 写进bin文件(它来自Alglib库),但我不知道怎么写。我试着用FileWriteStruct,但编译器在我的类参数上给出了一个错误。

'df' - structures containing objects are not allowed

究竟是可以写出来,还是我应该把对象拆开,分头写,然后再重新组装?
 
Vitaly Muzichenko:

limit -图表上的条数,这样当你滚动浏览历史时,指标将显示到历史的尽头。


亲爱的先生,请您解释一下。

我使用你链接上的信息没有成功。

当我自己声明极限值 时--"阵列超出范围 "窗口弹出。

调试员在for循环中用数组指向字符串。

for(int i=0; i<limit; i++) {
    RSI[i] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,i);
  }

for(int i=0; i<limit; i++) {
    BandsMn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_MAIN,i);
    BandsUp[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_UPPER,i);
    BandsDn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_LOWER,i);
  }

也许有一个更简单的方法来制作这一切?
我不需要这幅画。

只有当前和之前的条形图上的值。

 
Ras al Ghul:

亲爱的先生,请您解释一下。

使用你链接上的信息,我没有获得成功。

当自己声明极限值 时--"阵列超出范围 "的窗口弹出。

调试员在for循环中用数组指向字符串。

也许可以用更简单的方法来做?
我不需要绘画。

只有当前和之前的条形图上的数值。

你是如何计算极限的?

实际上,极限值是在指标的反向计算中计算的--从历史的开始到结束(到当前数据)。

   if(rates_total<нужное_количество_баров_для_верного_расчёта) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) {
      limit=rates_total-нужное_количество_баров_для_верного_расчёта-1;
      // здесь, при необходимости очистки мусора в буферах, их инициализация пустыми значениями
      }
   //---
   for(int i=limit; i>=0; i--) {
      // тут цикл просчёта индикатора
      }
概念"计算所需的条数"是指能正确计算指标的最小条数。对于一个2X2的分形来说,有六个条形--两个在左边,一个在中间,两个在右边,一个在最右边,这些条形应该完全形成,以便分形不被重新计算。
 

你好,请你告诉我如何在一个指标中增加一维数组的大小

只要它有一个缓冲区索引来调用

而数组的大小超过了条数的数量

 

在我看来,被困在这样一个简单的地方。如果我想并行运行几个counter()函数,全局 int chekcount=0; int count=0; 怎么办?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???

int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;

   return(chekcount);
  }

 
Nauris Zukas:

在我看来,被困在这样一个简单的地方。如果我想并行运行几个counter()函数,该如何处理全局 int chekcount=0; int count=0;

只要使用一个类,或者用不同的名字复制函数。

 
Vitaly Muzichenko:

只使用一个类,或者用不同的名字复制函数。

所以,这不是那么简单...谢谢你!

 

如果不难的话,谁能用一个类重写这个函数?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???
int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;
   return(chekcount);
  }
原因: