[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 173

 
Ctmcn:

你能告诉我编译EA时的错误是什么意思吗?

\end_of_program' - 不平衡的左括号


不平衡的左括号。
 
Roll:

左侧支架不平衡。

哎呀...找到了。谢谢你。
 

这里有一个问题。

订单以买入/卖出止损 的形式打开。有些成为市场订单,有些则被删除。

对于最后的N个市场订单(打开和关闭),我们需要知道它们是买入还是卖出。

我的第一个想法是,从OrdersHistoryTotal()和 OrdersTotal()中搜索所有订单,按以下方式排序

然后按OP_BUY和OP_SELL排序。但是这很漫长,会使处理器的速度疯狂下降。

- 也许还有一些其他更简单的变体?

谢谢你!

 

下午好。

有谁能帮忙吗?

我写了我的第一个简单指标,它应该计算过去2、3、4、5天的平均波动率。

该指标有六个缓冲区。

SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,VolatBuffer0);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,VolatBuffer1);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,VolatBuffer2);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3,VolatBuffer3);
   SetIndexStyle(4,DRAW_HISTOGRAM);
   SetIndexBuffer(4,VolatBuffer4);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,VolatBuffer5);

在图表的窗口中,通常只画出0天、1天、2天、3天和4天的平均波动率的五条垂直线

根据前5天的总和得出的平均波动率被画成50根日蜡烛的断线--这就是指定的蜡烛数量。

缓冲区的含量计算如下:5天的平均数--周期内(要画一条50天的线),其他平均数据--周期外。

while(i>=0)
   {
    
   int day0= (High[i] - Low[i])/Point;
   int day1= (High[i+1] - Low[i+1])/Point;
   int day2= (High[i+2] - Low[i+2])/Point;
   int day3= (High[i+3] - Low[i+3])/Point;
   int day4= (High[i+4] - Low[i+4])/Point;
   int day5= (High[i+5] - Low[i+5])/Point;

        int D5_av = (day1+ day2+ day3+ day4+ day5) / 5;
       VolatBuffer5[i]=D5_av;
      i--;
        }
        day0= (High[0] - Low[0])/Point;
   day1= (High[1] - Low[1])/Point;
   day2= (High[2] - Low[2])/Point;
   day3= (High[3] - Low[3])/Point;
   day4= (High[4] - Low[4])/Point;
        
        int D4_av = (day1+ day2+ day3+ day4)/4;
        int D3_av = (day1+ day2+ day3)/3;
        int D2_av = (day1+ day2)/2;
        int D1_av = day1/1;
        int D0_av = day0/1;
        
        VolatBuffer0[0]=D0_av;
      VolatBuffer1[1]=D1_av;
      VolatBuffer2[2]=D2_av;
      VolatBuffer3[3]=D3_av;
      VolatBuffer4[4]=D4_av;
Comment("Волатильность. За 5 дн.= "+VolatBuffer5[5]+" За 4 дн.= "+VolatBuffer4[4]+" За 3 дн.= "+VolatBuffer3[3]+" За 2 дн.= "+VolatBuffer2[2]+" Вчера= "+VolatBuffer1[1]+" Сегодня= "+VolatBuffer0[0]);

指示器中的Coment行,在其中输入了缓冲区的内容,在屏幕上给出了一个荒谬的结果。

5天的平均数 - 这些天的波动率不超过194点,其他天的结果正确。

评论 =" 波动性。5天=219.000000 4天=171.0000000 3天=189.00000 2天=187.00000 昨天=194.00000 今天=5 "

零日 "今天 "明显地随着当日的波动性而增加

当调用这些缓冲区给专家顾问时

int Volat0= iCustom(Symbol(), 1440, "Volat_Average_Gist",0,0);
      int Volat1= iCustom(Symbol(), 1440, "Volat_Average_Gist",1,0);
      int Volat2= iCustom(Symbol(), 1440, "Volat_Average_Gist",2,0);
      int Volat3= iCustom(Symbol(), 1440, "Volat_Average_Gist",3,0);
      int Volat4= iCustom(Symbol(), 1440, "Volat_Average_Gist",4,0);
      int Volat5= iCustom(Symbol(), 1440, "Volat_Average_Gist",5,0);

测试员的打印线 输出另一个荒谬的结果--不正确,与评论线不同,但与事实相似,5天的平均结果和 今天的 "零天 "的正确波动率。

其余的则给出了一个固定的荒谬的数字。

测试器打印显示5天内的波动率=181 4天内=2147483647 3天内= 2147483647 2天内=2147483647 昨天=2147483647 今天=5

几天来,我无法理解为什么调用专家顾问的数据与五个指标缓冲区所包含的数据不同,除了 "Day Zero "缓冲区?

 

试着替代

VolatBuffer1[1]=D1_av;

VolatBuffer1[0]=D1_av;

和所有其他缓冲区也是如此。

 
Roger:

试着替代

VolatBuffer1[1]=D1_av;

VolatBuffer1[0]=D1_av;

和所有其他缓冲区也是如此。

谢谢你!

它起作用了。专家顾问开始接收正常数据。

此外,还有一个有趣的效果--在指标的 "评论 "行中

只有5天的219人将保持原状。

同时,专家顾问收到181个,而不是219个,因为它应该是。

评论''显示波动率 超过5天= 219.000000 超过4天=2147483647 超过3天= 2147483647 超过2天=2147483647 昨天=2147483647 今天= 5

 
Roger:

试着替代

VolatBuffer1[1]=D1_av;

VolatBuffer1[0]=D1_av;

和所有其他缓冲区也是如此。

我还发现了一个效果。指示器窗口中的所有垂直线 都画在彼此的上面

最大的数值涵盖了所有其他数值。对于专家顾问来说,这并不是必须的。

 
Vekker:

下午好。

有谁能帮忙吗?

写了我的第一个简单指标--应该计算过去2、3、4、5天的平均波动率。

你可以通过使用ATR来大大简化事情。

iATR(NULL, PERIOD_D1, Number_Of_Days, 1)
 
Roll:
两个脚本。

问题不再是如何写代码,而是在一个想法的层面上--是否有可能避免多重循环。

这给处理器带来了很大的负荷。例如,有一个想法是跟踪未平仓的STOP订单的数量 - 如果它减少了一个,但订单没有被删除=>打开一个市场订单=>。

其开放时间和类型应放在一个数组中。类似这样的事情。

欢迎提出任何意见。

谢谢!

 
chief2000:

你可以通过使用ATR来大大简化事情。



谢谢你!我将尝试