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

 
rustein:
是的,我明白了,谢谢你。

这样说吧,我不知道有什么别的办法.......)

于是...

double BullSumm()
{
  double MySummBull=0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    if(!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES))continue; // если нет продолжим цикл
    if(OrderType()==OP_BUY)
    {
      MySummBull+=OrderOpenPrice()*OrderLots();
    }
  }
  if(MySummBull==0)return(380/*v*/);
  return(MySummBull);
}
 
griha:
想把EA的行动记录到一个文件中
我从MQL编辑器的手册中抽取了一个例子,根据我自己的需要稍作修改


结果是文件OrdersReport.csv是空的,尽管订单已经打开。


我遇到了同样的问题,当打开一个文件进行阅读并试图写入时,该文件要么没有被创建,要么没有被写入。

服务台的应用 :

当试图添加到一个用FILE_READ|FILE_WRITE键取消注册的文本文件时,如果没有先用FileSeek()明确设置文件指针,则根本不会发生写入。

在以前的终端版本中,当使用FileReadString()函数预读一个文本文件时,文件指针被自动设置。

这里有一个来自开发商的答案。

文件功能的最后一次变化可以追溯到2008年中期。

以前从来没有人能够在不首先在文件末尾设置文件指针的情况下向文件追加。

还是一个关于额外信息的问题。这是否与文件末尾的加写有关?

任何文件的读写操作都会自动移动文件的指针。这种情况一直存在,并没有改变。然而,如果文件是以csv格式打开的,中间的数据缓冲是可能的。那么文件指针可能不在你期望的位置。同样,从正式发布开始,无论是以前的版本还是预发布的版本,都一直是这种情况。

我们已经多次重申,默认原则是极其有害的。包括用于文件指针。明确处理文件指针,除非你使用连续读或连续写(尤其是奇特的混合读写情况)。

结论:使用FileSeek

 
khorosh:
检查。
谢谢你。
 
Roll:

你的专家顾问根据30分钟的ADX信号进行交易。如果你的专家顾问以1分钟ADX信号进行交易,这种信号将比第一种变体更频繁。你的变体中的屏幕截图只在BUY位置打开时拍摄。
你感兴趣的是截图中的图表缺乏指标(在测试模式下)。你被要求在演示模式下验证截图上是否存在指标。增加了具有相应功能的脚本,因此你可以快速检查和了解你的问题,而不是等待几个小时。已经过去一天多了。我想知道 -- 你的结果是什么?

我会通知你的,我很忙,但我明天会试着去看看。
 

你能告诉我,在函数中定义一个名称,或者在分配一个变量名称,然后将该变量传递给一个函数时,有什么区别吗?

//-------------- первый вариант (рабочий)

string up_line = "upline_", down_line = "downline_";
 
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);     Имя присваиваю в теле функции
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

TimeToStr(Time[i]) указывал в имени тренд лайн в теле функции
//--------------- второй вариант (нерабочий)

string up_line = "upline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()        ИМЯ ПРИСВАИВАЮ В ПЕРЕМЕННОЙ
string down_line = "downline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
 
     flatlineup(up_line, y2,x2,y22,x2,Red,1);                 ПЕРЕДАЮ ПЕРЕМЕННУЮ В ФУНКЦИЮ
     flatlinedown(down_line, y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);
 
rustein:
帮助我摆脱EA中的零除法 错误。

预先感谢你。

你可以这样做,这对我很有效

double BullPrice()

{

double BullAveragePrice=0。

doubleSummBullLots=0。

for (int i = OrdersTotal() - 1; i >= 0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。

如果(OrderSymbol() != Symbol())继续。

如果(OrderSymbol() == Symbol() && OrderType() == OP_BUY)

{

BullAveragePrice+=OrderOpenPrice()*OrderLots()。

MySummBullLots+=OrderLots()。

}

}

如果(MySummBullLots>0) BullAveragePrice =NormalizeDouble(BullAveragePrice / MySummBullLots, Digits);

return(BullAveragePrice)。

}

 
Zhunko:

在MT4文件夹中,有一个用于MQL4中所有情况的C++样本代码。编译该代码并在其中粘贴你自己的代码。你会立即发现你的和例子之间的区别。

我的MT没有。只有1个用MQL编写的库(stdlib.mq4)。你能在这里抛出一个例子吗?
 
Fox_RM:

你能告诉我,在函数中定义一个名字,或者在命名一个变量,然后将该变量传递给一个函数时,有什么区别吗?

在你的例子中,唯一的区别是将参数传递 给函数
dellline(...)
 
costy_:

否则...

谢谢你!
 

请告知情况是这样的,我读了一个这样的csv文件

void ReadDate(){
   while(!IsStopped()){
      string dTime = FileReadString(ExtCsvHandle); // читаем строчку 1
      string sValue = FileReadString(ExtCsvHandle); // читаем строчку 2
      Print("Date=",StrToTime(dTime), "Value=",sValue);   
      
   }
}

但csv文件有一个标题,第一个额外的行

Time,Value
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3

如何以编程方式跳过第一行,或在保存数值时以编程方式删除它,它破坏了一切。

提前感谢。