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

 

你好。

请帮助我给 ""字形上色。

我想把它变成这样,如果从谷底到顶部的距离>=100点,就把这个段染成绿色。

 
Dimitry-1983:

你好!

我已经绞尽脑汁了。如何检查双数组中是否有某个价格?

我是为了测试而这样写的。



脚本找到了11、22、33、44,没有任何问题(终端有这样的命令)。然而,如果脚本处理的价格是45,例如,它仍然显示3(价格44在阵列中的位置)。

我真正需要的是一个bool--如果数组中存在正在处理的订单的价格,它应该返回true,如果没有,它应该返回false。但我还没有在语言中找到这样的功能。

该函数返回在第一个数组维度中找到的第一个元素的索引,但是如果没有找到所需的值,它将返回具有最小值的元素的索引,所需的值位于该元素之间因此,对于这项任务,我们还应该检查所寻求的价值和所找到的价值是否相等。比较的结果将是真的或假的。

 
STARIJ:

我为什么要从指标中打印东西?一切都在屏幕上--这就是指标的作用。当我需要一个表格时--我用iCustom()运行脚本。


你在这里写的东西,我一点都不明白。我们在谈论的是,我创建了一个文件,由于某种原因,这个文件总是空的。我不能把一个数组的数据弄到一个文件里。

我需要将数据保存在一个文件中。如果该指标在图表上附着了1年,那么它在一年内的所有读数记录都应该在那里!

 
Alekseu Fedotov:

这是个有趣的缝合方式。

误打误撞地试试这个。


谢谢你!但我已经试过了,没有效果。

 

你们能不能告诉我为什么会出现这些错误?

//--- input parameters
input int      MyLevel=100; // установка уровня (отступ) выше (ниже) текущей цены;
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   double R1 = 0; // служеные переменные принимаются равными 0;
   double R2 = 0; // служебные переменные; принимаются равными 0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

   double i=Bid; // переменной i присваивается значение текущего курса;

   if(i>=R1) // если текущий курс >= служебной переменной R1;
     {
      R1=i+(MyLevel*Point); // то присваиваем R1 новое значение равное текущему курсу + отступ,
      R2=i-(MyLevel*Point); // также присваиваем R2 новое значение = текущий курс - отступ;
     }
   else
     {
      break;  // иначе, выходим из оператора
     }
   if(i<=R2) // если текущий курс <= служебной переменной R2;
     {
      R1=i+(MyLevel*Point); // то присваиваем R1 новое значение равное текущему курсу + отступ,
      R2=i-(MyLevel*Point); // также присваиваем R2 новое значение = текущий курс - отступ;
     }
   else
     {
      break; // иначе выходим
     }

   Label1Buffer [0] = R1; // заносим в буфер данные R1
   Label2Buffer [0] = R2; // и R2

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

错了。

'R1' - 未宣布的标识符 Mylevel.mq4 61 10

由于类型转换可能导致数据丢失 Mylevel.mq4 63 9

'R2' - 未声明的标识符 Mylevel.mq4 64 7

';' - 'break'必须在一些循环或开关语句中使用 Mylevel.mq4 68 12

';' - 'break'必须在一些循环或开关语句中使用 Mylevel.mq4 77 12


 
YarTrade:

你们能不能告诉我为什么会出现这些错误?

错了。

'R1' - 未宣布的标识符 Mylevel.mq4 61 10

由于类型转换可能导致数据丢失 Mylevel.mq4 63 9

'R2' - 未声明的标识符 Mylevel.mq4 64 7

';' - 'break'必须在一些循环或开关语句中使用 Mylevel.mq4 68 12

';' - 'break'必须在一些循环或开关语句中使用 Mylevel.mq4 77 12


R1、R2分别在一个函数内声明--只在那里可见--它们是局部的。
break用于循环和交换中。
 

我不知道是否有类似于mt5的reportmanager的组合测试报告 的程序,reportmanager并不能打开它们

 
iv1986:

如果你知道,是否有一个类似于mt5的reportmanager的合并测试报告 的程序,但reportmanager并不能打开它们

重写代码并在mt5中做多货币测试更容易。在mt4平台上的测试结果肯定是不正确的,最后的结果会被严重扭曲,分析起来也没有意义。

这里是23个符号测试中的一个,一切都很清楚,几乎一目了然


 

如果我对每个工具有不同的参数和策略,我可以制作一个多工具的EA吗?

Vitaly Muzichenko:

重写代码并在mt5中做多货币测试更容易。在mt4平台上的测试结果显然是错误的,最终的结果会被严重扭曲,分析起来也没有意义。

这里是23个符号的测试之一,一切都很清楚,几乎一目了然


如果我对每个符号都有不同的策略和相应的不同代码,我可以制作这样的EA吗?

 
iv1986:

如果我对每个工具有不同的参数和策略,我可以制作一个多工具的EA吗?

如果我对每个工具有不同的策略和代码,是否有可能做出这样的EA?

你可以写一个多货币的EA,它将在一个文件中。可以将不同货币对的策略合并在一个文件中供测试者使用,也可以在一个图表上进行在线交易,但也可以将它们分开,让每个策略在EA所处的符号上进行交易。可能性是无限的