开放项目 - 内部测试器-优化器 - 页 3

 
我在这里发布了源代码 -http://forexsystems.ru/phpBB/viewtopic.php?p=4379#4379
你可以看到那些评论,这些评论不得不被删除。
那里介绍了TradeOrdersArray和ClosedOrdersArray数组的用途。还有一些。
 
被重写的OrderSend交易函数。
函数CorrectPrice()和DrawArrowOnChart()还没有被定义。
我把它贴在这里 -http://forexsystems.ru/phpBB/viewtopic.php?p=4380#4380

不得不把所有的变量从init()块拖到头顶上--否则变量就不可见了。我的第一个错误。
第二个问题是,编译器对我试图将函数中的一个参数的默认值设置为NULL的做法表示诅咒。
第三,当代码中遇到未定义/未定义的函数(CorrectPrice() 和 DrawArrowOnChart() )时,编译器不会崩溃。
也许它会偶然发现NULL,不会再有抱怨。
这个函数的定义很愚蠢--我是从字典里抄来的,所以如果开发者会责怪我的错误声明,....。

  //+------------------------------------------------------------------+
//| Redefine OrderSend() function                       |
//+------------------------------------------------------------------+


int fut_OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit,
 string comment=[b]NULL[/b],int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
  {
  if (CorrectPrice(symbol,cmd,price,myCurrentTime))
      {
      TradeOrdersArray[myOrdersTotal,0]= symbol;
      TradeOrdersArray[myOrdersTotal,1]=pool_pos;
      TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1;
      TradeOrdersArray[myOrdersTotal,3]=cmd;
      TradeOrdersArray[myOrdersTotal,4]=volume;
      TradeOrdersArray[myOrdersTotal,5]=price;
      TradeOrdersArray[myOrdersTotal,6]=slippage;
      TradeOrdersArray[myOrdersTotal,7]=stoploss;
      TradeOrdersArray[myOrdersTotal,8]=stoploss;
      TradeOrdersArray[myOrdersTotal,9]=comment;
      TradeOrdersArray[myOrdersTotal,10]=magic;
      TradeOrdersArray[myOrdersTotal,11]=myCurrentTime;
      DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color);
      myOrderTicket++;
      myOrdersTotal++;
      pool_pos++;
      return(myOrderTicket);
      }
      else return(-1);
  }



明天我将尝试重新定义OrderClose() - 在那里将更容易解释测试的想法。
PS 已经有两个人下载了它--有希望了

 
你可以看到那些不得不删除的评论

Rosh,我想出了如何在这个论坛上插入俄文文本(我必须自己想出来:)
当你在编辑器中复制代码时,你应该把它写成俄语。而当你把它粘贴到一个论坛上时,也分别如此。
而且所有的评论都会被保存下来;)
 
雷纳特,斯拉瓦...
这里有一个关于空操作符 的讨论的好例子。
隐式类型转换比小括号后的";"更糟糕,更危险。
在这种情况下,我们有一个明确的错误,但编译器甚至不会产生一个警告。

罗什。
该页又消失了。
 
再试一试。

int fut_OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, 
double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
  {
  if (CorrectPrice(symbol,cmd,price,myCurrentTime))
      {
      TradeOrdersArray[myOrdersTotal,0]= symbol;// записали иструмент
      TradeOrdersArray[myOrdersTotal,1]=pool_pos;// записали номер в списке терминала
      TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1;// записали номер тикета у брокера
      TradeOrdersArray[myOrdersTotal,3]=cmd;// записали тип ордера
      TradeOrdersArray[myOrdersTotal,4]=volume;// записали размер ордера
      TradeOrdersArray[myOrdersTotal,5]=price;// записали цену открытия
      TradeOrdersArray[myOrdersTotal,6]=slippage;// записали проскальзывание в пунктах
      TradeOrdersArray[myOrdersTotal,7]=stoploss;// записали stoploss
      TradeOrdersArray[myOrdersTotal,8]=stoploss;// записали takeprofit
      TradeOrdersArray[myOrdersTotal,9]=comment;// записали комментарии
      TradeOrdersArray[myOrdersTotal,10]=magic;// записали MagicNumber
      TradeOrdersArray[myOrdersTotal,11]=myCurrentTime;// записали дату выставления/открытия ордера
      DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color);
      myOrderTicket++;
      myOrdersTotal++;
      pool_pos++;
      return(myOrderTicket);
      }
      else return(-1);
  }
//+------------------------------------------------------------------+
 
文中有一个严重的错误。
 
谢谢你,小迈。简洁是人才的姐妹。
 
罗什。
我只是想让雷纳特自己看一下,找到错误的地方。
但似乎他们不看这里,或者认为我的帖子很愚蠢。
(引用 - "我们不回答愚蠢的问题." - :)

这是关于MQL语法(和/或编译器)的缺点的话题。
编译器不会对这个错误作出反应,尽管它可以警告你。
我只是想在语言中禁止这种错误(隐式类型转换)。

具体说来。
TradeOrdersArray数组的类型是double
在几个地方,你给它分配了字符串值。
比如说。
TradeOrdersArray[myOrdersTotal,0]= symbol;


编译器会把它全部吃掉,甚至测试器也会工作,但不是你想要的方式。
而且很难寻找这样的错误,特别是如果它是一个月前犯的。
而今天当你在程序中加入几行时才显示出来。

(请修复脚本--页面已经消失,不方便查看。)

 
那么我如何定义一个数组来存储不同类型的数据?
以下是这份声明
string comment=NULL
,编译器会得到一个错误。
但我只是按模式从字典中抄写。
 
我如何定义一个数组来存储不同类型的数据?

我怀疑你不能。
只有在2个不同的数组中。