[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 655

 
Vinin:

自然,还有其他时候。


毫米,我想,大块完成,好了,有128千字节的合并--记录。因为在崩溃的情况下,这将是更正确的。虽然为了故事,当然,不管怎样。

我就是想不明白,我正在下载,但在关闭终端之前无处可去 ))

 
ToLik_SRGV
谢谢你对Print() 的提示,我会研究的。
 
sanyooooook:

你可以在初始阶段改变这个参数,但在开始阶段,这一点是值得怀疑的。


谢谢你,因为当窗口上的TF发生变化时,指标被重新启动,这意味着我们可以重新给缓冲区着色。

重点是--在任何TF上,与其他TF的随机指标相对应的线的颜色总是相同的。也就是说,如果每小时的随机指数是蓝色的,那么让它在所有TF上都是蓝色的。

当然,我们可以将适当颜色的缓冲区分配给适当的TF,但这样一来,处理程序就变得更加复杂。而且我们希望它在所有条件下都能读到同一个缓冲区。

 
ToLik_SRGV:

Print(),你需要先放在这里。


,确保数组c1b_1[i]是空的,所以比较中如果是零,可以理解为交易没有被打开。

而那里的零是因为函数 iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i)(extern intAvgB=25;)中的平均周期大于数组c1b 本身 ArrayResize(c1b,PeriodB ) (extern int PeriodB=20;),所以它不能平均什么。


是的,确实是 "0",但该怎么做,告诉我--它不工作的两种方式(和相等的周期设置)尝试了两个选项(新的和旧的)Print("NormalizeDouble(c1b_1 ..., null returns (只显示c1b[i]值,所有其他的包括c1s[i] - 零),帮助我把其中一个选项带到工作状态或至少分享一个提示,谁会看到缺陷?

新的。

// Торговые критерии   
   double c1b[];
   ArrayResize(c1b,PeriodB);
   double c1b_1[];
   ArrayResize(c1b_1,AvgB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   {
   c1b_1[i]=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   }
   }
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   double c1s_1[];
   ArrayResize(c1s_1,AvgS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   {
   c1s_1[i]=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   }
   }
   
   Print("NormalizeDouble(c1b_1[i],4) - ",NormalizeDouble(c1b_1[i],4));
   Print("NormalizeDouble(c1b_1[i+2],4) - ",NormalizeDouble(c1b_1[i+2],4));
   Print("NormalizeDouble(c1b_1[i+3],4) - ",NormalizeDouble(c1b_1[i+3],4)); 

if (NormalizeDouble(c1b_1[i],4)<NormalizeDouble(c1b_1[i+2],4)&&NormalizeDouble(c1b_1[i+2],4)>NormalizeDouble(c1b_1[i+3],4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1[i],4)>NormalizeDouble(c1s_1[i+2],4)&&NormalizeDouble(c1s_1[i+2],4)<NormalizeDouble(c1s_1[i+3],4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

旧的。

// Торговые критерии
   double c1b[];
   ArrayResize(c1b,PeriodB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);
   
   Print("NormalizeDouble(c1b_1,4) - ",NormalizeDouble(c1b_1,4));
   Print("NormalizeDouble(c1b_2,4) - ",NormalizeDouble(c1b_2,4));
   Print("NormalizeDouble(c1b_3,4) - ",NormalizeDouble(c1b_3,4));

if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

整个。

附加的文件:
21_1.mq4  15 kb
 

先生们,我想知道,如果我通过四个时间段的循环来寻找信号,每次都要调用数据,会不会比例如有四个不同时间段的同一指标窗口的CPU负荷更大?

 
Rossi:

先生们,我想知道,如果我在四个时间段内循环寻找信号,每次都要调用数据,会不会比例如有四个不同时间段的同一指标窗口的CPU负荷更大?


这取决于如何实施。
 

int TimeMassive[15, 30, 60, 240] 。

for(int k=0; k<4; K++)

{

Timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Buffer[i]= iMA(NULL, timeframe,..........................) ;

}

大约是这样的,无需为每个时间段分配内存

 
一样。
 
Rossi:

int TimeMassive[15, 30, 60, 240] 。

for(int k=0; k<4; K++)

{

Timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Buffer[i]= iMA(NULL, timeframe,..........................) ;

}

大约是这样的,无需为每个时间段分配内存


int TimeMassive[]={15, 30, 60, 240} ;

for(int k=0; k<4; K++)

{

timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Buffer[i]= iMA(NULL, timeframe,..........................) ;

}
这样说更准确一些
 
什么会导致堆栈溢出?当你 用大的取数开仓时(取数由波动率计算并乘以100,大小为41*100),堆栈溢出被记录并.........就拿去吧。在这个仓位关闭之前不会再开仓,而这个仓位当然不会关闭,因为有巨大的TP...而EA根本不能正常工作,因为它应该在达到预定的未结头寸的总利润时关闭所有头寸......。但这并没有发生,尽管这一个位置长期以来一直处于巨大的利润中,大约有两千点......我如何对抗它?你不能保证在未平仓合约溢出堆栈的情况下,一切都会颠倒过来......。