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

 
LOA:


这段时间的三个最大值,而不是最近的一个。或者说,不一定是最后一次。

看:你有一个带值的数组。你需要在这个数组中找到三个最大值。它们不一定是时间序列阵列中的最后一个或第一个。你只需要找到这三个最大值。

1.让我们把你的数组复制到一个临时数组中(我们将在临时数组中寻找它们)。

int ArrayCopy( object &dest [],object source[],int start_dest=0,int start_source=0,int count=WHOLE_ARRAY)

将一个数组复制到另一个数组。 这些数组必须是相同的类型。double[]、int[]、datetime[]、color[]和bool[]类型的数组,可以作为相同类型的数组被复制。
返回被复制元素的数量。
参数。
目的地[] - 阵列接收机。
来源[] - 来源阵列。
开始_目的地 - 目标数组的起始索引。默认情况下,起始索引为0。
开始的来源 - 源数组的起始索引。默认的起始索引是0。
- 要复制的元素的数量。默认是整个数组(WHOLE_ARRAY)。


2.在临时数组中寻找最大的值。

int ArrayMaximum( double array[],int count=WHOLE_ARRAY,int start=0)

搜索具有最大值的元素。 该函数返回数组中最大元素的位置。
参数。
阵列[] - 要搜索的数字数组。
- 要搜索的元素的数量。
开始 - 开始 - 开始搜索的索引。


3.将找到的索引保存到数组中(例如,MassIndexMaxValue[])

4.将时间数组中找到的最大值归零--只需在那里写上零即可

5.再次在临时数组中搜索下一个最大值(我们找到的第一个最大值的索引已经存储在MassIndexMaxValue[] 中,并且这个最大值的值已经被清零。)

这个循环一直持续到我们在临时数组中找到所需数量的最大值为止。

MassIndexMaxValue[] 现在将包含你的数组中所要求的最大值的索引。
让我们把临时数组的大小重置为零--没有理由堵塞内存

事情就是这样...

ZS...我只是在现场快速画了一张草图...我可能犯了一个错误--我在写的时候是清醒的,没有检查任何东西,但这个函数有类似这样的内容。

void FindMaxValue(double &ms[], int &ind[], int NumMaxValue) {   
   int i, IndMax;
   double tmp[];                       // создаём временный массив
   ArrayResize(ind,NumMaxValue);       // изменяем размер массива индексов максимальных значений под количество макс. значений
   ArrayResize(tmp,ArraySize(ms));     // размер временного массива = размеру вашего массива значений
   ArrayCopy(tmp, ms);                 // копируем ваш массив во временный
   for (i=0; i<NumMaxValue; i++) {     // цикл по количеству искомых максимумов
      IndMax=ArrayMaximum(tmp);        // ищем индекс максимального значения
      ind[i]=IndMax;                   // сохраняем индекс i-го максимального значения
      tmp[IndMax]=0;                   // обнуляем i-е найденное максимальное значение во временном массиве
      }
   ArrayResize(tmp,0);                 // обнуляем размер временного массива
   return;   
}

当它被称为。

FindMaxValue(Ваш_Массив_Значений, MassIndexMaxValue, 3);

...之前定义的数组int MassIndexMaxValue[]必须包含在your_Array_Value[] 中发现的三个最大值的索引。

 

我搞不清楚每笔交易的利润百分比和每笔交易的损失百分比是如何计算的。你能告诉我吗?

http://www.assessor.ru/forum/index.php?t=822

 
artmedia70:

看:你有一个带值的数组。你需要在这个数组中找到三个最大值。它们不一定是时间序列阵列中的最后一个或第一个。你只需要找到这三个最大值。


阿特姆,非常感谢你!

我很高兴我的想法是将数组的最大值清零是正确的,而且你已经详细地描述了一切,包括复制到另一个数组中,现在我将处理细节问题

而按照弗拉基米尔的建议,我将从程序的算法开始,我将处理你的信息,我相信一切都会成功的--好老师。

特别感谢你的文章 https://www.mql5.com/ru/articles/1357

 

下午好!

你能告诉我如何从自定义指标 中获取信号到专家顾问中吗?

我使用了iCustom,但猫头鹰还是没有收到信号

double Signal_I=iCustom(NULL,0,"FL",0,0);
 
skyjet:

下午好!

你能告诉我如何从自定义指标中获取信号到专家顾问中吗?

我使用了iCustom,但猫头鹰还是没有收到信号


也许iCustom指标 代码并不适合它...你的问题中信息太少,无法回答。
 
skyjet:

下午好!

你能告诉我如何从自定义指标中获取信号到专家顾问中吗?

我使用了iCustom,但猫头鹰还是没有收到信号


其他指标也是这样吗?如果是,你不正确地使用iCustom()函数。如果没有,试着检查一下指标的代码--可能是你的指标根本没有使用任何指标缓冲区--它与图形对象的构造 一起工作。
 

你好,有一个函数。

bool Trade()
{
  if(!IsConnected())
  {
     Print("Связь отсутствует.");
     return(false);
  }

  if(!IsExpertEnabled())
  {
     Print("Торговля экспертами выключена.");
     return(false);
  }
  
  if(DayOfWeek()==0 || DayOfWeek()==6)
  {
     Print("В выходные не торгуем.");
     return(false);
  }
  
  if(!IsTradeAllowed())
  {
     Print("Торговля запрещена? WTF???.");
     return(false);
  }
  return(true);
}

但由于某些原因,它并不奏效。在EA中,它在int start()之后的开头被调用,如下所示。

  if(!Trade())
  {
    Sleep(5000);
    return;
  }

在日志和专家选项卡中,专家顾问被成功加载,没有出现其他内容。虽然它应该说,"我们在周末不做交易。" 因为2011年11月26日是星期六。

错误在哪里,我做错了什么?

 
Roman.:

也许iCustom指标代码并不适合...你的问题中信息太少,无法回答。
该指标绘制了 支撑线 和阻力线,在可视化过程中,它是这样做的。该指标本身在越过时给出信号LT_1 == 1或-1。
if((Close[i] > BuyLevel) 
         {
    
          LT_1=1;
               
         }                                 
       if((Close[i] < CloseLevel)
         {
           
           LT_1=-1;
               
         }
 
ivan2k2:

你好,有一个函数。

但由于某些原因,它并不奏效。在EA中,它在int start()之后的开头被调用,如下所示。

在日志和专家选项卡中,专家顾问被成功加载,没有出现其他内容。虽然它应该说,"我们在周末不做交易。" 因为2011年11月26日是星期六。

错误在哪里,我做错了什么?


今天是星期六--休息一天。你启动Expert Advisor,初始化发生了,但由于它是日间关闭,没有tick,所以启动函数没有启动(即Trade()没有被调用)。为了检查它是否正常工作,你需要把这个函数的调用粘在初始化块中,或者在测试器中测试。
 
skyjet:
该指标绘制了支撑线和阻力线,在可视化过程中,它是这样做的。该指标本身在越过时给出信号LT_1 == 1或-1。

那就不用麻烦了--只要把指标的代码移到专家顾问上,因为它要满足交易条件,就这样--然后在棋盘上,根据这些从指标上转移的交易条件,你通过专家顾问开仓,就是这样......