任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1134

 
Alexandr Nevadovschi:

亲爱的程序员们,请帮助这个行业的一个新手。

EA在一定时间后依次打开买入和卖出订单。我希望它能修改所有以前的订单(具体来说,所有以前的订单都应该通过最后一个订单的获利来关闭。也就是说,如果上一个买入订单和上一个卖出订单,那么上一个订单的止损 被设置为上一个订单的获利水平。

如果是前一个买入,那么它的TakeProfit将被设置在上一个TakeProfit的水平上。 好吧,等等。重点是,当最后一个订单的获利到来时,所有的订单必须被关闭)。

我希望我解释得很清楚,尽管很难理解 应该如何 实施。预先感谢你。

我知道我们可以浏览所有未结订单并修改它们,但我们如何跳过最后一个订单?

在这一切中,最重要的是了解应该发生什么。

什么是 "最后的命令"?它是在开幕前的最后一次吗?还是按开盘价格水平?

如果我们把 "最后一个 "订单视为 "买入",但价格会他妈的上升呢?或者反过来说,最后一笔订单将是卖出,但价格却向北走?那么哪一个应该被认为是最后一个呢?这就是我们必须意识到的。

 

你好。如果你事先不知道数组中会有多少个元素,你如何声明数组,使数组随着每个新元素的增加而增加?

举个例子让大家更清楚。

double HighA[]; // ??????????????????

for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Nauris Zukas:

你好。如果你事先不知道数组中会有多少个元素,你如何声明数组,使数组随着每个新元素的增加而增加?

举个例子让大家更清楚。

double HighA[]; // ??????????????????

for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

你应该更多地阅读文档。
ArrayResize - Операции с массивами - Справочник MQL4
ArrayResize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayResize - Операции с массивами - Справочник MQL4
 
Alexey Viktorov:
你应该更多地阅读文档。

我已经阅读并尝试了,但我得到一个 "数组超出范围 "的错误。在这个例子中,它看起来像这样。

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Nauris Zukas:

我已经阅读并尝试了,但我得到一个 "数组超出范围 "的错误。在这个例子中,它看起来像这样。

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

当条件A[i]<B[i]不满足时,数组大小 保持不变,循环计数器被递增。这就是为什么它超出了范围。

这样试试吧。

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            int size = ArraySize(HighA);
            ArrayResize(HighA, size+1);
            HighA[size]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Alexey Viktorov:

当A[i]<B[i]条件不满足时,数组大小保持不变,循环计数器被递增。这就是为什么它是出界的。

这样试试吧。

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            int size = ArraySize(HighA);
            ArrayResize(HighA, size+1);
            HighA[size]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


谢谢你! 现在都 能用了!
 
Nauris Zukas:

我已经阅读并尝试了,但我得到一个 "数组超出范围 "的错误。在这个例子中,它看起来像这样。

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

那会更快地工作

  int countHlines=0;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[countHlines-1]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


// Вариант №2
  int countHlines=-1;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines+1);
            HighA[countHlines]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Vitaly Muzichenko:

好吧,这样工作会更快

  int countHlines=0;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[countHlines-1]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


// Вариант №2
  int countHlines=-1;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines+1);
            HighA[countHlines]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
谢谢你,我明白了!因为ArraySize,它将会更快,它是否会以某种方式减慢速度?
 
Nauris Zukas:
谢谢你,我明白了!因为ArraySize,它将会更快,它是否会以某种方式减慢速度?
不多,但很清楚,而且不会出错。
 
Alexey Viktorov:
不多,但很清楚,而且不会出错。
谢谢你!